示例1
输入
2 2
1 2
2 1
输出
0
4
示例2
输入
5 1
3 2 5 1 4
输出
332748129
代码:
#include <cstdio>
#define ll long long
const int N=1e5+10,mod=998244353;
ll ksm(ll a,ll b){ll r=1;while(b){if(b&1)r=r*a%mod;a=a*a%mod,b>>=1;}return r;};
ll n,m,f[N],a[N];bool vis[N];
int main(){
f[2]=4;
for(int i=3;i<N;i++)f[i]=(f[i-1]+1)%mod*1ll*i%mod*ksm(i-1,mod-2)%mod;
scanf("%lld%lld",&n,&m);
while(m--){
for(int i=1;i<=n;i++)scanf("%lld",a+i),vis[i]=0;
ll ans=0;
for(int i=1;i<=n;i++)if(!vis[i]){
vis[i]=1;
ll res=a[i],cnt=1;
while(res^i) vis[res]=1,res=a[res],++cnt;
ans=(ans+f[cnt])%mod;
}printf("%lld\n",ans);
}
}