https://acm.hdu.edu.cn/showproblem.php?pid=7304
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int t;
int n;
ll dp[3005][3005];//dp[k][num]第k位,最后一位数为num
ll a[3005],x[3005],num[3005];
ll sum[3005][3005];
ll ans=0;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%lld",&x[i]);
}
sort(x+1,x+n+1);
a[1]=1;
num[0]=1;
num[1]=1;
for(int i=2;i<=n;i++){
if(x[i]!=x[i-1]){
a[i]=a[i-1]+1;
num[0]++;
}
else{
a[i]=a[i-1];
}
num[a[i]]=i;
}
for(int i=1;i<=num[0];i++){
dp[1][i]=1;
sum[1][i]=(sum[1][i-1]%mod+dp[1][i]%mod)%mod;
}
printf("%lld\n",num[0]);
for(int k=2;k<=n;k++){
ans=0;
for(int i=1;i<=num[0];i++){
if(k>num[i]) dp[k][i]=0;
else{
dp[k][i]=sum[k-1][i];
}
ans=(ans%mod+dp[k][i]%mod)%mod;
sum[k][i]=(sum[k][i-1]%mod+dp[k][i]%mod)%mod;
}
ans%=mod;
printf("%lld\n",ans);
}
for(int k=1;k<=n;k++){
for(int i=1;i<=num[0];i++){
dp[k][i]=0;
sum[k][i]=0;
//cout<<"k="<<k<<" i="<<i<<" dp"<<dp[k][i]<<endl;
}
}
}
return 0;
}