#include<bits/stdc++.h>
const int MD=1e9+7;
const int M=1e6;
typedef long long ll;
using namespace std;
ll cnt;
vector<int>v[M];
int vis[M];
void dfs(int u)
{
vis[u]=1;
cnt++;
for(auto &p:v[u])
{
if(!vis[p])
dfs(p);
}
}
int main(){
int t;
cin>>t;
while(t--)
{
for(int i=0;i<=M;i++)
{
v[i].clear();
vis[i]=0;
}
ll ans=1;
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
v[i].push_back(x);
}
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
cnt=0;
dfs(i);
ans=(ans*cnt/__gcd(ans,cnt))%MD;
}
}
cout<<ans<<endl;
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KY29uc3QgaW50IE1EPTFlOSs3Owpjb25zdCBpbnQgTT0xZTY7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwpsbCBjbnQ7CnZlY3RvcjxpbnQ+dltNXTsKaW50IHZpc1tNXTsKdm9pZCBkZnMoaW50IHUpCnsKCXZpc1t1XT0xOwoJY250Kys7Cglmb3IoYXV0byAmcDp2W3VdKQoJewoJCWlmKCF2aXNbcF0pCgkJZGZzKHApOwoJfQp9CmludCBtYWluKCl7CglpbnQgdDsKCWNpbj4+dDsKCXdoaWxlKHQtLSkKCXsKCQlmb3IoaW50IGk9MDtpPD1NO2krKykKCQl7CgkJCXZbaV0uY2xlYXIoKTsKCQkJdmlzW2ldPTA7CgkJfQogICAgbGwgYW5zPTE7CiAgICBpbnQgbjsKICAgIGNpbj4+bjsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKQogICAgewogICAgCWludCB4OwogICAgCWNpbj4+eDsKICAgIAl2W2ldLnB1c2hfYmFjayh4KTsKICAgIH0KICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKQogICAgewogICAgCWlmKCF2aXNbaV0pCiAgICAJewogICAgCQljbnQ9MDsKICAgIAkJZGZzKGkpOwogICAgCQlhbnM9KGFucypjbnQvX19nY2QoYW5zLGNudCkpJU1EOwogICAgCX0KICAgIH0KICAgIGNvdXQ8PGFuczw8ZW5kbDsKCX0KCXJldHVybiAwOwp9