def longAdd(s1,s2):
p=0
l1=len(s1)
l2=len(s2)
i1=l1-1
i2=l2-1
res=""
while(True):
if ((i1<0) & (i2<0)):
break
if (i1<0):
a2=int(s2[i2])+p
p=a2//10
a2=a2%10
res=str(a2)+res
i2-=1
if (i2<0):
break
if (i2<0):
a1=int(s1[i1])+p
p=a1//10
a1=a1%10
res=str(a1)+res
i1-=1
if (i1<0):
break
a1=int(s1[i1])
a2=int(s2[i2])
r=a1+a2+p
p=r//10
r=r%10
res=str(r)+res
i1-=1
i2-=1
if (p>0):
res=str(p)+res
return res
def longSub(s1,s2):
l1=len(s1)
l2=len(s2)
if (l1==l2):
if s1[0]>s2[0]:
sgn=1
a1=s1
a2=s2
else:
sgn=-1
a1=s2
a2=s1
else:
if (l1 > l2):
sgn=1
a1=s1
a2=s2
else:
sgn=-1
a1=s2
a2=s1
l1=len(a1)
l2=len(a2)
i1=l1-1
i2=l2-1
res=""
b=0
while(True):
if ((i1<0) & (i2<0)):
break
if (i1<0):
q2=int(a2[i2])-b
p=q2//10
q2=a2%10
res=str(q2)+res
i2-=1
if (i2<0):
break
q1=int(a1[i1])
q2=int(a2[i2])
q=q1-b-q2
if (q>=0):
res=str(q)+res
b=0
else:
q+=10
b=1
res=str(q)+res
i1-=1
i2-=1
if (sgn==-1):
res="-"+res
return res
s1="9999"
s2="8888"
r=longAdd(s1,s2)
print(r)
s1="9999"
s2="8888"
r=longSub(s1,s2)
print(r)
s1="8888"
s2="9999"
r=longSub(s1,s2)
print(r)
s1="24"
s2="61"
r=longSub(s1,s2)
print(r)
ZGVmIGxvbmdBZGQoczEsczIpOgogICAgIHA9MAogICAgIGwxPWxlbihzMSkKICAgICBsMj1sZW4oczIpCiAgICAgaTE9bDEtMQogICAgIGkyPWwyLTEKICAgICByZXM9IiIKICAgICB3aGlsZShUcnVlKToKICAgICAgICAgaWYgKChpMTwwKSAmIChpMjwwKSk6CiAgICAgICAgICAgICBicmVhawogICAgICAgICBpZiAoaTE8MCk6CiAgICAgICAgICAgICBhMj1pbnQoczJbaTJdKStwCiAgICAgICAgICAgICBwPWEyLy8xMAogICAgICAgICAgICAgYTI9YTIlMTAKICAgICAgICAgICAgIHJlcz1zdHIoYTIpK3JlcwogICAgICAgICAgICAgaTItPTEKICAgICAgICAgICAgIGlmIChpMjwwKToKICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIChpMjwwKToKICAgICAgICAgICAgIGExPWludChzMVtpMV0pK3AKICAgICAgICAgICAgIHA9YTEvLzEwCiAgICAgICAgICAgICBhMT1hMSUxMAogICAgICAgICAgICAgcmVzPXN0cihhMSkrcmVzCiAgICAgICAgICAgICBpMS09MQogICAgICAgICAgICAgaWYgKGkxPDApOgogICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgYTE9aW50KHMxW2kxXSkKICAgICAgICAgYTI9aW50KHMyW2kyXSkKICAgICAgICAgcj1hMSthMitwCiAgICAgICAgIHA9ci8vMTAKICAgICAgICAgcj1yJTEwCiAgICAgICAgIHJlcz1zdHIocikrcmVzCiAgICAgICAgIGkxLT0xCiAgICAgICAgIGkyLT0xCiAgICAgaWYgKHA+MCk6CiAgICAgICAgIHJlcz1zdHIocCkrcmVzCiAgICAgcmV0dXJuIHJlcwoKZGVmIGxvbmdTdWIoczEsczIpOgogICAgbDE9bGVuKHMxKQogICAgbDI9bGVuKHMyKQogICAgaWYgKGwxPT1sMik6CiAgICAgICAgaWYgczFbMF0+czJbMF06CiAgICAgICAgICAgIHNnbj0xCiAgICAgICAgICAgIGExPXMxCiAgICAgICAgICAgIGEyPXMyCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2duPS0xCiAgICAgICAgICAgIGExPXMyCiAgICAgICAgICAgIGEyPXMxCiAgICBlbHNlOgogICAgICAgIGlmIChsMSA+IGwyKToKICAgICAgICAgICAgc2duPTEKICAgICAgICAgICAgYTE9czEKICAgICAgICAgICAgYTI9czIKICAgICAgICBlbHNlOgogICAgICAgICAgICBzZ249LTEKICAgICAgICAgICAgYTE9czIKICAgICAgICAgICAgYTI9czEKCiAgICBsMT1sZW4oYTEpCiAgICBsMj1sZW4oYTIpCiAgICBpMT1sMS0xCiAgICBpMj1sMi0xCiAgICByZXM9IiIKICAgIGI9MAogICAgd2hpbGUoVHJ1ZSk6CiAgICAgICAgaWYgKChpMTwwKSAmIChpMjwwKSk6CiAgICAgICAgICAgIGJyZWFrCiAgICAgICAgaWYgKGkxPDApOgogICAgICAgICAgICBxMj1pbnQoYTJbaTJdKS1iCiAgICAgICAgICAgIHA9cTIvLzEwCiAgICAgICAgICAgIHEyPWEyJTEwCiAgICAgICAgICAgIHJlcz1zdHIocTIpK3JlcwogICAgICAgICAgICBpMi09MQogICAgICAgICAgICBpZiAoaTI8MCk6CiAgICAgICAgICAgICAgICBicmVhawogICAgICAgIHExPWludChhMVtpMV0pCiAgICAgICAgcTI9aW50KGEyW2kyXSkKICAgICAgICBxPXExLWItcTIKICAgICAgICBpZiAocT49MCk6CiAgICAgICAgICAgIHJlcz1zdHIocSkrcmVzCiAgICAgICAgICAgIGI9MAogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHErPTEwCiAgICAgICAgICAgIGI9MQogICAgICAgICAgICByZXM9c3RyKHEpK3JlcwogICAgICAgIGkxLT0xCiAgICAgICAgaTItPTEKICAgICAgICAKICAgIGlmIChzZ249PS0xKToKICAgICAgICByZXM9Ii0iK3JlcwogICAgcmV0dXJuIHJlcwogICAgIApzMT0iOTk5OSIKczI9Ijg4ODgiCnI9bG9uZ0FkZChzMSxzMikKcHJpbnQocikKCnMxPSI5OTk5IgpzMj0iODg4OCIKcj1sb25nU3ViKHMxLHMyKQpwcmludChyKQoKczE9Ijg4ODgiCnMyPSI5OTk5IgpyPWxvbmdTdWIoczEsczIpCnByaW50KHIpCgpzMT0iMjQiCnMyPSI2MSIKcj1sb25nU3ViKHMxLHMyKQpwcmludChyKQoKCg==