/* *********************************************** Author :111qqz Created Time :2016年10月01日 星期六 18时58分00秒 File Name :code/bc/#88/1002.cpp ************************************************ */ #include #include #include #include #include #include #include #include #include #include #include #include #include #define fst first #define sec second #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define ms(a,x) memset(a,x,sizeof(a)) typedef long long LL; #define pi pair < int ,int > #define MP make_pair using namespace std; const double eps = 1E-8; const int dx4[4]={1,0,0,-1}; const int dy4[4]={0,-1,1,0}; const int inf = 0x3f3f3f3f; const int N=1E5+7; int n; vector factor; int cnt[N]; setse; bool vis[N]; int a[N]; setans; bool solve(int st,int en) { bool ret = true; for ( int i = st ; i <= en ; i++) { cnt[a[i]]--; if (cnt[a[i]]<0) ret = false; } for ( int i = st ; i <= en ; i++) cnt[a[i]]++; return ret; } int main() { #ifndef ONLINE_JUDGE freopen("code/in.txt","r",stdin); #endif int T; cin>>T; while (T--) { factor.clear(); se.clear(); ans.clear(); ms(vis,false); scanf("%d",&n); for ( int i = 1 ; i <= n ; i++) { scanf("%d",a+i); se.insert(a[i]); } for ( int i = 1 ; i*i<= n ; i++) { if (n%i==0) { factor.push_back(i); if (i!=n/i) factor.push_back(n/i); } } int fac_siz = factor.size(); int fst; for ( int i = 0 ; i < fac_siz ; i++) { if (factor[i]>=int(se.size())) { fst = i; break; } } for ( int i = fst ; i < fac_siz; i++) { int v = factor[i]; if (vis[v]) continue; bool ok = true; ms(cnt,0); for ( int j = 1 ; j <= v ; j++) cnt[a[j]]++; for ( int j = v+1 ; j+v-1 <= n ; j+=v) { if (!solve(j,j+v-1)) { ok = false; break; } } if (ok) { for ( int j = i ; j < fac_siz ; j++) { int u = factor[j]; if (u%v==0) { ans.insert(u); vis[u] = true; } } } } vector anss; anss.clear(); for ( auto it = ans.begin() ; it !=ans.end() ; it++) anss.push_back(*it); int siz = anss.size(); for ( int i = 0 ; i < siz-1; i++) printf("%d ",anss[i]); printf("%d\n",anss[siz-1]); } #ifndef ONLINE_JUDGE fclose(stdin); #endif return 0; }