#pragma once
constexprunsignedintconstexpr_primitive_root(unsignedintmod){usingu32=unsignedint;usingu64=unsignedlonglong;if(mod==2)return1;u64m=mod-1,ds[32]={},idx=0;for(u64i=2;i*i<=m;++i){if(m%i==0){ds[idx++]=i;while(m%i==0)m/=i;}}if(m!=1)ds[idx++]=m;for(u32_pr=2,flg=true;;_pr++,flg=true){for(u32i=0;i<idx&&flg;++i){u64a=_pr,b=(mod-1)/ds[i],r=1;for(;b;a=a*a%mod,b>>=1)if(b&1)r=r*a%mod;if(r==1)flg=false;}if(flg==true)return_pr;}}