#include using namespace std; int rec[105000]; int cnt[105000]; int base[105000]; int tmp[105000]; int ans[105000]; int ans2[105000]; int n; int tot; int gcd(int x, int y) { if(y==0)return x; return gcd(y, x%y); } bool judge(int ap) { for(int i=1;i<=n/ap;i++) { for(int j=1;j<=ap;j++) { tmp[rec[(i-1)*ap+j]]++; } for(int j=1;j<=tot;j++) { int num=base[j]; if(cnt[num]/(n/ap)*i!=tmp[num])return false; } } return true; } int main() { int t; scanf("%d", &t); while(t--) { memset(cnt, 0, sizeof(cnt)); memset(tmp, 0, sizeof(tmp)); scanf("%d", &n); for(int i=1;i<=n;i++) { int x; scanf("%d", &x); cnt[x]++; rec[i]=x; } int tim=0; tot=0; for(int i=1;i<=n;i++) { if(cnt[i]){base[++tot]=i;tim=gcd(tim, cnt[i]);} } //printf("%d\n", tim); int anstot=0; //ans[++anstot]=n; for(int i=1;i*i<=tim;i++) { if(tim%i==0) { for(int j=1;j<=tot;j++)tmp[base[j]]=0; if(judge(n/i)){ ans[++anstot]=n/i; } for(int j=1;j<=tot;j++)tmp[base[j]]=0; if(judge(n/(tim/i))){ ans[++anstot]=n/(tim/i); } } } sort(ans+1, ans+1+anstot); int ans2tot=0; for(int i=1;i<=anstot;i++) if(ans[i]!=ans[i-1])ans2[++ans2tot]=ans[i]; for(int i=1;i<=ans2tot;i++)printf("%d%c", ans2[i], i==ans2tot?'\n':' '); } }