#include #include #include #define LOG(FMT...) fprintf(stderr, FMT) using namespace std; const int N = 10010, EXP = 300; const int P = 1000000007; int n; int a[N], len[N], stk[N]; int ans[N]; int dp[EXP][N]; int lowBit(int x) { return x & -x; } int qr(int* fw, int k); void ch(int* fw, int k, int x); int main() { int t; scanf("%d", &t); for (int cs = 1; cs <= t; ++cs) { memset(dp, 0, sizeof(dp)); memset(ans, 0, sizeof(ans)); int cnt = 0; scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); len[i] = lower_bound(stk, stk + cnt + 1, a[i]) - stk; stk[len[i]] = a[i]; if (cnt + 1 == len[i]) ++cnt; } ch(dp[0], 0, 1); for (int i = 1; i <= n; ++i) { for (int j = 1; j <= len[i]; ++j) { int cur = qr(dp[j - 1], a[i] - 1); ans[j] += cur; if (ans[j] >= P) ans[j] -= P; ch(dp[j], a[i], cur); } ++ans[0]; } printf("Case #%d:", cs); for (int i = 1; i <= n; ++i) printf(" %d", ans[i]); putchar('\n'); } return 0; } int qr(int* fw, int k) { ++k; int ret = 0; for (; k; k -= lowBit(k)) { ret += fw[k]; if (ret >= P) ret -= P; } return ret; } void ch(int* fw, int k, int x) { ++k; for (; k <= n + 1; k += lowBit(k)) { fw[k] += x; if (fw[k] >= P) fw[k] -= P; } }