#include<bits/stdc++.h> using namespace std; const int N=100001; int a[N],b[N],c[N];
inline string zhuan(int x){//int转化string  string ant=""; while(x){
        ant=char(x%10+'0')+ant;
        x/=10;
    } return ant;
}
inline bool cmp(string x,string y){//比较两个高精string数的大小  int len=x.size(),ten=y.size(); if(len!=ten){ return len>ten;
    } for(int i=0;i<len;++i){ if(x[i]!=y[i]){ return x[i]>y[i];
        }
    } return true;
}//若x>=y返回true,否则为false  inline string jia1(string x,int y){//高精加低精 //初始化  memset(a,0,sizeof(a)); int len=x.size(); //储存 for(int i=0;i<len;++i){
        a[i]=x[len-i-1]-'0';
    } //操作  a[0]+=y; //进位  for(int i=0;i<len;++i){ if(a[i]>9){
            a[i+1]+=a[i]/10;
            a[i]%=10; if(i==len-1){
                len++;
            } continue;
        } break;
    } //输出  string ant=""; for(int i=len-1;i>=0;--i){
        ant+=char(a[i]+'0');
    } return ant;
}
inline string jia2(string x,string y){//高精加高精 //初始化  int len=x.size(),ten=y.size();
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c)); int k=max(len,ten); //储存  for(int i=0;i<len;++i){
        a[i]=x[len-i-1]-'0';
    } for(int i=0;i<ten;++i){
        b[i]=y[ten-i-1]-'0';
    } //操作  for(int i=0;i<k;++i){ 
        c[i]=a[i]+b[i];
    } //进位  for(int i=0;i<k;++i){ if(c[i]>9){
            c[i+1]++;
            c[i]-=10; if(i==k-1){
                k++;
            }
        }
    } //输出 string ant=""; for(int i=k-1;i>=0;--i){
        ant+=char(c[i]+'0');
    } return ant;
} //注意:此处的高精减法默认x>=y  inline string jian(string x,string y){//这是为高精除高精写的减法,正确的写法您需要特判x==y的情况 //初始化  memset(a,0,sizeof(a));
    memset(b,0,sizeof(b)); int len=x.size(),ten=y.size(); int k=max(len,ten); //储存  for(int i=0;i<len;++i){
        a[i]=(x[len-i-1]-'0');
    } for(int i=0;i<ten;++i){
        b[i]=(y[ten-i-1]-'0');
    } //操作  for(int i=0;i<k;++i){
        a[i]-=b[i];
    } //退位  for(int i=0;i<k;++i){ if(a[i]<0){
            a[i+1]--;
            a[i]+=10;
        }
    } //消除前导零  while(k&&!a[k-1]){
        k--;    
    } //输出  string ant=""; for(int i=k-1;i>=0;--i){
        ant+=char(a[i]+'0');
    } return ant;
}
inline string cheng1(string x,int y){//高精乘低精 //初始化  int len=x.size();
    memset(a,0,sizeof(a)); //储存  for(int i=0;i<len;++i){
        a[i]=x[len-i-1]-'0';
    } //操作  for(int i=0;i<len;++i){
        a[i]*=y;
    } //进位 for(int i=0;i<len;++i){ if(a[i]>9){
            a[i+1]+=a[i]/10;
            a[i]%=10; if(i==len-1){
                len++;
            }
        }
    } //消去前导零  while(len>1&&!a[len-1]){
        len--;
    } string ant=""; for(int i=len-1;i>=0;--i){
        ant+=char(a[i]+'0');
    } return ant;
}
inline string cheng2(string x,string y){//高精乘高精 //初始化  int len=x.size(),ten=y.size(); int k=len+ten-1;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c)); //储存  for(int i=0;i<len;++i){
        a[i]=(x[len-i-1]-'0');
    } for(int j=0;j<ten;++j){
        b[j]=(y[ten-j-1]-'0');
    } //操作  for(int i=0;i<len;++i){ for(int j=0;j<ten;++j){
            c[i+j]+=a[i]*b[j];
        }
    } //进位  for(int i=0;i<=k;++i){ if(c[i]>9){
            c[i+1]+=c[i]/10;
            c[i]%=10;
        }
    } //消去前导零  while(k&&!c[k]){
        k--;
    } //输出  string ant=""; for(int i=k;i>=0;--i){
        ant+=char(c[i]+'0');
    } return ant;
}
inline string chu1(string x,int y){//高精除低精 //初始化  int len=x.size(); int yu=0; bool flag=0;//是否有数字  string ans=""; //操作  for(int i=0;i<len;++i){
        yu=yu*10+(x[i]-'0'); if(flag){
            ans+=char(yu/y+'0');
            yu%=y; continue;
        } if(yu>=y){
            flag=1;
            ans+=char(yu/y+'0');
            yu%=y;
        }
    } //输出  return ans;
}
inline string chu2(string x,string y){//高精除高精 //比较  if(!cmp(x,y)){ return "0";
    } //初始化  int len=x.size(); string yu="",ans=""; bool flag=0; //操作  for(int i=0;i<len;++i){
        yu+=x[i];
     if(yu=="0"){
       yu="";
     } int tim=0; while(cmp(yu,y)){
            yu=jian(yu,y);
            tim++;
        }  if(flag){
            ans+=char(tim+'0'); continue;
        } if(tim){
            flag=1;
            ans+=char(tim+'0');
        }
    } //输出  return ans;
}
inline int mo1(string x,int y){//高精模低精 //初始化  int len=x.size(); int yu=0; //操作  for(int i=0;i<len;++i){
        yu=yu*10+(x[i]-'0');
        yu%=y; 
    } //输出  return yu;
}
inline string mo2(string x,string y){//高精模高精 //比较  if(!cmp(x,y)){ return x;
    } //初始化  int len=x.size(); string yu=""; //操作  for(int i=0;i<len;++i){
        yu+=x[i];
     if(yu=="0"){
      yu="";
      } while(cmp(yu,y)){
            yu=jian(yu,y);
        }
    } //输出  return yu;
} int main(){ //freopen("ask.in","r",stdin); //freopen("ask.out","w",stdout); return 0;
} /**
*  ┏┓   ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃       ┃
* ┃   ━   ┃ ++ + + +
*  ████━████+
*  ◥██◤ ◥██◤ +
* ┃   ┻   ┃
* ┃       ┃ + +
* ┗━┓   ┏━┛
*   ┃   ┃ + + + +Code is far away from  
*   ┃   ┃ + bug with the animal protecting
*   ┃    ┗━━━┓ 神兽保佑,代码无bug 
*   ┃        ┣┓
*    ┃        ┏┛
*     ┗┓┓┏━┳┓┏┛ + + + +
*    ┃┫┫ ┃┫┫
*    ┗┻┛ ┗┻┛+ + + + */