#include using namespace std; #pragma GCC optimize(2) using LL = long long; const LL maxn = 10100; const LL mod = 1e9+7; LL n; LL p[maxn]; LL bit[maxn]; LL f[2][maxn]; LL lowbit(LL x) { return x & -x; } void add(LL x, LL val) { for(LL i = x; i <= n; i+=lowbit(i)) { bit[i] += val; bit[i] %= mod; } } LL sum(LL x) { LL ret = 0; for(LL i = x; i; i-=lowbit(i)) { ret += bit[i]; ret %= mod; } return ret; } signed main() { // freopen("in", "r", stdin); LL T, _ = 0; scanf("%I64d", &T); while(T--) { scanf("%I64d", &n); for(LL i = 1; i <= n; i++) { scanf("%I64d",&p[i]); } memset(bit, 0, sizeof(bit)); memset(f, 0, sizeof(f)); LL x = 0, flag = 1; for(LL i = 1; i <= n; i++) f[0][i] = 1; printf("Case #%I64d:", ++_); printf(" %I64d", n); for(LL l = 2; l <= n; l++) { x = !x; LL ret = 0; if(flag) { memset(bit, 0, sizeof(bit)); for(LL i = 1; i <= n; i++) { f[x][i] = sum(p[i] - 1); ret += f[x][i]; ret %= mod; add(p[i], f[!x][i]); } } if(ret == 0) flag = 0; printf(" %I64d", ret); } printf("\n"); } return 0; }