#include<bits/stdc++.h>
#define la a.size()
#define lb b.size()
using namespace std;
string s1,s2,ans;
int n,h,al,bl,len,len1,len2,f;
int sstoi(string s)
{
int x=0;char c;
for(int i=0;i<s.size();i++)c=s[i],x=x*10+c-'0';
return x;
}
string itos(int x)
{
string s;
while(x)
{
s=s+(char)(x%10+'0');
x/=10;
}
return s;
}
string chu(string s,int x)
{
ans="";
len=s.size(),f=0;
for(int i=0;i<len;i++)
{
h=f+(s[i]-'0');
ans=ans+(char)((int)(h/x)+'0');
f=h%x;
}
while(ans[0]=='0')ans.erase(ans.begin());
return ans;
}
string cheng(string s,int x)
{
ans="";
len=s.size(),f=0;
for(int i=len-1;i>=0;i--)
{
h=f+x*((s[i]-'0'));
ans=(char)((h%10)+'0')+ans;
f=h/10;
}
if(f)ans=(char)(f+'0')+ans;
return ans;
}
string jian(string s1,string s2)
{
len1=s1.size(),len2=s2.size(),f=0;
ans="";
for(int i=len1-1,j=len2-1;i>=0&&j>=0;i--,j--)
{
h=s1[i]-s2[j]-f;
if(h<0)h+=10,f=1;
else f=0;
ans=(char)(h+'0')+ans;
}
if(len1>len2)
{
for(int i=len1-len2-1;i>=0;i--)
{
h=s1[i]-'0'-f;
if(h<0)h+=10,f=1;
else f=0;
ans=(char)(h+'0')+ans;
}
}
else
{
for(int i=len2-len1-1;i>=0;i--)
{
h=s2[i]-'0'-f;
if(h<0)h+=10,f=1;
else f=0;
ans=(char)(h+'0')+ans;
}
}
while(ans[0]=='0')ans.erase(ans.begin());
return ans;
}
string solve(string a,string b)
{
string s="1";
while(la>10||lb>10)
{
al=a[la-1]-'0';
bl=b[lb-1]-'0';
if(al%2==0&&bl%2==0)a=chu(a,2),b=chu(b,2),s=cheng(s,2);
if(al%2==1&&bl%2==0)b=chu(b,2);
if(al%2==0&&bl%2==1)a=chu(a,2);
if(al%2==1&&bl%2==1)
{
if(la>lb||(la==lb&&a>b))a=jian(a,b);
else b=jian(b,a);
}
}
return cheng(s,__gcd(sstoi(a),sstoi(b)));
}
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>s1>>s2;
cout<<solve(s1,s2);
return 0;
}
求调%%%