//看看会不会爆int! #include using namespace std; #define pb push_back #define mkp make_pair #define fi first #define se second #define FOR(i, l, r) for(int i = l; i <= r; i++) #define ROF(i, r, l) for(int i = r; i >= l; i--) #define all(a) a.begin(), a.end() inline int ckmax(int &a, int b) { return a < b ? a = b, 1 : 0; } inline int ckmin(int &a, int b) { return a > b ? a = b, 1 : 0; } #define clean(a) memset(a, 0, sizeof(a)) typedef long long ll; const int maxn = 100100; int T, n; int a[maxn]; vector g[maxn], b[maxn]; int main(){ n = 100000; for(int i = 1; i <= n; ++i) for(int j = i; j <= n; j += i) g[j].pb(i); scanf("%d", &T); while(T--){ scanf("%d", &n); for(int i = 1; i <= n; ++i) b[i].clear(); for(int i = 0; i < n; ++i){ scanf("%d", a + i); b[a[i]].pb(i); } vector f; for(int i = 1; i <= n; ++i) if(b[i].size()) f.pb(i); vector ans; for(int i = g[n].size() - 1; i >= 0; --i){ int v = g[n][i]; bool flag = 1; for(int j = f.size() - 1; j >= 0; --j) if(b[f[j]].size() % (n / v) != 0){ flag = 0; break; } if(!flag) continue; for(int j = f.size() - 1; j >= 0; --j){ int x = f[j], t = b[x].size() / (n / v), l = b[x].size(), now = 0; for(int k = 0; k < l; ++k){ now++; if(k == l - 1 || b[x][k] / v != b[x][k + 1] / v){ if(now != t) { flag = 0; break; } now = 0; } } if(!flag) break; } if(flag) ans.pb(v); } for(int i = ans.size() - 1; i >= 0; --i) printf("%d%c", ans[i], " \n"[i == 0]); } return 0; }