#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#define inf 1000000000]
#define p 9 //注意乘法压位过大
using namespace std;
void _scanf(int &x){
char ch=getchar();
bool f=0;
x=0;
while(!isdigit(ch)) {
if(ch=='-') f=1;
ch=getchar();
}
while(isdigit(ch)) x=10*x+ch-'0',ch=getchar();
if(f) x=-x;
}
void _scanf(int &a,int &b){
_scanf(a);
_scanf(b);
}
struct bign{
int z[25],len;
bign(){
memset(z,0,sizeof(z));
len=0;
}
bign (int x){
*this=x;
}
bign operator =(int x){
char s[25];
sprintf(s,"%d",x);
*this=s;
}
bign operator =(char *s){
int len=strlen(s);
int cur=0;
bign a;
char w[25];
while(len>0){
while(len>=p){
strcpy(w,s+len-p);
a.z[cur++]=atoi(w);
len-=p;
}
if(len>0){
strcpy(w,s);
w[len]='\0';
a.z[cur++]=atoi(w);
len=0;
}
}
a.len=cur;
*this=a;
}
friend bign operator +(bign a,bign b){
bign c;
int len=max(a.len,b.len)+1;
for(int i=0;i<=len-1;i++){
c.z[i]=a.z[i]+b.z[i];
}
for(int i=0;i<=len-1;i++)
c.z[i+1]+=c.z[i]/1000000000,c.z[i]%=1000000000;
while(c.z[len-1]==0&&len>1) len--;
c.len=len;
return c;
}
};
void bignout(bign a){
int len=a.len;
printf("%d",a.z[len-1]);
for(int i=len-2;i>=0;i--)
printf("%0*d",p,a.z[i]);
}