#include #define syosu(x) fixed< P; typedef pair pdd; typedef pair pll; typedef vector vi; typedef vector vvi; typedef vector vd; typedef vector vvd; typedef vector vl; typedef vector vvl; typedef vector vs; typedef vector

vp; typedef vector vvp; typedef vector vpll; typedef pair pip; typedef vector vip; const int inf=1<<30; const ll INF=1ll<<60; const double pi=acos(-1); const double eps=1e-8; const ll mod=1e9+7; const int dx[4]={-1,0,1,0},dy[4]={0,-1,0,1}; const ll p=924844033,r=5; ll Pow(ll n,ll m){ ll res=1; while(m>0){ if(m&1) (res*=n)%=p; (n*=n)%=p; m>>=1; } return res; } ll Inv(ll x){return Pow(x,p-2);} void ntt(vl& a,bool B){ int n=a.size(),h=0; while(1<0){ k=(k-1)/2; date[k]=date[k*2+1]+date[k*2+2]; } } int Query(int a,int b){ return Rec(a,b,0,0,n); } int Open(int k){ return date[k+n-1]; } }; vi Sum(vi a,vi b){ int A=a.size(),B=b.size(),N=max(A,B),t=0; vi c(N+1); for(int i=0;i>n; a=vi(n); b=vvi(n); c=vvi(n-1); Segment_Tree st(n); for(int i=0;i>a[i]; for(int i=0;i1){ int N=b.size(),M=(N+1)/2; vvi d(M); for(int i=0;i