#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
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛ + + + +
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛+ + + +
*/