#include #include #include #define lowbit(x) (x&-x) #define MOD 1000000007 using namespace std; int sumv[300][10005]; int num[10005],f[10005]; void add(int *sumv,int x,int num,int n) { for(;x<=n;x+=lowbit(x)) { sumv[x]+=num; if (sumv[x]>=MOD) sumv[x]-=MOD; } } int sum(int *sumv,int x) { int s=0; for(;x;x-=lowbit(x)) { s+=sumv[x]; if (s>=MOD) s-=MOD; } return s; } int main() { int cases; scanf("%d",&cases); for(int t=1;t<=cases;t++) { memset(f,0,sizeof(f)); int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&num[i]); int cnt=0; for(int i=1;i<=n;i++) { int x=lower_bound(f+1,f+cnt+1,num[i])-f; if (x>cnt) f[++cnt]=num[i]; else f[x]=num[i]; for(int j=x;j>1;j--) { int s=sum(sumv[j-1],num[i]); add(sumv[j],num[i],s,n); } add(sumv[1],num[i],1,n); } printf("Case #%d:",t); for(int i=1;i<=cnt;i++) printf(" %d",sum(sumv[i],n)); for(int i=cnt+1;i<=n;i++) printf(" 0"); printf("\n"); for(int i=1;i<=cnt;i++) memset(sumv[i],0,sizeof(int)*(n+1)); } return 0; }