namespace Modint{
template<const unsigned int mod>class modint{
unsigned long long s;
public:
operator int(){return s;}
modint (int x){s=x;}
modint (){}
void operator =(const modint& x){
s=x.s;
return ;
}
modint operator +(const modint& x)const{
modint res;
if(s+x.s>=mod){res.s=s+x.s-mod;}
else{res.s=s+x.s;}
return res;
}
modint operator -(const modint& x)const{
modint res;
if(s<x.s){res.s=s+mod-x.s;}
else{res.s=s-x.s;}
return res;
}
modint operator *(const modint& x)const{
modint res;
res.s=s*x.s%mod;
return res;
}
modint operator /(const modint& x)const{
modint res;
res.s=x.inv().s*s%mod;
return res;
}
const modint pow(unsigned int y)const{
modint res=1;
modint x=s;
while(y){
if(y&1){
res=res*x;
}
x=x*x;
y=y>>1;
}
return res;
}
modint inv() const{
return pow(mod-2);
}
};
}