#include using namespace std; #define ll long long #define FOR(a,b,c) for(int a=b;a<=c;a++) #define FORD(a,b,c) for(int a=b;a>=c;a--) #define FORL(a,b) for(int a=head[b];a;a=nxt[a]) #define in(a) a=read() #define out(a) printf("%d\n",a) #define clr(x,y) memset(x,y,sizeof(x)) inline ll read(){ ll f=1,x=0;char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar(); return x*f; } /*------------------------------------------------------------*/ #define mod 1000000007 #define maxn 11000 #define inf (1<<30) /*-----------------------------------------------------------*/ int sum[maxn],s[2][maxn]; int get(int x){ int ans=0; for(;x;x-=x&(-x))ans=max(ans,sum[x]); return ans; } int n; int p=0,q=1; void xg(int x,int y){ for(;x<=n;x+=x&(-x))sum[x]=max(sum[x],y); } void add(int p,int x,int y){ for(;x<=n;x+=x&(-x))s[p][x]+=y,s[p][x]%=mod; } int cx(int p,int x){ int ans=0; for(;x;x-=x&(-x))ans+=s[p][x],ans%=mod; return ans; } int a[maxn],ans[maxn],f[maxn][2]; int main(){ int t; in(t); FOR(w,1,t){ in(n); FOR(i,1,n)in(a[i]); int mx=0; clr(sum,0); FOR(i,1,n){ int c=get(a[i]); mx=max(mx,c+1); xg(a[i],c+1); } p=0,q=1; clr(ans,0); FOR(i,1,n)f[i][q]=1; FOR(j,2,mx){ p=!p;q=!q; clr(s[p],0); FOR(i,1,n){ f[i][q]=cx(p,a[i]); add(p,a[i],f[i][p]); ans[j]+=f[i][q];ans[j]%=mod; } } ans[1]=n; printf("Case #%d: ",w); FOR(i,1,n-1)printf("%d ",ans[i]); printf("%d",ans[n]); printf("\n"); } } //f[i]=max(f[j])+1 (a[i]>a[j]) //f[i][j]=f[k][j-1](a[i]>a[k])