#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10002,M=1e9;
struct NUM{
    int t;
    ll a[N/9];
    friend void print(NUM x){
        if (!x.t){puts("0");return;}
        printf("%lld",x.a[--x.t]);
        int t[9];
        for (int i=x.t-1;i>=0;i--){
            memset(t,0,sizeof(t));
            for (int j=0;j<9;j++) t[j]=x.a[i]%10,x.a[i]/=10;
            for (int j=8;j>=0;j--) putchar(t[j]|48);
        }
        puts("");
    }
    friend bool operator>(NUM x,NUM y){
        if (x.t!=y.t) return x.t>y.t;
        for (int i=x.t-1;i>=0;i--)
            if (x.a[i]!=y.a[i]) return x.a[i]>y.a[i];
        return 0;
    }
    friend NUM operator+(NUM x,NUM y){
        int i;
        for (i=0;i<x.t || i<y.t || x.a[i];i++){
            if (i+1>=x.t) x.a[i+1]=0;
            if (i<y.t) x.a[i]+=y.a[i];
            if (x.a[i]>=M) x.a[i+1]++,x.a[i]-=M;
        }
        x.t=i;
        return x;
    }
    friend NUM operator-(NUM x,NUM y){
        if (y>x) swap(x,y);
        for (int i=0;i<y.t;i++){
            x.a[i]-=y.a[i];
            if (x.a[i]<0) x.a[i]+=M,x.a[i+1]--;
        }
        while (x.t && !x.a[x.t-1]) x.t--;
        return x;
    }
    friend NUM operator*(NUM x,NUM y){
        NUM z;z.t=x.t+y.t;
        memset(z.a,0,z.t<<3);
        for (int i=0;i<x.t;i++)
            for (int j=0;j<y.t;j++){
                z.a[i+j]+=x.a[i]*y.a[j];
                z.a[i+j+1]+=z.a[i+j]/M;
                z.a[i+j]%=M;
            }
        if (z.t && !z.a[z.t-1]) z.t--;
        return z;
    }
    friend NUM operator*(NUM x,int y){
        int i;
        for (i=0;i<x.t;i++) x.a[i]*=y;
        for (i=0;i<x.t || x.a[i];i++){
            if (i+1>=x.t) x.a[i+1]=0;
            x.a[i+1]+=x.a[i]/M,x.a[i]%=M;
        }
        x.t=i;
        return x;
    }
    friend NUM operator/(NUM x,int y){
        ll k=0;
        for (int i=x.t-1;i>=0;i--){
            k=k*M+x.a[i];
            x.a[i]=k/y;
            k%=y;
        }
        while (x.t && !x.a[x.t-1]) x.t--;
        return x;
    }
    friend NUM div(NUM x,NUM y,bool fl){
        NUM z;z.t=x.t-y.t+1;
        if (z.t<=0){
            z.t=0;
            return fl?z:x;
        }
        memset(z.a,0,z.t<<3);
        for (int i=z.t-1;i>=0;i--){
            for (int j=1<<29;j;j>>=1){
                NUM tmp=y*j;bool fl=tmp.t+i<=x.t;
                if (!fl) continue;
                if (tmp.t+i==x.t){
                    for (int k=tmp.t-1;k>=0;k--)
                        if (x.a[k+i]!=tmp.a[k]){
                            fl=tmp.a[k]<x.a[k+i];
                            break;
                        }
                    if (!fl) continue;
                }
                z.a[i]|=j;
                for (int k=0;k<tmp.t;k++){
                    x.a[k+i]-=tmp.a[k];
                    if (x.a[k+i]<0) x.a[k+i+1]--,x.a[k+i]+=M;
                }
                while (x.t && !x.a[x.t-1]) x.t--;
            }
        }
        while (z.t && !z.a[z.t-1]) z.t--;
        return fl?z:x;
    }
    friend NUM operator/(NUM x,NUM y){return div(x,y,1);}
    friend NUM operator%(NUM x,NUM y){return div(x,y,0);}
    friend NUM gcd(NUM x,NUM y){
        int cnt=0;NUM T;
        while (1){
            if (!x.t || !y.t){
                NUM p,z;
                p.a[0]=2;
                p.t=z.t=z.a[0]=1;
                for (;cnt;cnt>>=1,p=p*p)
                    if (cnt&1) z=z*p;
                if (x.t) return z*x;
                else return z*y;
            }
            bool f1=0,f2=0;
            if (!(x.a[0]&1)) x=x/2,f1=1;
            if (!(y.a[0]&1)) y=y/2,f2=1;
            if (f1 && f2) cnt++;
            if (x>y) x=x-y;
            else T=x,x=y-x,y=T;
        }
    }
}E;
NUM toNUM(char s[]){
    ll f[10];
    f[0]=1;
    for (int i=1;i<10;i++) f[i]=f[i-1]*10;
    NUM A;
    A.t=strlen(s);
    memset(A.a,0,(A.t-1)/9+1<<3);
    for (int i=A.t-1;i>=0;i--) A.a[(A.t-1-i)/9]+=f[(A.t-1-i)%9]*(s[i]^48);
    A.t=(A.t-1)/9+1;
    return A;
}
int main(){
	E.t=E.a[0]=1;
}