struct number
{
int a[N+10],cnt;
void read()
{
int ans=0;
char x=getchar();
while(x>'9'||x<'0')
x=getchar();
while(x>='0'&&x<='9')
{
a[++cnt]=x-'0';
x=getchar();
}
for(int i=1;i<=cnt/2;i++)
swap(a[i],a[cnt-i+1]);
}
void init(int x)
{
memset(a,0,sizeof(a));
cnt=0;
while(x)
{
a[++cnt]=x%10;
x/=10;
}
}
void pro (number x)
{
number c;
c.init(0);
for(int i=1;i<=x.cnt;i++)
for(int j=1;j<=cnt;j++)
c.a[i+j-1]+=a[j]*x.a[i];
for(int i=1;i<=N;i++)
c.a[i+1]+=c.a[i]/10,c.a[i]%=10;
c.cnt=N;
while(!c.a[c.cnt]&&c.cnt)
c.cnt--;
for(int i=1;i<=c.cnt;i++)
a[i]=c.a[i];
cnt=c.cnt;
}
void add(number x)
{
number c;
c.init(0);
for(int i=1;i<=N;i++)
c.a[i]=a[i]+x.a[i];
for(int i=1;i<=N;i++)
c.a[i+1]+=c.a[i]/10,c.a[i]%=10;
c.cnt=N;
while(!c.a[c.cnt]&&c.cnt)
c.cnt--;
for(int i=1;i<=c.cnt;i++)
a[i]=c.a[i];
cnt=c.cnt;
}
void sub(number x)
{
for(int i=1;i<=N;i++)
a[i]-=x.a[i];
for(int i=1;i<=N;i++)
if(a[i]<0)
{
a[i+1]+=abs(a[i])/10-1;
a[i]=a[i]%10+10;
}
cnt=N;
while(!a[cnt]&&cnt)
cnt--;
}
bool cmp(number x)
{
if(x.cnt>cnt)
return 0;
if(x.cnt<cnt)
return 1;
for(int i=cnt;i;i--)
{
if(a[i]>x.a[i])
return 1;
if(a[i]<x.a[i])
return 0;
}
return 1;
}
void div(number x)
{
number tmp,ans;
tmp.init(0);
ans.init(0);
int p=cnt,res=0;
while(p)
{
while(!tmp.cmp(x)&&p)
{
tmp.pro((number){{0,0,1},2});
tmp.add((number){{0,a[p]},1});
if(!a[p])
res++;
else
res=0;
p--;
}
ans.pro((number){{0,0,1},2});
while(tmp.cmp(x))
{
ans.add((number){{0,1},1});
tmp.sub(x);
}
}
while(res>1)
{
res--;
ans.pro((number){{0,0,1},2});
}
cnt=N;
while(!ans.a[cnt]&&cnt)
cnt--;
for(int i=1;i<=cnt;i++)
a[i]=ans.a[i];
}
void print()
{
if(!cnt)
putchar('0');
for(int i=cnt;i;i--)
putchar(a[i]+'0');
putchar('\n');
}
}sum,num;