WA 飞了
#include<bits/stdc++.h>
#define int long long
#define _ (int)(1e3 + 4)
using namespace std;
struct io { int v, id, st; };
const int mod = 1e9 + 7;
int n, m, p, c, ans, t, id;
int tr[_][_], b[_];
io a[_];
bool cmp(io a, io b) {
return a.v < b.v;
}
int lb(int x) { return x & (-x); }
void clear()
{
ans = 0;
for(int i = 1; i <= n; i ++) {
for(int j = 1; j <= n; j ++) {
tr[i][j] = 0;
}
}
}
void add(int p, int x, int k) {
while(p <= n) (tr[p][x] += k) % mod, p += lb(p);
}
int sum(int p, int x) {
int r = 0;
while(p) (r += tr[p][x]) % mod, p -= lb(p);
return r;
}
void work()
{
cin >> n >> m;
clear();
for(int i = 1; i <= n; i ++) {
cin >> a[i].v; a[i].id = i;
}
sort(a + 1, a + 1 + n, cmp);
p = 0, c = 0;
for(int i = 1; i <= n; i ++) {
if(a[i].v != p) {
p = a[i].v;
b[a[i].id] = ++c;
}
else b[a[i].id] = c;
}
for(int i = 1; i <= n; i ++) {
add(b[i], 1, 1); // dp[i][1] = 1
for(int j = 2; j <= m; j ++) {
int nd = sum(b[i] - 1, j - 1); // dp[i][j] = sum(dp[k][j-1]) [a[k] < a[i]]
add(b[i], j, nd);
if(j == m) (ans += nd) % mod;
}
}
if(m == 1) ans += n;
printf("Case #%lld: %lld\n", id, ans);
}
signed main()
{
cin >> t;
while(t --) ++ id, work();
return 0;
}
//Case #1: 3