全T了
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
char s[maxn];
struct gj{
int num[maxn],len;
inline void clean(){
memset(num,0,sizeof num);
len=0;
}
inline bool operator <=(const gj &a) {
if(len!=a.len) return len<=a.len;
for(register int i=len-1;i>=0;--i)
if(num[i]!=a.num[i]) return num[i]<=a.num[i];
return 1;
}
inline bool operator <(const gj &a) {
if(len!=a.len) return len<a.len;
for(register int i=len-1;i>=0;--i)
if(num[i]!=a.num[i]) return num[i]<a.num[i];
return 0;
}
inline bool operator >=(const gj &a) {
if(len!=a.len) return len>=a.len;
for(register int i=len-1;i>=0;--i)
if(num[i]!=a.num[i]) return num[i]>=a.num[i];
return 1;
}
inline bool operator >(const gj &a) {
if(len!=a.len) return len>a.len;
for(register int i=len-1;i>=0;--i)
if(num[i]!=a.num[i]) return num[i]>a.num[i];
return 0;
}
inline bool operator == (const gj &a){
if(a.len!=len) return 0;
for(register int i=len-1;i>=0;--i)
if(num[i]!=a.num[i]) return 0;
return 1;
}
inline bool operator != (const gj &a){
if(a.len!=len) return 1;
for(register int i=len-1;i>=0;--i)
if(num[i]!=a.num[i]) return 1;
return 0;
}
gj operator -(const gj &a){
gj c; c.clean();
c.len = max(a.len,len);
for(register int i=0;i<c.len;++i){
c.num[i]+=(num[i]-a.num[i]);
if(c.num[i]<0){
c.num[i]+=10;
--c.num[i+1];
}
}
while(c.num[c.len-1] == 0) --c.len;
return c;
}
gj operator +(const gj &a){
gj c; c.clean();
c.len=max(a.len,len);
for(register int i=0;i<c.len;++i){
c.num[i]+=(num[i]+a.num[i]);
if(c.num[i]>=10){
c.num[i]-=10;
++c.num[i+1];
}
}
while(c.num[c.len]>0) ++c.len;
return c;
}
gj read(){
scanf("%s", s);
len=strlen(s);
for(register int i=len-1;i>=0;--i)
num[i]=(s[len-i-1]^48);
}
gj print(){
for(register int i=len-1;i>=0;--i)
printf("%d", num[i]);
// printf("\n");
}
};
inline bool check(const gj &a){
if(a.num[0]&1) return 0;
else return 1;
}
gj div_2(gj a) { //除以2的运算函数
for(register int i=a.len-1;i>0;--i){
a.num[i-1]+=(a.num[i]%2)*10;
a.num[i]/=2;
}
a.num[0]/=2;
while(a.num[a.len-1]==0) a.len --;
return a;
}
gj mul_2(gj a) { //乘2的运算函数
int into=0;
for(register int i=0;i<a.len;++i){
a.num[i]=a.num[i]*2+into;
into=0;
if(a.num[i]>=10) {
into=a.num[i]/10;
a.num[i]%=10;
if(i==a.len-1) ++a.len;
}
}
return a;
}
signed main(void){
gj a,b;
int cnt=0;
a.read(),b.read();
// a.print(),b.print();
while(a!=b){
if(a<b) swap(a,b);
bool f1=check(a),f2=check(b);
if(f1&&f2) ++cnt;
if(f1) a=div_2(a);
if(f2) b=div_2(b);
if(f1==0&&f2==0) a=a-b;
// a.print(),cout<<' ', b.print(),cout<<" "<<cnt, cout<<endl;
}
for(register int i=1;i<=cnt;++i) a=mul_2(a);
a.print(); puts("");
return 0;
}
/*
5702887,9227465
*/