#include #include #include using namespace std; int par(int x,vector& p) { if(x == p[x])return x; else return p[x] = par(p[x],p); } long long gcd(long long a,long long b) { if(b)return gcd(b,a%b); else return a; } long long pow(long long a,long long b) { if(b)return pow(a*a%998244353,b/2)*(b&1?a:1)%998244353; else return 1; } int main() { int N,M,t; cin >> N >> M; vector p(N); for(int i=0;i> t; vector s(t); for(int j=0;j> s[j]; int tt = p[s[t-1]-1]; for(int j=t-1;j>0;j--)p[s[j]-1] = p[s[j-1]-1]; p[s[0]-1] = tt; } vector pa(N),c(N,0); for(int i=0;i f(1000010,0); for(int i=2;i<1000010;i++)if(!f[i]) { f[i] = i; for(long long j=i;i*j<1000010;j++)f[i*j] = i; } long long ans = 1; map m; for(int i=0;i mm; while(c[i] > 1) { mm[f[c[i]]]++; c[i] /= f[c[i]]; } for(auto j : mm)m[j.first] = max(m[j.first],j.second); } for(auto j : m)ans = ans*pow(j.first,j.second)%998244353; cout << ans << endl; }