#include const int M=1e4+5,P=1e9+7; int T,n,A[M],Id[M],Ans[M]; struct BIT { long long C[M]; void Add(int x,int a) { while(x<=n) { C[x]+=a; if(C[x]>=P)C[x]-=P; x+=x&-x; } } long long Sum(int x) { int ret=0; while(x>0) { ret+=C[x]; if(ret>=P)ret-=P; x-=x&-x; } return ret; } void clear() { for(int i=1; i<=n; i++)C[i]=0; } } c[305]; int main() { scanf("%d",&T); for(int kase=1; kase<=T; kase++) { scanf("%d",&n); for(int i=1; i<=n; i++) { scanf("%d",&A[i]); Id[A[i]]=i; Ans[i]=0; } printf("Case #%d:",kase); for(int i=1; i<=n; i++) { int &x=Id[i]; Ans[1]++; c[1].Add(x,1); for(int j=2; j<=n; j++) { int s=c[j-1].Sum(x-1); if(s==0)break; c[j].Add(x,s); Ans[j]+=s; if(Ans[j]>=P)Ans[j]-=P; } } for(int i=1; i<=n; i++) { printf(" %d",Ans[i]); if(i<=300)c[i].clear(); } puts(""); } return 0; }