#include #include #include #include #include #include #include #include #include using namespace std; typedef long long LL; const int maxn = 1e5+100; int n, g; int a[maxn], b[maxn]; int cnt[maxn]; vector vec; set st; inline bool check(int x){ int siz = n/x, flag = 0; for(int i = siz; i+siz <= n; i += siz){ for(int j = 1; j <= siz; j++) cnt[a[j]]++; for(int j = 1; j <= siz;j++){ cnt[a[i+j]]--; if(cnt[a[i+j]] < 0){ flag = 1; cnt[a[i+j]] = 0; break; } } if(flag) break; } for(int i = 1; i <= siz; i++) cnt[a[i]] = 0; if(flag) return false; return true; } int main(){ int t; cin >> t; while(t--){ g = -1; vec.clear(); st.clear(); memset(b, 0, sizeof(b)); scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", &a[i]); b[a[i]]++; st.insert(a[i]); } if(st.size() == 1){ for(int i = 1; i <= n-1; i++){ if(n % i == 0) printf("%d ", i); } printf("%d\n", n); continue; } for(int i = 1; i < maxn; i++){ if(b[i]){ if(g == -1){ g = b[i]; }else{ g = __gcd(g, b[i]); } } } for(int i = 1; i <= g; i++){ if(g % i != 0) continue; if(check(i)) vec.push_back(n/i); } sort(vec.begin(), vec.end()); for(int i = 0; i < vec.size(); i++) printf("%d%c", vec[i], i+1==vec.size()?'\n':' '); } return 0; }