#include using namespace std; #define PB push_back #define ZERO (1e-10) #define INF (1<<29) #define CL(A,I) (memset(A,I,sizeof(A))) #define DEB printf("DEB!\n"); #define D(X) cout<<" "<<#X": "<B&&A-ZERO pll; typedef vector vi; typedef pair ii; typedef vector vii; #define IN(n) int n;scanf("%d",&n); #define FOR(i, m, n) for (int i(m); i < n; i++) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define FT(m, n) FOR(k, m, n) #define aa first #define bb second void ga(int N,int *A){F(N)scanf("%d",A+i);} struct big{ static const ll MM=999999999; ll l,a[1024]; big(int A=0):l(1){a[0]=A;} bool eq(int h){return l==1&&a[0]==h;} void operator=(int h){*a=h,l=1;} void operator+=(int a){add(a,0);} void operator+=(big &b){F(b.l)add(b.a[i],i);} void add(ll s,int nd){ if(nd==l)a[l++]=0; a[nd]+=s; if(a[nd]>MM)a[nd]-=MM+1,add(1,nd+1); } ll rem(int u,ll r,ll d){return ~u?rem(u-1,(a[u]+(MM+1)*r)%d,d):r;} ll operator%(ll d){return rem(l-1,0,d);} void operator++(){add(1,0);} void operator--(){ int L(0); while(!a[L])a[L++]=MM; --a[L]; } void div(int u,ll r,ll d){ if(!~u)return; ll h(a[u]+(MM+1)*r); div(u-1,h%d,d); a[u]=h/d; } void operator/=(ll d){ div(l-1,0,d); while(l>1&&!a[l-1])--l; } big(const big&r):l(r.l){F(l)a[i]=r.a[i];} void pow(int k){ if(!k){l=1;a[0]=1;return;} big n(*this),N(n);--k; while(k){ if(k&1)*this*=n; n*=N,k>>=1,N=n; } } void operator*=(big &b){ static ll A[1024]; ll L(l); l+=b.l-1; F(L)A[i]=a[i]; F(l)a[i]=0; F(b.l)FF(L) if((a[i+j]+=A[j]*b.a[i])>MM) add(a[i+j]/(MM+1),i+j+1),a[i+j]%=MM+1; } void operator*=(unsigned k){ F(l)a[i]*=k; for(int i(l-1);~i;--i) if(a[i]>MM)add(a[i]/(MM+1),i+1),a[i]%=MM+1; } void prt(void){ printf("%lld",a[l-1]); for(int i(l-2);~i;--i) printf("%09lld",a[i]); } int prt(char*c){ sprintf(c,"%lld",a[l-1]); int L(strlen(c)); for(int i(l-2);~i;--i) sprintf(c+L,"%09lld",a[i]),L+=9; return L; } bool operator<(int A)const{return l==1&&*a(int A)const{return l>1||*a>A;} bool operator<(const big&r)const{ if(r.l!=l)return l(const big&r)const{ if(r.l!=l)return l>r.l; F(l)if(a[l-i-1]!=r.a[l-i-1])return a[l-i-1]>r.a[l-i-1]; return 0; } bool operator==(const big&r)const{ if(r.l!=l)return 0; F(l)if(a[l-i-1]!=r.a[l-i-1])return 0; return 1; } void sub(ll s,int nd){ a[nd]-=s; if(!a[nd]&&l==nd)--l; else if(a[nd]<0)a[nd]+=MM+1,sub(1,nd+1); } void operator-=(big&r){ F(r.l)sub(r.a[i],i); while(l>1&&!a[l-1])--l; } void mm(big&b,int k,int m){ CL(a,0),l=b.l+m; ll c(0); F(b.l)c+=b.a[i]*k,a[i+m]=c%(MM+1),c/=(MM+1); while(c)a[l++]=c%(MM+1),c/=(MM+1); } void operator/=(big&b){ big t,x(*this); if(x>=1){ t.mm(b,k,i); if(!(xMM)add(a[i]/(MM+1),i+1),a[i]%=(MM+1); } while(l>1&&!a[l-1])--l; } void st(int u,char *c,int L){ a[u]=0;l=u+1; F(L)a[u]*=10,a[u]+=c[i]-'0'; } bool scan(void){ static char c[1024]; if(!~scanf("%s",c))return 0; return scan(c),1; } void scan(char*c){ int L(strlen(c)),I(0); while(L>0)st(I++,c+L-(L>=9?9:L),(L>=9?9:L)),L-=9; } big operator%(big&b){ big t,x(*this); for(int i(l-b.l);~i;--i)for(int k(1<<29);k;k>>=1){ t.mm(b,k,i); if(!(x