#include<bits/stdc++.h>
#define ll long long
#define mxx 100000000//满此数进一(十的 压的位数 次方)
#define mxw 8//压的位数
#define www 2002//最大位数除以压的位数
using namespace std;
char c;
ll n[www],m[www],ans[www];
inline void rd(ll &x);//低读(快读)O(N)
inline void pt(ll x);//低写(快写)O(N)
inline void rrdd(ll rrd[www]);//压位高读 O(N)
inline void pptt(ll ppt[www]);//压位高写 O(N)
inline ll cmpb(ll cm[www],ll cp[www]);//压位高比(0为cm大,1为cp大,2为一样)O(1)~O(N)
inline void adda(ll ada[www],ll adb[www],ll x);//压位高加低(结果,高数,低数)O(N)
inline void addb(ll ads[www],ll adb[www],ll adc[www]);//压位高加高(结果,数1,数2)O(N)
inline void suba(ll su[www],ll sb[www],ll x);//压位高减低(结果,被减数,减数)O(1)~O(N)
inline void subb(ll sub[www],ll su[www],ll sb[www]);//压位高减高(结果,被减数,减数)O(N)
inline void mula(ll mu[www],ll ml[www],ll x);//压位高乘低(结果,高数,低数)O(N)
inline void mulb(ll mu[www],ll ml[www],ll mul[www]);//压位高乘高(结果,数1,数2)O(N^2)
inline void dela(ll de[www],ll &y,ll dl[www],ll x);//压位高除低(结果,余数,被除数,除数)O(N)
inline void delb(ll &dee,ll dll[www],ll de[www],ll dl[www]);//压位同位高除高(商,余数,被除数,除数)(de/dl<mxx)O(log(mxx)*N)
inline void delc(ll dee[www],ll dll[www],ll de[www],ll dl[www]);//压位非同位高除高(商,余数,被除数,除数)O(log(mxx)*N^2)
inline void rd(ll &x){
x=0;short f=1;char c=getchar();
while((c<'0'||c>'9')&&c!='-') c=getchar();
if(c=='-') c=getchar(),f=-1;
while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
x*=f;
}
inline void pt(ll x){
if(x<0) putchar('-'),x=-x;
if(x>9) pt(x/10);
putchar((x%10)+'0');
}
inline void rrdd(ll rrd[www]){
for(ll i=1;i<www;i++) rrd[i]=0;
rrd[0]=1;
ll t=0,rrrd[www*mxw]={};
short f=1;c=getchar();
if(c=='-') c=getchar(),f=-1;
while((c<'0'||c>'9')&&c!='-') c=getchar();
while(c>='0'&&c<='9') rrrd[++rrrd[0]]=c-'0',c=getchar();
rrd[0]=t=(rrrd[0]-1)/mxw+1;
for(ll i=1;i<=rrrd[0];i++){
rrd[t]=rrd[t]*10+rrrd[i];
if((rrrd[0]-i)%mxw==0) t--;
}
rrd[rrd[0]]*=f;
}
inline void pptt(ll ppt[www]){
while(!ppt[ppt[0]]&&ppt[0]) ppt[0]--;
if(!ppt[0]) ppt[0]=1;
pt(ppt[ppt[0]]);
for(ll i=ppt[0]-1;i>0;i--)
for(ll j=mxx/10;j;j/=10)
pt((ppt[i]/j)%10);
}
inline ll cmpb(ll cm[www],ll cp[www]){
while(!cm[cm[0]]&&cm[0]) cm[0]--;
while(!cp[cp[0]]&&cp[0]) cp[0]--;
if(!cm[0]) cm[0]=1;
if(!cp[0]) cp[0]=1;
if(cm[0]>cp[0]) return cm[cm[0]]<0;
if(cm[0]<cp[0]) return cp[cp[0]]>=0;
if(cm[cm[0]]<0&&cp[cp[0]]>=0) return 1;
if(cm[cm[0]]>=0&&cp[cp[0]]<0) return 0;
ll l=cm[0],r=cp[0];
while(l&&r&&cm[l]==cp[r]) l--,r--;
return l?(cm[l]<cp[r])^(cm[cm[0]]<0&&cp[cp[0]]<0):2;
}
inline void adda(ll ada[www],ll adb[www],ll x){
ll adc[www]={};
adc[0]=1,adc[1]=x;
addb(ada,adb,adc);
}
inline void addb(ll ads[www],ll adb[www],ll adc[www]){
while(!adb[adb[0]]&&adb[0]) adb[0]--;
while(!adc[adc[0]]&&adc[0]) adc[0]--;
if(!adb[0]) adb[0]=1;
if(!adc[0]) adc[0]=1;
short fb=1,fc=1;
if(adb[adb[0]]<0) fb=-1,adb[adb[0]]*=-1;
if(adc[adc[0]]<0) fc=-1,adc[adc[0]]*=-1;
if(fb==-1&&fc==1) subb(ads,adc,adb);
else if(fb==1&&fc==-1) subb(ads,adb,adc);
else{
ll ada[www];
for(ll i=0;i<www;i++)
ada[i]=adb[i];
ada[0]=max(ada[0],adc[0]);
ll t=0;
for(ll i=1;i<=ada[0];i++)
ada[i]+=adc[i]+t,t=ada[i]/mxx,ada[i]%=mxx;
if(t) ada[++ada[0]]=t;
for(ll i=0;i<www;i++)
ads[i]=ada[i];
ads[ads[0]]*=fb;
}
adb[adb[0]]*=fb;
adc[adc[0]]*=fc;
}
inline void suba(ll su[www],ll sb[www],ll x){
ll suu[www]={};
suu[0]=1,suu[1]=x;
subb(su,sb,suu);
}
inline void subb(ll sub[www],ll su[www],ll sb[www]){
while(!su[su[0]]&&su[0]) su[0]--;
while(!sb[sb[0]]&&sb[0]) sb[0]--;
if(!su[0]) su[0]=1;
if(!sb[0]) sb[0]=1;
short fu=1,fb=1;
if(su[su[0]]<0) fu=-1;
if(sb[sb[0]]<0) fb=-1;
if(fu==-1&&fb==1||fu==1&&fb==-1) sb[sb[0]]*=-1,addb(sub,su,sb),sb[sb[0]]*=-1;
else if(fu==-1&&fb==-1) su[su[0]]*=-1,sb[sb[0]]*=-1,subb(sub,sb,su),su[su[0]]*=-1,sb[sb[0]]*=-1;
else if(cmpb(su,sb)==1) subb(sub,sb,su),sub[sub[0]]*=-1;
else{
ll suu[www];
for(ll i=0;i<www;i++)
suu[i]=su[i];
for(ll i=1;i<=suu[0];i++)
suu[i]-=sb[i],suu[i+1]-=(suu[i]<0),suu[i]=(suu[i]+mxx)%mxx;
while(!suu[suu[0]]&&suu[0]) suu[0]--;
if(!suu[0]) suu[0]=1;
for(ll i=0;i<www;i++)
sub[i]=suu[i];
}
}
inline void mula(ll mu[www],ll ml[www],ll x){
while(!ml[ml[0]]&&ml[0]) ml[0]--;
if(!ml[0]) ml[0]=1;
short fl=1,fx=1;
if(ml[ml[0]]<0) fl=-1,ml[ml[0]]*=-1;
if(x<0) fx=-1,x=-x;
for(ll i=0;i<www;i++)
mu[i]=ml[i];
ll t=0;
for(ll i=1;i<=mu[0];i++)
mu[i]=mu[i]*x+t,t=mu[i]/mxx,mu[i]%=mxx;
if(t) mu[++mu[0]]=t,t=mu[mu[0]]/mxx,mu[mu[0]]%=mxx;
if(t) mu[++mu[0]]=t;
ml[ml[0]]*=fl;
x*=fx;
mu[mu[0]]*=fl*fx;
}
inline void mulb(ll mu[www],ll ml[www],ll mul[www]){
while(!ml[ml[0]]&&ml[0]) ml[0]--;
while(!mul[mul[0]]&&mul[0]) mul[0]--;
if(!ml[0]) ml[0]=1;
if(!mul[0]) mul[0]=1;
short fl=1,fu=1;
if(ml[ml[0]]<0) fl=-1,ml[ml[0]]*=-1;
if(mul[mul[0]]<0) fu=-1,mul[mul[0]]*=-1;
ll t=0,mmu[www]={},mmmu[www]={};
for(ll i=mul[0];i>0;i--)
mula(mmmu,mmmu,mxx),mula(mmu,ml,mul[i]),addb(mmmu,mmmu,mmu);
for(ll i=0;i<www;i++)
mu[i]=mmmu[i];
ml[ml[0]]*=fl;
mul[mul[0]]*=fu;
mu[mu[0]]*=fl*fu;
}
inline void dela(ll de[www],ll &y,ll dl[www],ll x){
while(!dl[dl[0]]&&dl[0]) dl[0]--;
if(!dl[0]) dl[0]=1;
for(ll i=0;i<www;i++)
de[i]=dl[i];
if(de[de[0]]<x)
de[de[0]-1]+=de[de[0]]*mxx,de[0]--;
ll t=0;
for(ll i=de[0];i>0;i--)
de[i]+=t*mxx,t=de[i]%x,de[i]/=x;
y=t;
}
inline void delb(ll &dee,ll dll[www],ll de[www],ll dl[www]){
while(!de[de[0]]&&de[0]) de[0]--;
while(!dl[dl[0]]&&dl[0]) dl[0]--;
if(!de[0]) de[0]=1;
if(!dl[0]) dl[0]=1;
ll cm=cmpb(de,dl);
if(cm==2){
for(ll i=0;i<www;i++)
dll[i]=0;
dll[0]=dee=1;
}else if(cm){
for(ll i=0;i<www;i++)
dll[i]=de[i];
dee=0;
}else{
ll len=(ll)ceil(log2(1.0*mxx)),ecf[len],del[www],dell[www];
ecf[0]=1;dee=0;
for(ll i=1;i<len;i++)
ecf[i]=ecf[i-1]<<1;
for(ll i=0;i<www;i++)
dell[i]=de[i];
for(ll i=len-1;i>=0;i--){
mula(del,dl,ecf[i]);
if(cmpb(del,dell))
subb(dell,dell,del),dee+=ecf[i];
}
for(ll i=0;i<www;i++)
dll[i]=dell[i];
}
}
inline void delc(ll dee[www],ll dll[www],ll de[www],ll dl[www]){
while(!de[de[0]]&&de[0]) de[0]--;
while(!dl[dl[0]]&&dl[0]) dl[0]--;
if(!de[0]) de[0]=1;
if(!dl[0]) dl[0]=1;
if(de[0]<=dl[0]){
ll w,del[www];
delb(w,del,de,dl);
for(ll i=0;i<www;i++)
dee[i]=0,dll[i]=del[i];
dee[0]=1;dee[1]=w;
return;
}
ll del[www]={dl[0]+1},dell[www]={de[0]-dl[0]+1};
for(ll i=1;i<dl[0];i++)
del[dl[0]-i]=de[de[0]-i+1];
for(ll i=dell[0],w;i;i--){
del[0]=dl[0]+1;
for(ll j=del[0];j>1;j--)
del[j]=del[j-1];
del[1]=de[i];
delb(w,del,del,dl);
dell[i]=w;
}
while(!dell[dell[0]]&&dell[0]) dell[0]--;
while(!del[del[0]]&&del[0]) del[0]--;
if(!dell[0]) dell[0]=1;
if(!del[0]) del[0]=1;
for(ll i=0;i<www;i++)
dee[i]=dell[i],dll[i]=del[i];
}
第5行的mxw能改成16吗?会有影响吗?有什么用?