V20260723
// #define MultiTasks
#define StaticMod 998244353
#define FFASTIO
// #define FileIO "___"
#include<bits/stdc++.h>
using namespace std;
namespace LK{
typedef long long ll;
typedef unsigned long long ull;
typedef long double flt;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define push emplace
#define pub emplace_back
#define puf emplace_front
#define pob pop_back
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define repl(i,x,y) for(int i=(x);i<(y);++i)
#define MSET(f,v) memset(f,v,sizeof f)
#define MCPY(t,f) memcpy(t,f,sizeof t)
#define def(x,...) auto x=[&](this auto x,##__VA_ARGS__)
#define sto static
#define il inline
constexpr int inf=0x3f3f3f3f;
constexpr ll INF=0x3f3f3f3f3f3f3f3f;
#ifdef StaticMod
constexpr int mod=StaticMod;
#else
int mod=998244353;
#endif
il ull qpow(ll a,ll b,ull p=mod){
if(b<0)return qpow(qpow(a,-b,p),p-2);
ull res=1;(a%=p)<0&&(a+=p);
for(;b;b>>=1){if(b&1)(res*=a)%=p;(a*=a)%=p;}
return res;
}
struct mint{
int x;
mint(ll o=0){(x=o%mod)<0&&(x+=mod);}
mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
mint & operator*=(mint o){return x=(ull)x*o.x%mod,*this;}
mint & operator/=(mint o){return *this*=qpow(o.x,mod-2);}
mint & operator^=(ll o){return x=qpow(x,o),*this;}
mint & operator++(){return *this+=1;}
mint & operator--(){return *this-=1;}
mint operator++(int o){mint res=*this;return *this+=1,res;}
mint operator--(int o){mint res=*this;return *this-=1,res;}
friend mint operator-(mint a){return 0-a;}
friend mint operator+(mint a,mint b){return a+=b;}
friend mint operator-(mint a,mint b){return a-=b;}
friend mint operator*(mint a,mint b){return a*=b;}
friend mint operator/(mint a,mint b){return a/=b;}
friend mint operator^(mint a,ll b){return a^=b;}
friend bool operator<(mint a,mint b){return a.x<b.x;}
friend bool operator>(mint a,mint b){return a.x>b.x;}
friend bool operator==(mint a,mint b){return a.x==b.x;}
friend istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
namespace FASTIO{
#ifdef FFASTIO
constexpr auto maxn=1<<20;
char in[maxn],out[maxn],*p1=in,*p2=in,*p3=out;
#define getc() (p1==p2&&(p2=(p1=in)+fread(in,1,maxn,stdin),p1==p2)?EOF:*p1++)
#define flush() (fwrite(out,1,p3-out,stdout))
#define putc(x) (p3==out+maxn&&(flush(),p3=out),*p3++=(x))
class Flush{public:~Flush(){flush();}}_;
#else
#ifdef _WIN32
#define getc() _getchar_nolock()
#define putc(x) _putchar_nolock(x)
#else
#define getc() getchar_unlocked()
#define putc(x) putchar_unlocked(x)
#endif
#define endl() putc('\n'),fflush(stdout)
#endif
short Stack[50],top(0);
namespace PUBLIC{
template<typename type> il void read(type &x){
x=0;bool flag(0);char ch=getc();
while(!isdigit(ch))flag^=ch=='-',ch=getc();
while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getc();
flag&&(x=-x);
}
template<typename type> il void print(type x){
x<0?x=-x,putc('-'):0;
do Stack[++top]=x%10,x/=10;while(x);
while(top)putc(Stack[top--]|48);
}
il void read(char &x){do x=getc();while(isspace(x));}
il void print(const char &x){putc(x);}
il void read(string &x){sto char ch;read(ch),x.clear();do x+=ch;while(!isspace(ch=getc())&&~ch);}
il void print(const string &x){for(int i=0,len=x.length();i<len;++i)putc(x[i]);}
template<typename type> il void print(type *x){while(*x)putc(*(x++));}
il void read(mint &x){sto ll v;read(v);x=v;}
il void print(const mint &x){print(x.x);}
template<typename type,typename...T> il void read(type &x,T&...y){read(x),read(y...);}
template<typename type,typename...T> il void print(const type &x,const T&...y){print(x),print(y...);}
template<typename type> il void println(const type &x){print(x),putc('\n');}
template<typename type,typename...T> il void println(const type &x,const T&...y){print(x),putc(' '),println(y...);}
template<typename type> il void put(const type &x,bool flag=1){print(x),flag?putc('\n'):putc(' ');}
}
#ifdef FFASTIO
#undef flush
#endif
}using namespace FASTIO::PUBLIC;
il void IOINIT(){
#ifdef FileIO
freopen(FileIO".in","r",stdin),freopen(FileIO".out","w",stdout);
#endif
#ifndef FFASTIO
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cout<<fixed<<setprecision(12);
#endif
}
void INIT(){}
void MAIN(){
}}using namespace LK::FASTIO::PUBLIC;
signed main(){
LK::IOINIT(),LK::INIT();
#ifdef MultiTasks
int t;read(t);while(t--)
#endif
LK::MAIN();return 0;
}
V20260623
// #define MultiTasks
#define StaticMod 998244353
#define FFASTIO
// #define FileIO "___"
#include<bits/stdc++.h>
using namespace std;
namespace LK{
typedef long long ll;
typedef unsigned long long ull;
typedef long double flt;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define push emplace
#define pub emplace_back
#define puf emplace_front
#define pob pop_back
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define repl(i,x,y) for(int i=(x);i<(y);++i)
#define MSET(f,v) memset(f,v,sizeof f)
#define MCPY(t,f) memcpy(t,f,sizeof t)
#define def(x,...) auto x=[&](this auto x,##__VA_ARGS__)
#define sto static
#define il inline
constexpr int inf=0x3f3f3f3f;
constexpr ll INF=0x3f3f3f3f3f3f3f3f;
#ifdef StaticMod
constexpr int mod=StaticMod;
#else
int mod=998244353;
#endif
struct FMOD{
ull b,m;
FMOD(ull mod=1){init(mod);}
void init(ull mod){b=mod,m=ull((i128(1)<<63)/mod);}
ull red(ull a){ull q=(ull)((i128(m)*a)>>63),r=a-q*b;return r>=b?r-b:r;}
ull mod(ll a){if(a>=0)return red(a);a=red(-a);return a?b-a:a;}
}DFTMOD(mod);
il void SETMOD(ull m=mod){DFTMOD.init(m);}
il ull RED(ull x){return DFTMOD.red(x);}
il ull MOD(ull x){return DFTMOD.mod(x);}
il ull qpow(ll a,ll b,ull p=mod){
if(b<0)return qpow(qpow(a,-b,p),p-2);
sto ull res;sto FMOD f;res=1,f.init(p),a=f.mod(a);
while(b){if(b&1)res*=a,res=f.red(res);a*=a,a=f.red(a);b>>=1;}
return res;
}
struct mint{
int x;
mint(ll o=0){x=MOD(o);}
mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
mint & operator*=(mint o){return x=RED((ull)x*o.x),*this;}
mint & operator/=(mint o){return *this*=qpow(o.x,mod-2);}
mint & operator^=(ll o){return x=qpow(x,o),*this;}
mint & operator++(){return *this+=1;}
mint & operator--(){return *this-=1;}
mint operator++(int o){mint res=*this;return *this+=1,res;}
mint operator--(int o){mint res=*this;return *this-=1,res;}
friend mint operator-(mint a){return 0-a;}
friend mint operator+(mint a,mint b){return a+=b;}
friend mint operator-(mint a,mint b){return a-=b;}
friend mint operator*(mint a,mint b){return a*=b;}
friend mint operator/(mint a,mint b){return a/=b;}
friend mint operator^(mint a,ll b){return a^=b;}
friend bool operator<(mint a,mint b){return a.x<b.x;}
friend bool operator>(mint a,mint b){return a.x>b.x;}
friend bool operator==(mint a,mint b){return a.x==b.x;}
friend istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
namespace FASTIO{
#ifdef FFASTIO
constexpr auto maxn=1<<20;
char in[maxn],out[maxn],*p1=in,*p2=in,*p3=out;
#define getc() (p1==p2&&(p2=(p1=in)+fread(in,1,maxn,stdin),p1==p2)?EOF:*p1++)
#define flush() (fwrite(out,1,p3-out,stdout))
#define putc(x) (p3==out+maxn&&(flush(),p3=out),*p3++=(x))
class Flush{public:~Flush(){flush();}}_;
#else
#ifdef _WIN32
#define getc() _getchar_nolock()
#define putc(x) _putchar_nolock(x)
#else
#define getc() getchar_unlocked()
#define putc(x) putchar_unlocked(x)
#endif
#define endl() putc('\n'),fflush(stdout)
#endif
short Stack[50],top(0);
namespace PUBLIC{
template<typename type> il void read(type &x){
x=0;bool flag(0);char ch=getc();
while(!isdigit(ch))flag^=ch=='-',ch=getc();
while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getc();
flag&&(x=-x);
}
template<typename type> il void print(type x){
x<0?x=-x,putc('-'):0;
do Stack[++top]=x%10,x/=10;while(x);
while(top)putc(Stack[top--]|48);
}
il void read(char &x){do x=getc();while(isspace(x));}
il void print(const char &x){putc(x);}
il void read(string &x){sto char ch;read(ch),x.clear();do x+=ch;while(!isspace(ch=getc())&&~ch);}
il void print(const string &x){for(int i=0,len=x.length();i<len;++i)putc(x[i]);}
template<typename type> il void print(type *x){while(*x)putc(*(x++));}
il void read(mint &x){sto ll v;read(v);x=v;}
il void print(const mint &x){print(x.x);}
template<typename type,typename...T> il void read(type &x,T&...y){read(x),read(y...);}
template<typename type,typename...T> il void print(const type &x,const T&...y){print(x),print(y...);}
template<typename type> il void println(const type &x){print(x),putc('\n');}
template<typename type,typename...T> il void println(const type &x,const T&...y){print(x),putc(' '),println(y...);}
template<typename type> il void put(const type &x,bool flag=1){print(x),flag?putc('\n'):putc(' ');}
}
#ifdef FFASTIO
#undef flush
#endif
}using namespace FASTIO::PUBLIC;
il void IOINIT(){
#ifdef FileIO
freopen(FileIO".in","r",stdin),freopen(FileIO".out","w",stdout);
#endif
#ifndef FFASTIO
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cout<<fixed<<setprecision(12);
#endif
}
void INIT(){}
void MAIN(){
}}using namespace LK::FASTIO::PUBLIC;
signed main(){
LK::IOINIT(),LK::INIT();
#ifdef MultiTasks
int t;read(t);while(t--)
#endif
LK::MAIN();return 0;
}
V20260616
// #define MultiTasks
#define StaticMod 998244353
#define FFASTIO
// #define FileIO "___"
#include<bits/stdc++.h>
using namespace std;
namespace LK{
typedef long long ll;
typedef unsigned long long ull;
typedef long double flt;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define push emplace
#define pub emplace_back
#define puf emplace_front
#define pob pop_back
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define repl(i,x,y) for(int i=(x);i<(y);++i)
#define MSET(f,v) memset(f,v,sizeof f)
#define MCPY(t,f) memcpy(t,f,sizeof t)
#define def(x,...) auto x=[&](this auto x,##__VA_ARGS__)
#define sto static
#define il inline
constexpr int inf=0x3f3f3f3f;
constexpr ll INF=0x3f3f3f3f3f3f3f3f;
#ifdef StaticMod
constexpr int mod=StaticMod;
#else
int mod=998244353;
#endif
struct FMOD{
ull b,m;
FMOD(ull mod=1){init(mod);}
void init(ull mod){b=mod,m=ull((i128(1)<<63)/mod);}
ull red(ull a){ull q=(ull)((i128(m)*a)>>63),r=a-q*b;return r>=b?r-b:r;}
ull mod(ll a){if(a>=0)return red(a);a=red(-a);return a?b-a:a;}
}DFTMOD(mod);
il void SETMOD(ull m=mod){DFTMOD.init(m);}
il ull RED(ull x){return DFTMOD.red(x);}
il ull MOD(ull x){return DFTMOD.mod(x);}
il ull qpow(ll a,ll b,ull p=mod){
if(b<0)return qpow(qpow(a,-b,p),p-2);
sto ull res;sto FMOD f;res=1,f.init(p),a=f.mod(a);
while(b){if(b&1)res*=a,res=f.red(res);a*=a,a=f.red(a);b>>=1;}
return res;
}
struct mint{
int x;
mint(ll o=0){x=MOD(o);}
mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
mint & operator*=(mint o){return x=RED((ull)x*o.x),*this;}
mint & operator/=(mint o){return *this*=qpow(o.x,mod-2);}
mint & operator^=(ll o){return x=qpow(x,o),*this;}
mint & operator++(){return *this+=1;}
mint & operator--(){return *this-=1;}
mint operator++(int o){mint res=*this;return *this+=1,res;}
mint operator--(int o){mint res=*this;return *this-=1,res;}
friend mint operator-(mint a){return 0-a;}
friend mint operator+(mint a,mint b){return a+=b;}
friend mint operator-(mint a,mint b){return a-=b;}
friend mint operator*(mint a,mint b){return a*=b;}
friend mint operator/(mint a,mint b){return a/=b;}
friend mint operator^(mint a,ll b){return a^=b;}
friend bool operator<(mint a,mint b){return a.x<b.x;}
friend bool operator>(mint a,mint b){return a.x>b.x;}
friend bool operator==(mint a,mint b){return a.x==b.x;}
friend istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
namespace FASTIO{
#ifdef FFASTIO
constexpr auto maxn=1<<20;
char in[maxn],out[maxn],*p1=in,*p2=in,*p3=out;
#define getc() (p1==p2&&(p2=(p1=in)+fread(in,1,maxn,stdin),p1==p2)?EOF:*p1++)
#define flush() (fwrite(out,1,p3-out,stdout))
#define putc(x) (p3==out+maxn&&(flush(),p3=out),*p3++=(x))
class Flush{public:~Flush(){flush();}}_;
#else
#ifdef _WIN32
#define getc() _getchar_nolock()
#define putc(x) _putchar_nolock(x)
#else
#define getc() getchar_unlocked()
#define putc(x) putchar_unlocked(x)
#endif
#define endl() putc('\n'),fflush(stdout)
#endif
FMOD mod10(10);
short Stack[50],top(0);
namespace PUBLIC{
template<typename type> il void read(type &x){
x=0;bool flag(0);char ch=getc();
while(!isdigit(ch))flag^=ch=='-',ch=getc();
while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getc();
flag&&(x=-x);
}
template<typename type> il void print(type x){
x<0?x=-x,putc('-'):0;
do Stack[++top]=mod10.red(x),x/=10;while(x);
while(top)putc(Stack[top--]|48);
}
il void read(char &x){do x=getc();while(isspace(x));}
il void print(const char &x){putc(x);}
il void read(string &x){sto char ch;read(ch),x.clear();do x+=ch;while(!isspace(ch=getc())&&~ch);}
il void print(const string &x){for(int i=0,len=x.length();i<len;++i)putc(x[i]);}
template<typename type> il void print(type *x){while(*x)putc(*(x++));}
il void read(mint &x){sto ll v;read(v);x=v;}
il void print(const mint &x){print(x.x);}
template<typename type,typename...T> il void read(type &x,T&...y){read(x),read(y...);}
template<typename type,typename...T> il void print(const type &x,const T&...y){print(x),putc(' '),print(y...),sizeof...(y)^1?0:putc('\n');}
template<typename type> il void put(const type &x,bool flag=1){print(x),flag?putc('\n'):putc(' ');}
}
#ifdef FFASTIO
#undef flush
#endif
}using namespace FASTIO::PUBLIC;
il void IOINIT(){
#ifdef FileIO
freopen(FileIO".in","r",stdin),freopen(FileIO".out","w",stdout);
#endif
#ifndef FFASTIO
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cout<<fixed<<setprecision(12);
#endif
}
void INIT(){}
void MAIN(){
}}using namespace LK::FASTIO::PUBLIC;
signed main(){
LK::IOINIT(),LK::INIT();
#ifdef MultiTasks
int t;read(t);while(t--)
#endif
LK::MAIN();return 0;
}
V20260521
// #define MultiTasks
#define StaticMod 998244353
#define FFASTIO
// #define FileIO "___"
#include<bits/stdc++.h>
using namespace std;
namespace LK{
typedef long long ll;
typedef unsigned long long ull;
typedef long double flt;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define push emplace
#define pub emplace_back
#define puf emplace_front
#define pob pop_back
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define repl(i,x,y) for(int i=(x);i<(y);++i)
#define MSET(f,v) memset(f,v,sizeof f)
#define MCPY(t,f) memcpy(t,f,sizeof t)
#define def(x,...) auto x=[&](this auto x,##__VA_ARGS__)
#define sto static
#define il inline
constexpr int inf=0x3f3f3f3f;
constexpr ll INF=0x3f3f3f3f3f3f3f3f;
#ifdef StaticMod
constexpr int mod=StaticMod;
#else
int mod=998244353;
#endif
struct FMOD{
ull b,m;
FMOD(ull mod=1){init(mod);}
void init(ull mod){b=mod,m=ull((i128(1)<<63)/mod);}
ull red(ull a){ull q=(ull)((i128(m)*a)>>63),r=a-q*b;return r>=b?r-b:r;}
ull mod(ll a){if(a>=0)return red(a);a=red(-a);return a?b-a:a;}
}DFTMOD(mod);
il void SETMOD(ull m=mod){DFTMOD.init(m);}
il ull RED(ull x){return DFTMOD.red(x);}
il ull MOD(ull x){return DFTMOD.mod(x);}
il ull qpow(ll a,ll b,ull p=mod){
if(b<0)return qpow(qpow(a,-b,p),p-2);
sto ull res;sto FMOD f;res=1,f.init(p),a=f.mod(a);
while(b){if(b&1)res*=a,res=f.red(res);a*=a,a=f.red(a);b>>=1;}
return res;
}
struct mint{
int x;
mint(ll o=0){x=MOD(o);}
mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
mint & operator*=(mint o){return x=RED((ull)x*o.x),*this;}
mint & operator/=(mint o){return *this*=qpow(o.x,mod-2);}
mint & operator^=(ll o){return x=qpow(x,o),*this;}
mint & operator++(){return *this+=1;}
mint & operator--(){return *this-=1;}
mint operator++(int o){mint res=*this;return *this+=1,res;}
mint operator--(int o){mint res=*this;return *this-=1,res;}
friend mint operator-(mint a){return 0-a;}
friend mint operator+(mint a,mint b){return a+=b;}
friend mint operator-(mint a,mint b){return a-=b;}
friend mint operator*(mint a,mint b){return a*=b;}
friend mint operator/(mint a,mint b){return a/=b;}
friend mint operator^(mint a,ll b){return a^=b;}
friend bool operator<(mint a,mint b){return a.x<b.x;}
friend bool operator>(mint a,mint b){return a.x>b.x;}
friend bool operator<=(mint a,mint b){return a.x<=b.x;}
friend bool operator>=(mint a,mint b){return a.x>=b.x;}
friend bool operator==(mint a,mint b){return a.x==b.x;}
friend istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
namespace FASTIO{
#ifdef FFASTIO
constexpr auto maxn=1<<20;
char in[maxn],out[maxn],*p1=in,*p2=in,*p3=out;
#define getc() (p1==p2&&(p2=(p1=in)+fread(in,1,maxn,stdin),p1==p2)?EOF:*p1++)
#define flush() (fwrite(out,1,p3-out,stdout))
#define putc(x) (p3==out+maxn&&(flush(),p3=out),*p3++=(x))
class Flush{public:~Flush(){flush();}}_;
#else
#ifdef _WIN32
#define getc() _getchar_nolock()
#define putc(x) _putchar_nolock(x)
#else
#define getc() getchar_unlocked()
#define putc(x) putchar_unlocked(x)
#endif
#define endl() putc('\n'),fflush(stdout)
#endif
FMOD mod10(10);
constexpr int dig=12;
const ull DIG=pow((flt)10,dig);
short Stack[50],top(0);
namespace PUBLIC{
template<typename type> il void read(type &x){
x=0;bool flag(0);char ch=getc();
while(!isdigit(ch))flag^=ch=='-',ch=getc();
while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getc();
flag&&(x=-x);
}
template<typename type> il void print(type x){
x<0?x=-x,putc('-'):0;
do Stack[++top]=mod10.red(x),x/=10;while(x);
while(top)putc(Stack[top--]|48);
}
il void read(flt &x){
x=0;ull z(0);bool flag(0);char ch=getc();
while(!isdigit(ch))flag^=ch=='-',ch=getc();
while(isdigit(ch))z=(z<<1)+(z<<3)+(ch^48),ch=getc();
if(ch=='.'){
ull r(0),w(1);ch=getc();
while(isdigit(ch))r=(r<<1)+(r<<3)+(ch^48),ch=getc(),w=(w<<1)+(w<<3);
x=z+(flt)r/w;
}else x=z;
flag&&(x=-x);
}
il void print(flt x){
x<0?x=-x,putc('-'):0;
print((ull)x),x=fmod(x,1.0);putc('.');ull r=x*=DIG;
rep(i,1,dig)Stack[i]=mod10.red(r),r/=10;per(i,dig,1)putc(Stack[i]|48);
}
il void hprint(flt x){
x<0?x=-x,putc('-'):0;
ull z=x;x=fmod(x,1.0);ull r=x*=DIG;if(mod10.red(x*10)>=5)(++r)==DIG&&(++z,r=0);
print(z);rep(i,1,dig)Stack[i]=mod10.red(r),r/=10;putc('.');per(i,dig,1)putc(Stack[i]|48);
}
il void read(char &x){do x=getc();while(isspace(x));}
il void print(const char &x){putc(x);}
il void read(string &x){sto char ch;read(ch),x.clear();do x+=ch;while(!isspace(ch=getc())&&~ch);}
il void print(const string &x){for(int i=0,len=x.length();i<len;++i)putc(x[i]);}
template<typename type> il void print(type *x){while(*x)putc(*(x++));}
il void read(mint &x){sto ll v;read(v);x=v;}
il void print(const mint &x){print(x.x);}
template<typename type,typename...T> il void read(type &x,T&...y){read(x),read(y...);}
template<typename type,typename...T> il void print(const type &x,const T&...y){print(x),putc(' '),print(y...),sizeof...(y)^1?0:putc('\n');}
template<typename type> il void put(const type &x,bool flag=1){print(x),flag?putc('\n'):putc(' ');}
}
#ifdef FFASTIO
#undef flush
#endif
}using namespace FASTIO::PUBLIC;
void INIT(){}
void MAIN(){
}}
signed main(){
#ifdef FileIO
freopen(FileIO".in","r",stdin),freopen(FileIO".out","w",stdout);
#endif
LK::INIT();
#ifdef MultiTasks
int t;LK::read(t);while(t--)
#endif
LK::MAIN();
return 0;
}
V20260501
#include<bits/stdc++.h>
using namespace std;
namespace LK{
typedef long long ll;
typedef unsigned long long ull;
typedef long double flt;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define push emplace
#define pub emplace_back
#define puf emplace_front
#define pob pop_back
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define repl(i,x,y) for(int i=(x);i<(y);++i)
#define MSET(f,v) memset(f,v,sizeof f)
#define MCPY(t,f) memcpy(t,f,sizeof t)
#define ReadFile(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
#define def(x,...) auto x=[&](this auto x,##__VA_ARGS__)
#define sto static
#define il inline
constexpr int inf=0x3f3f3f3f;
constexpr ll INF=0x3f3f3f3f3f3f3f3f;
constexpr int mod=998244353;
namespace FASTMOD{
struct FMOD{
ull b,m;
FMOD(ull mod=1){init(mod);}
void init(ull mod){b=mod,m=ull((i128(1)<<63)/mod);}
ull red(ull a){ull q=(ull)((i128(m)*a)>>63),r=a-q*b;return r>=b?r-b:r;}
ull mod(ll a){if(a>=0)return red(a);a=red(-a);return a?b-a:a;}
}dft(mod);
#define FMODINIT FASTMOD::dft.init
#define RED FASTMOD::dft.red
#define MOD FASTMOD::dft.mod
}using FASTMOD::FMOD;
il ull qpow(ll a,ll b,ull p=mod){
if(b<0)return qpow(qpow(a,-b,p),p-2);
sto ull res;sto FMOD f;res=1,f.init(p),a=f.mod(a);
while(b){if(b&1)res*=a,res=f.red(res);a*=a,a=f.red(a);b>>=1;}
return res;
}
struct mint{
int x;
mint(ll o=0){x=MOD(o);}
mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
mint & operator*=(mint o){return x=RED((ull)x*o.x),*this;}
mint & operator/=(mint o){return *this*=qpow(o.x,mod-2);}
mint & operator^=(ll o){return x=qpow(x,o),*this;}
mint & operator++(){return *this+=1;}
mint & operator--(){return *this-=1;}
mint operator++(int o){mint res=*this;return *this+=1,res;}
mint operator--(int o){mint res=*this;return *this-=1,res;}
friend mint operator-(mint a){return 0-a;}
friend mint operator+(mint a,mint b){return a+=b;}
friend mint operator-(mint a,mint b){return a-=b;}
friend mint operator*(mint a,mint b){return a*=b;}
friend mint operator/(mint a,mint b){return a/=b;}
friend mint operator^(mint a,ll b){return a^=b;}
friend bool operator<(mint a,mint b){return a.x<b.x;}
friend bool operator>(mint a,mint b){return a.x>b.x;}
friend bool operator<=(mint a,mint b){return a.x<=b.x;}
friend bool operator>=(mint a,mint b){return a.x>=b.x;}
friend bool operator==(mint a,mint b){return a.x==b.x;}
friend istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
#define FFASTIO
namespace FASTIO{
#ifdef FFASTIO
constexpr auto maxn=1<<20;
char in[maxn],out[maxn],*p1=in,*p2=in,*p3=out;
#define getc() (p1==p2&&(p2=(p1=in)+fread(in,1,maxn,stdin),p1==p2)?EOF:*p1++)
#define flush() (fwrite(out,1,p3-out,stdout))
#define putc(x) (p3==out+maxn&&(flush(),p3=out),*p3++=(x))
class Flush{public:~Flush(){flush();}}_;
#else
#ifdef _WIN32
#define getc() _getchar_nolock()
#define putc(x) _putchar_nolock(x)
#else
#define getc() getchar_unlocked()
#define putc(x) putchar_unlocked(x)
#endif
#define endl() putc('\n'),fflush(stdout)
#endif
FMOD mod10(10);
constexpr int dig=12;
const ull DIG=pow((flt)10,dig);
short Stack[50],top(0);
namespace PUBLIC{
template<typename type>
il void read(type &x){
x=0;bool flag(0);char ch=getc();
while(!isdigit(ch))flag^=ch=='-',ch=getc();
while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getc();
flag&&(x=-x);
}
template<typename type>
il void print(type x){
x<0?x=-x,putc('-'):0;
do Stack[++top]=mod10.red(x),x/=10;while(x);
while(top)putc(Stack[top--]|48);
}
il void read(flt &x){
x=0;ull z(0);bool flag(0);char ch=getc();
while(!isdigit(ch))flag^=ch=='-',ch=getc();
while(isdigit(ch))z=(z<<1)+(z<<3)+(ch^48),ch=getc();
if(ch=='.'){
ull r(0),w(1);ch=getc();
while(isdigit(ch))r=(r<<1)+(r<<3)+(ch^48),ch=getc(),w=(w<<1)+(w<<3);
x=z+(flt)r/w;
}else x=z;
flag&&(x=-x);
}
il void print(flt x){
x<0?x=-x,putc('-'):0;
print((ull)x),x=fmod(x,1.0);putc('.');ull r=x*=DIG;
rep(i,1,dig)Stack[i]=mod10.red(r),r/=10;per(i,dig,1)putc(Stack[i]|48);
}
il void hprint(flt x){
x<0?x=-x,putc('-'):0;
ull z=x;x=fmod(x,1.0);ull r=x*=DIG;if(mod10.red(x*10)>=5)(++r)==DIG&&(++z,r=0);
print(z);rep(i,1,dig)Stack[i]=mod10.red(r),r/=10;putc('.');per(i,dig,1)putc(Stack[i]|48);
}
il void read(char &x){do x=getc();while(isspace(x));}
il void print(const char &x){putc(x);}
il void read(string &x){sto char ch;read(ch),x.clear();do x+=ch;while(!isspace(ch=getc())&&~ch);}
il void print(const string &x){for(int i=0,len=x.length();i<len;++i)putc(x[i]);}
template<typename type> il void print(type *x){while(*x)putc(*(x++));}
il void read(mint &x){sto ll v;read(v);x=v;}
il void print(const mint &x){print(x.x);}
template<typename type,typename...T> il void read(type &x,T&...y){read(x),read(y...);}
template<typename type,typename...T> il void print(const type &x,const T&...y){print(x),putc(' '),print(y...),sizeof...(y)^1?0:putc('\n');}
template<typename type> il void put(const type &x,bool flag=1){print(x),flag?putc('\n'):putc(' ');}
}
#ifdef FFASTIO
#undef flush
#endif
}using namespace FASTIO::PUBLIC;
void INIT(){}
void MAIN(){
// #define MultiTasks
}}
signed main(){
// ReadFile(___);
LK::INIT();
#ifdef MultiTasks
int t;LK::read(t);while(t--)
#endif
LK::MAIN();
return 0;
}
V20260418
#include<bits/stdc++.h>
using namespace std;
namespace LK{
typedef long long ll;
typedef unsigned long long ull;
typedef long double flt;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define push emplace
#define pub emplace_back
#define puf emplace_front
#define pob pop_back
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define repl(i,x,y) for(int i=(x);i<(y);++i)
#define MSET(f,v) memset(f,v,sizeof f)
#define MCPY(t,f) memcpy(t,f,sizeof t)
#define ReadFile(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
#define def(x,...) auto x=[&](this auto x,##__VA_ARGS__)
#define put(x) cout<<(x)<<'\n'
#define sto static
#define il inline
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
namespace FASTMOD{
struct FMOD{
ull b,m;
FMOD(ull mod=1){init(mod);}
void init(ull mod){b=mod,m=ull((i128(1)<<64)/mod);}
ull red(ull a){ull q=(ull)((i128(m)*a)>>64),r=a-q*b;return r>=b?r-b:r;}
ull mod(ll a){if(a>=0)return red(a);a=red(-a);return a?b-a:a;}
}dft(mod);
il void INIT(ull mod){dft.init(mod);}
il ull RED(ull a){return dft.red(a);}
il ull MOD(ll a){return dft.mod(a);}
}using FASTMOD::FMOD,FASTMOD::RED,FASTMOD::MOD;
il ull qpow(ll a,ll b,ull p=mod){
if(b<0)return qpow(qpow(a,-b,p),p-2);
sto ull res;sto FMOD f;res=1,f.init(p),a=f.mod(a);
while(b){if(b&1)res*=a,res=f.red(res);a*=a,a=f.red(a);b>>=1;}
return res;
}
struct mint{
int x;
mint(ll o=0){x=MOD(o);}
mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
mint & operator*=(mint o){return x=RED((ull)x*o.x),*this;}
mint & operator/=(mint o){return *this*=qpow(o.x,mod-2);}
mint & operator^=(ll o){return x=qpow(x,o),*this;}
mint & operator++(){return *this+=1;}
mint & operator--(){return *this-=1;}
mint operator++(int o){mint res=*this;return *this+=1,res;}
mint operator--(int o){mint res=*this;return *this-=1,res;}
friend mint operator-(mint a){return 0-a;}
friend mint operator+(mint a,mint b){return a+=b;}
friend mint operator-(mint a,mint b){return a-=b;}
friend mint operator*(mint a,mint b){return a*=b;}
friend mint operator/(mint a,mint b){return a/=b;}
friend mint operator^(mint a,ll b){return a^=b;}
friend bool operator<(mint a,mint b){return a.x<b.x;}
friend bool operator>(mint a,mint b){return a.x>b.x;}
friend bool operator<=(mint a,mint b){return a.x<=b.x;}
friend bool operator>=(mint a,mint b){return a.x>=b.x;}
friend bool operator==(mint a,mint b){return a.x==b.x;}
friend istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
void INIT(){}
void MAIN(){
// #define MultiTasks
}}
signed main(){
// ReadFile(___);
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cout<<fixed<<setprecision(16);
LK::INIT();
#ifdef MultiTasks
int t;cin>>t;while(t--)
#endif
LK::MAIN();
return 0;
}
V20260314
#include<bits/stdc++.h>
using namespace std;
namespace LK{
typedef long long ll;
typedef unsigned long long ull;
typedef long double flt;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define repl(i,x,y) for(int i=(x);i<(y);++i)
#define ReadFile(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
#define def(x,...) auto x=[&](this auto x,##__VA_ARGS__)
#define put(x) cout<<(x)<<'\n'
#define sto static
#define il inline
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
il ll qpow(ll a,ll b,ll p=mod){if(b<0)return qpow(qpow(a,-b,p),p-2);ll res=1;a%=p;while(b){if(b&1)res*=a,res%=p;a*=a,a%=p;b>>=1;}return res;}
struct mint{
int x;
il mint(ll o=0){x=o%mod,(x+=mod)>=mod&&(x-=mod);}
il mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
il mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
il mint & operator*=(mint o){return x=(ull)x*o.x%mod,*this;}
il mint & operator/=(mint o){return *this*=qpow(o.x,mod-2);}
il mint & operator^=(ll o){return x=qpow(x,o),*this;}
il mint & operator++(){return *this+=1;}
il mint & operator--(){return *this-=1;}
il mint operator++(int o){mint res=*this;return *this+=1,res;}
il mint operator--(int o){mint res=*this;return *this-=1,res;}
friend il mint operator-(mint a){return 0-a;}
friend il mint operator+(mint a,mint b){return a+=b;}
friend il mint operator-(mint a,mint b){return a-=b;}
friend il mint operator*(mint a,mint b){return a*=b;}
friend il mint operator/(mint a,mint b){return a/=b;}
friend il mint operator^(mint a,ll b){return a^=b;}
friend il bool operator<(mint a,mint b){return a.x<b.x;}
friend il bool operator>(mint a,mint b){return a.x>b.x;}
friend il bool operator<=(mint a,mint b){return a.x<=b.x;}
friend il bool operator>=(mint a,mint b){return a.x>=b.x;}
friend il bool operator==(mint a,mint b){return a.x==b.x;}
friend il istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend il ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
void INIT(){}
void MAIN(){
// #define MultiTasks
}}
signed main(){
// ReadFile(___);
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cout<<fixed<<setprecision(16);
LK::INIT();
#ifdef MultiTasks
int t;cin>>t;while(t--)
#endif
LK::MAIN();
return 0;
}
V20260211
#include<bits/stdc++.h>
using namespace std;
namespace LK{
typedef long long ll;
typedef unsigned long long ull;
typedef long double flt;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(register int i=(x);i<=(y);++i)
#define per(i,x,y) for(register int i=(x);i>=(y);--i)
#define repl(i,x,y) for(register int i=(x);i<(y);++i)
#define ReadFile(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
#define def(x,...) auto x=[&](auto&&self,##__VA_ARGS__)
#define run(x,...) x(x,##__VA_ARGS__)
#define put(x) cout<<(x)<<'\n'
#define sto static
#define il inline
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
il ll qpow(ll a,ll b,ll p=mod){if(b<0)return qpow(qpow(a,-b,p),p-2);ll res=1;a%=p;while(b){if(b&1)res*=a,res%=p;a*=a,a%=p;b>>=1;}return res;}
struct mint{
int x;
il mint(ll o=0){x=o%mod,(x+=mod)>=mod&&(x-=mod);}
il mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
il mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
il mint & operator*=(mint o){return x=(ull)x*o.x%mod,*this;}
il mint & operator/=(mint o){return *this*=qpow(o.x,mod-2);}
il mint & operator^=(ll o){return x=qpow(x,o),*this;}
il mint & operator++(){return *this+=1;}
il mint & operator--(){return *this-=1;}
il mint operator++(int o){mint res=*this;return *this+=1,res;}
il mint operator--(int o){mint res=*this;return *this-=1,res;}
friend il mint operator-(mint a){return 0-a;}
friend il mint operator+(mint a,mint b){return a+=b;}
friend il mint operator-(mint a,mint b){return a-=b;}
friend il mint operator*(mint a,mint b){return a*=b;}
friend il mint operator/(mint a,mint b){return a/=b;}
friend il mint operator^(mint a,ll b){return a^=b;}
friend il bool operator<(mint a,mint b){return a.x<b.x;}
friend il bool operator>(mint a,mint b){return a.x>b.x;}
friend il bool operator<=(mint a,mint b){return a.x<=b.x;}
friend il bool operator>=(mint a,mint b){return a.x>=b.x;}
friend il bool operator==(mint a,mint b){return a.x==b.x;}
friend il istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend il ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
void INIT(){}
void MAIN(){}}
signed main(){
// ReadFile(___);
// #define MultiTasks
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cout<<fixed<<setprecision(16);
LK::INIT();
#ifdef MultiTasks
int t;cin>>t;while(t--)
#endif
LK::MAIN();
return 0;
}
V20250802
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double flt;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(register int i=(x);i<=(y);++i)
#define per(i,x,y) for(register int i=(x);i>=(y);--i)
#define repl(i,x,y) for(register int i=(x);i<(y);++i)
#define ReadFile(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
#define put(x) cout<<(x)<<'\n'
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int mod=998244353;
struct mint{
int x;
inline mint(ll o=0){x=o%mod,(x+=mod)>=mod&&(x-=mod);}
inline mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
inline mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
inline mint & operator*=(mint o){return x=(ll)x*o.x%mod,*this;}
inline mint & operator^=(ll b){mint res(1);for(;b;b>>=1,*this*=*this)if(b&1)res*=*this;return x=res.x,*this;}
inline mint & operator^=(mint o){return *this^=o.x;}
inline mint & operator/=(mint o){return *this*=(o^=(mod-2));}
inline mint & operator++(){return *this+=1;}
inline mint & operator--(){return *this-=1;}
inline mint operator++(int o){mint res=*this;return *this+=1,res;}
inline mint operator--(int o){mint res=*this;return *this-=1,res;}
friend inline mint operator-(mint a){return 0-a;}
friend inline mint operator+(mint a,mint b){return a+=b;}
friend inline mint operator-(mint a,mint b){return a-=b;}
friend inline mint operator*(mint a,mint b){return a*=b;}
friend inline mint operator/(mint a,mint b){return a/=b;}
friend inline mint operator^(mint a,ll b){return a^=b;}
friend inline mint operator^(mint a,mint b){return a^=b;}
friend inline bool operator<(mint a,mint b){return a.x<b.x;}
friend inline bool operator>(mint a,mint b){return a.x>b.x;}
friend inline bool operator<=(mint a,mint b){return a.x<=b.x;}
friend inline bool operator>=(mint a,mint b){return a.x>=b.x;}
friend inline bool operator==(mint a,mint b){return a.x==b.x;}
friend inline istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend inline ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
inline ll qpow(ll a,ll b,ll p=mod){ll res=1;while(b){if(b&1)res*=a,res%=p;a*=a,a%=p;b>>=1;}return res;}
inline void Main(){
}
signed main(){
// ReadFile(___);
// #define MultiTasks
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cout<<fixed<<setprecision(16);
#ifdef MultiTasks
int t;cin>>t;while(t--)
#endif
Main();
return 0;
}
V20250622
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename Type> using vec=vector<Type>;
template<typename Type> using grheap=priority_queue<Type>;
template<typename Type> using lrheap=priority_queue<Type,vector<Type>,greater<Type>>;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define repl(i,x,y) for(int i=(x);i<(y);++i)
#define ReadFile(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
struct mint{
int x,mod;
inline mint(int o=0,int p=998244353){mod=p;x=o%mod,(x+=mod)>=mod&&(x-=mod);}
inline mint & operator=(ll o){return x=o%mod,(x+=mod)>=mod&&(x-=mod),*this;}
inline mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
inline mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
inline mint & operator*=(mint o){return x=(ll)x*o.x%mod,*this;}
inline mint & operator^=(ll b){mint res(1,mod);for(;b;b>>=1,*this*=*this)if(b&1)res*=*this;return x=res.x,*this;}
inline mint & operator^=(mint o){return *this^=o.x;}
inline mint & operator/=(mint o){return *this*=(o^=(mod-2));}
inline mint & operator++(){return *this+=1;}
inline mint & operator--(){return *this-=1;}
inline mint operator++(int o){mint res=*this;return *this+=1,res;}
inline mint operator--(int o){mint res=*this;return *this-=1,res;}
friend inline mint operator+(mint a,mint b){return a+=b;}
friend inline mint operator-(mint a,mint b){return a-=b;}
friend inline mint operator*(mint a,mint b){return a*=b;}
friend inline mint operator/(mint a,mint b){return a/=b;}
friend inline mint operator^(mint a,ll b){return a^=b;}
friend inline mint operator^(mint a,mint b){return a^=b;}
friend inline bool operator<(mint a,mint b){return a.x<b.x;}
friend inline bool operator>(mint a,mint b){return a.x>b.x;}
friend inline bool operator<=(mint a,mint b){return a.x<=b.x;}
friend inline bool operator>=(mint a,mint b){return a.x>=b.x;}
friend inline bool operator==(mint a,mint b){return a.x==b.x;}
friend inline istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend inline ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
typedef double flt;
template<typename Type> inline void read(Type &x){x=0;Type f=1,s=1;char ch=getchar();while(!isdigit(ch)&&~ch){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch))x=x*10+ch-48,ch=getchar();if(ch=='.'){ch=getchar();while(isdigit(ch))s/=10,x=x+(ch-48)*s,ch=getchar();}x*=f;}
template<typename Type> inline void write(Type x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+'0');}
inline void read(string &s){s.clear();char ch=getchar();while(isspace(ch))ch=getchar();while(!isspace(ch)&&~ch)s+=ch,ch=getchar();}
inline void read(char &ch){ch=getchar();while(isspace(ch))ch=getchar();}
inline void write(const string &s){for(auto c:s)putchar(c);}
inline void write(const char &ch){putchar(ch);}
inline void write(const flt &x){printf("%.18LF",(long double)x);}
inline void write(const mint &m){write(m.x);}
inline void write(const char *x){while(*x)putchar(*(x++));}
template<typename Type,typename...T> inline void read(Type &x,T&...y){read(x),read(y...);}
template<typename Type> inline void put(const Type &x,char ch='\n'){write(x);if(ch)putchar(ch);}
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
inline void Main(){
}
int main(){
// ReadFile(___);
// #define MultiTasks
#ifdef MultiTasks
int t;read(t);while(t--)
#endif
Main();
return 0;
}
V20250621
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename T> using vec=vector<T>;
template<typename T> using grheap=priority_queue<T>;
template<typename T> using lrheap=priority_queue<T,vector<T>,greater<T>>;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);++i)
#define per(i,x,y) for(int i=(x);i>=(y);--i)
#define repl(i,x,y) for(int i=(x);i<(y);++i)
#define ReadFile(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
template<typename T=ll> inline T read(){T x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+ch-48,ch=getchar();return x*f;}
template<typename T> inline void read(T &x){x=0;int f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+ch-48,ch=getchar();x*=f;}
template<typename T> inline void write(T x,char ch=0){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+'0');if(ch)putchar(ch);}
template<typename T=ld> inline T readf(){T x=0,f=1,s=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();if(ch=='.'){ch=getchar();while(ch>='0'&&ch<='9')s/=10,x=x+(ch-48)*s,ch=getchar();}return x*f;}
template<typename T> inline void readf(T &x){x=0;T f=1,s=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();if(ch=='.'){ch=getchar();while(ch>='0'&&ch<='9')s/=10,x=x+(ch-48)*s,ch=getchar();}x*=f;}
template<typename T> inline void writef(T x,char ch=0){printf("%.18LF",(long double)x);if(ch)putchar(ch);}
inline char readc(){char ch=getchar();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();return ch;}
inline void readc(char &ch){ch=getchar();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();}
inline void writec(char c,char ch=0){putchar(c);if(ch)putchar(ch);}
inline string reads(){string s;char ch=getchar();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();while(ch!=' '&&ch!='\n'&&ch!='\r'&&~ch)s+=ch,ch=getchar();return s;}
inline void reads(string &s){s.clear();char ch=getchar();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();while(ch!=' '&&ch!='\n'&&ch!='\r'&&~ch)s+=ch,ch=getchar();}
inline void writes(string s,char ch=0){for(auto c:s)putchar(c);if(ch)putchar(ch);}
struct mint {
int x,mod;
inline mint(int o=0,int p=998244353) {x=o;mod=p;}
inline mint & operator=(ll o){return x=o%mod,(x+=mod)>=mod&&(x-=mod),*this;}
inline mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
inline mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
inline mint & operator*=(mint o){return x=(ll)x*o.x%mod,*this;}
inline mint & operator^=(ll b){mint res(1);for(;b;b>>=1,*this*=*this)if(b&1)res*=*this;return x=res.x,*this;}
inline mint & operator^=(mint o){return *this^=o.x;}
inline mint & operator/=(mint o){return *this*=(o^=(mod-2));}
inline mint & operator++(){return *this+=1;}
inline mint & operator--(){return *this-=1;}
inline mint operator++(int o){mint res=*this;return *this+=1,res;}
inline mint operator--(int o){mint res=*this;return *this-=1,res;}
friend inline mint operator+(mint a,mint b){return a+=b;}
friend inline mint operator-(mint a,mint b){return a-=b;}
friend inline mint operator*(mint a,mint b){return a*=b;}
friend inline mint operator/(mint a,mint b){return a/=b;}
friend inline mint operator^(mint a,ll b){return a^=b;}
friend inline mint operator^(mint a,mint b){return a^=b;}
friend inline bool operator<(mint a,mint b){return a.x<b.x;}
friend inline bool operator>(mint a,mint b){return a.x>b.x;}
friend inline bool operator<=(mint a,mint b){return a.x<=b.x;}
friend inline bool operator>=(mint a,mint b){return a.x>=b.x;}
friend inline bool operator==(mint a,mint b){return a.x==b.x;}
friend inline istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend inline ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
inline void Main(){
}
int main(){
// ReadFile(___);
// #define MultiTasks
#ifdef MultiTasks
int t=read();
while(t--)
#endif
Main();
return 0;
}
V20250518
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template<typename T> using vec=vector<T>;
template<typename T> using grheap=priority_queue<T>;
template<typename T> using lrheap=priority_queue<T,vector<T>,greater<T>>;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);i++)
#define per(i,x,y) for(int i=(x);i>=(y);i--)
#define repl(i,x,y) for(int i=(x);i<(y);i++)
#define file(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
template<typename T=ll> inline T read(){T x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+ch-48,ch=getchar();return x*f;}
template<typename T> inline void read(T &x){x=0;int f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+ch-48,ch=getchar();x*=f;}
template<typename T> inline void write(T x,char ch=0){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10+'0');if(ch)putchar(ch);}
template<typename T=ld> inline T readf(){T x=0,f=1,s=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();if(ch=='.'){ch=getchar();while(ch>='0'&&ch<='9')s/=10,x=x+(ch-48)*s,ch=getchar();}return x*f;}
template<typename T> inline void readf(T &x){x=0;T f=1,s=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();if(ch=='.'){ch=getchar();while(ch>='0'&&ch<='9')s/=10,x=x+(ch-48)*s,ch=getchar();}x*=f;}
template<typename T> inline void writef(T x,char ch=0){printf("%.18LF",(long double)x);if(ch)putchar(ch);}
inline char readc(){char ch=getchar();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();return ch;}
inline void readc(char &ch){ch=getchar();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();}
inline void writec(char c,char ch=0){putchar(c);if(ch)putchar(ch);}
inline string reads(){string s;char ch=getchar();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();while(ch!=' '&&ch!='\n'&&ch!='\r'&&~ch)s+=ch,ch=getchar();return s;}
inline void reads(string &s){s.clear();char ch=getchar();while(ch==' '||ch=='\n'||ch=='\r')ch=getchar();while(ch!=' '&&ch!='\n'&&ch!='\r'&&~ch)s+=ch,ch=getchar();}
inline void writes(string s,char ch=0){for(auto c:s)putchar(c);if(ch)putchar(ch);}
struct mint {
int x,mod;
inline mint(int o=0,int p=998244353) {x=o;mod=p;}
inline mint & operator=(ll o){return x=o%mod,(x+=mod)>=mod&&(x-=mod),*this;}
inline mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
inline mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
inline mint & operator*=(mint o){return x=(ll)x*o.x%mod,*this;}
inline mint & operator^=(ll b){mint res(1);for(;b;b>>=1,*this*=*this)if(b&1)res*=*this;return x=res.x,*this;}
inline mint & operator^=(mint o){return *this^=o.x;}
inline mint & operator/=(mint o){return *this*=(o^=(mod-2));}
inline mint & operator++(){return *this+=1;}
inline mint & operator--(){return *this-=1;}
inline mint operator++(int o){mint res=*this;return *this+=1,res;}
inline mint operator--(int o){mint res=*this;return *this-=1,res;}
friend inline mint operator+(mint a,mint b){return a+=b;}
friend inline mint operator-(mint a,mint b){return a-=b;}
friend inline mint operator*(mint a,mint b){return a*=b;}
friend inline mint operator/(mint a,mint b){return a/=b;}
friend inline mint operator^(mint a,ll b){return a^=b;}
friend inline mint operator^(mint a,mint b){return a^=b;}
friend inline bool operator<(mint a,mint b){return a.x<b.x;}
friend inline bool operator>(mint a,mint b){return a.x>b.x;}
friend inline bool operator<=(mint a,mint b){return a.x<=b.x;}
friend inline bool operator>=(mint a,mint b){return a.x>=b.x;}
friend inline bool operator==(mint a,mint b){return a.x==b.x;}
friend inline istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend inline ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
int main(){
file(xxx);
return 0;
}
V20250415
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
typedef double db;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template <typename Type>
using vec=vector<Type>;
template <typename Type>
using grheap=priority_queue<Type>;
template <typename Type>
using lrheap=priority_queue<Type,vector<Type>,greater<Type> >;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);i++)
#define per(i,x,y) for(int i=(x);i>=(y);i--)
#define repl(i,x,y) for(int i=(x);i<(y);i++)
#define file(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
struct mint {
int x,mod;
inline mint(int o=0,int p=998244353) {x=o;mod=p;}
inline mint & operator=(ll o){return x=o%mod,(x+=mod)>=mod&&(x-=mod),*this;}
inline mint & operator+=(mint o){return (x+=o.x)>=mod&&(x-=mod),*this;}
inline mint & operator-=(mint o){return (x-=o.x)<0&&(x+=mod),*this;}
inline mint & operator*=(mint o){return x=(ll)x*o.x%mod,*this;}
inline mint & operator^=(ll b){mint res(1);for(;b;b>>=1,*this*=*this)if(b&1)res*=*this;return x=res.x,*this;}
inline mint & operator^=(mint o){return *this^=o.x;}
inline mint & operator/=(mint o){return *this*=(o^=(mod-2));}
inline mint & operator++(){return *this+=1;}
inline mint & operator--(){return *this-=1;}
inline mint operator++(int o){mint res=*this;return *this+=1,res;}
inline mint operator--(int o){mint res=*this;return *this-=1,res;}
friend inline mint operator+(mint a,mint b){return a+=b;}
friend inline mint operator-(mint a,mint b){return a-=b;}
friend inline mint operator*(mint a,mint b){return a*=b;}
friend inline mint operator/(mint a,mint b){return a/=b;}
friend inline mint operator^(mint a,ll b){return a^=b;}
friend inline mint operator^(mint a,mint b){return a^=b;}
friend inline bool operator<(mint a,mint b){return a.x<b.x;}
friend inline bool operator>(mint a,mint b){return a.x>b.x;}
friend inline bool operator<=(mint a,mint b){return a.x<=b.x;}
friend inline bool operator>=(mint a,mint b){return a.x>=b.x;}
friend inline bool operator==(mint a,mint b){return a.x==b.x;}
friend inline istream & operator>>(istream &in,mint &o){ll x;return in>>x,o=x,in;}
friend inline ostream & operator<<(ostream &ot,mint o){return ot<<o.x,ot;}
};
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
int main(){
file(xxx);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
return 0;
}
V20250207
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
typedef double db;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template <typename Type>
using vec=vector<Type>;
template <typename Type>
using grheap=priority_queue<Type>;
template <typename Type>
using lrheap=priority_queue<Type,vector<Type>,greater<Type> >;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);i++)
#define per(i,x,y) for(int i=(x);i>=(y);i--)
#define repl(i,x,y) for(int i=(x);i<(y);i++)
#define file(f) freopen(#f".in","r",stdin);freopen(#f".out","w",stdout);
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+7/*998244353*/;
int main(){
file(xxx);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
return 0;
}
V20250108
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
typedef double db;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template <typename Type>
using vec=vector<Type>;
template <typename Type>
using grheap=priority_queue<Type>;
template <typename Type>
using lrheap=priority_queue<Type,vector<Type>,greater<Type> >;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=(x);i<=(y);i++)
#define repl(i,x,y) for(int i=(x);i<(y);i++)
#define per(i,x,y) for(int i=(x);i>=(y);i--)
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int mod=1e9+7/*998244353*/;
int main(){
freopen(".in","r",stdin);
freopen(".out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
return 0;
}
V20250101
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef __int128 i128;
typedef double db;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
typedef pair<int,ll> pil;
typedef pair<ll,int> pli;
template <typename Type>
using vec=vector<Type>;
template <typename Type>
using grheap=priority_queue<Type>;
template <typename Type>
using lrheap=priority_queue<Type,vector<Type>,greater<Type> >;
#define fir first
#define sec second
#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define chmax(a,b) a=max(a,b)
#define chmin(a,b) a=min(a,b)
#define rep(i,x,y) for(int i=x;i<=y;i++)
#define per(i,x,y) for(int i=x;i>=y;i--)
const int inf=0x3f3f3f3f;
const ll INF=0x3f3f3f3f3f3f3f3f;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
return 0;
}