#include #define low(x) (x&(-x)) using namespace std; const int mm=1e9+7; int T,n,a[10010],id[10010],s[10010],sz,ans[10010]; vector t[10010]; void sum(int x){ for(int i;x;x-=low(x)){ sz=max(sz,i=(int)t[x].size()); for(int j=0;j=mm) s[j]-=mm; } } for(int i=sz;i;i--) s[i]=s[i-1]; sz++; s[0]=1; } void add(int x){ for(int i;x<=n;x+=low(x)){ i=min(sz,(int)t[x].size()); for(int j=0;j=mm) t[x][j]-=mm; } if(sz>(int)t[x].size()) for(int j=i;j=mm) ans[sz]-=mm; s[sz]=0; } } int main(){ scanf("%d",&T); for(int ii=1;ii<=T;ii++){ printf("Case #%d:",ii); scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]),id[a[i]]=i; for(int i=1;i<=n;i++) sum(id[i]), add(id[i]); for(int i=1;i<=n;i++) printf(" %d",ans[i-1]);puts(""); for(int i=1;i<=n;i++) ans[i-1]=0,t[i].clear(); } }