I Tried alot but couldn’t find in the bug in the code .Keeps giving WA,can anyone suggest some modifications in code or Test Cases that it fails .Thanks in Advance…
#include<bits/stdc++.h>
#define MOD 1000000007
#define gc getchar_unlocked
#define pc putchar_unlocked
#define FOR(i, j, k, in) for (int i=j ; i<=k ; i+=in)
#define RFOR(i, j, k, in) for (int i=j ; i>=k ; i-=in)
using namespace std;
// FAST I/O Generic function
template< class T > T _abs(T n) { return (n < 0 ? -n : n); }
template< class T > T _max(T a, T b) { return (!(a < b) ? a : b); }
template< class T > T _min(T a, T b) { return (a < b? a : b); }
template< class T > T sq(T x) { return x * x; }
template< class T > bool inside(T a, T b, T c) { return a<=b && b<=c; }
template <class T>
inline T read()
{
T n=0;
bool sign=0;
char p=gc();
if(p=='-')
sign=1;
while((p<'0'||p>'9')&&p!=EOF&&p!='-')
p=gc();
if(p=='-')
sign=1,p=gc();
while(p>='0'&&p<='9') {
n = (n<< 3) + (n<< 1) + (p - '0');
p=gc();
}
if(sign)
return -n;
return n;
}
inline void readStr(char *str)
{
register char c=0;
register int i = 0;
while (c < 33)
c = gc();
while (c > 65)
{
str[i] = c;
c = gc();
i = i + 1;
}
str[i] = '\0';
}
//Generic fast output function
template <class T> inline void write(T x)
{
int i = 20;
char buf[21];
buf[20] = '\n';
do
{
buf[--i] = x % 10 + '0';
x/= 10;
}while(x);
do
{
pc(buf[i]);
} while (buf[i++] != '\n');
}
typedef unsigned long long int ulld;
vector<int>isprime(100001,0);
vector<ulld> prime;
void inline sieve()
{
FOR(i,2,100000,1)
{
if(isprime[i]==0)
{
prime.push_back(i);
FOR(k,i,100001,i)
isprime[k]=1;
}
}
}
ulld mod_pow(ulld base , ulld exponent,ulld modulus)
{
ulld result=1;
while(exponent>0)
{
if(exponent&1)
{
result=(resultbase)%modulus;
}
exponent=exponent>>1;
base=(basebase)%modulus;
}
return result;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("input.txt","r",stdin);
// freopen("output.txt","w",stdout);
#endif
sieve();
int x,t=read<int>();
FOR(i,0,t-1,1)
{
int n=read<int>();
int A[n+1];
A[0]=1;///dummy
int visited[n+1];
vector<int>cycle(n+1,0);
FOR(j,1,n,1)
{
A[j]=read<int>();
visited[j]=0;
}
int c=1;
FOR(j,1,n,1)
{
int x=j;
if(visited[x]==0)
{
c=0;
while(visited[x]==0)
{
visited[x]=1;
++c;
x=A[x];
}
}
cycle[c]=1;
}
vector<ulld>power(100001,0);
FOR(j,0,cycle.size()-1,1)
{
if(cycle[j])
{ int k=0,n=j;
int limit=ceil(sqrt(j));
while(prime[k]<=limit)
{
int count=0;
while(n%prime[k]==0)
{
++count;
n/=prime[k];
}
power[prime[k]]=(power[prime[k]]>count)?(power[prime[k]]):count;
++k;
}
if(n==j)
power[j]=1;
}
}
ulld ans=1,temp;
FOR(j,0,prime.size()-1,1)
{
if(power[prime[j]])
{
temp=mod_pow(prime[j],power[prime[j]],MOD);
ans=(ans*temp)%MOD;
}
}
write<ulld>(ans);
}
return 0;
}