//与进位相关的思路,复习的时候要注意
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<set>
#include<cmath>
using namespace std;
int main()
{
string s1,s2;
getline(cin,s1);
getline(cin,s2);
int i1 = s1.find('.');
int i2 = s2.find('.');
string zs1 = s1.substr(0,i1);
string zs2 = s2.substr(0,i2);
string xs1 = s1.substr(i1+1);
string xs2 = s2.substr(i2+1);
string xs3;
string zs3;
int len_xs1=xs1.size();
int len_xs2=xs2.size();
int len_zs1=zs1.size();
int len_zs2=zs2.size();
if(len_xs1>len_xs2)
{
xs3 = xs1;
}
else{
xs3 = xs2;
}
if(len_zs1>len_zs2)
{
zs3 = zs1;
}
else{
zs3 = zs2;
}
int min_xs = min(len_xs1,len_xs2);
int min_zs = min(len_zs1,len_zs2);
int max_xs = max(len_xs1,len_xs2);
int max_zs = max(len_zs1,len_zs2);
int flag=0;
for(int i=min_xs-1;i>=0;i--)
{
int sum=0;
sum = sum+(xs1[i]-'0')+(xs2[i]-'0')+flag;
if(sum>=10)
{
flag=1;
xs3[i]=(sum%10)+'0';
}
else{
flag=0;
xs3[i]=sum+'0';
}
}
int chazhi = max_zs-min_zs;
int flag2=0;
for(int j=max_zs-1;j>=0;j--)
{
int sum2=0;
if(len_zs1>len_zs2)
{
if(j-chazhi>=0)
{
sum2 += sum2+(zs1[j]-'0')+(zs2[j-chazhi]-'0')+flag+flag2;
}
else{
sum2 += sum2+(zs1[j]-'0')+0+flag+flag2;
}
}
else{
if(j-chazhi>=0)
{
sum2 += sum2+(zs2[j]-'0')+(zs1[j-chazhi]-'0')+flag+flag2;
}
else{
sum2 += sum2+(zs2[j]-'0')+0+flag+flag2;
}
}
if(flag==1)
{
flag=0;
}
if(sum2>=10)
{
flag2=1;
if(j!=0)
{
zs3[j] = (sum2%10)+'0';
}
else{
zs3[j] = (sum2%10)+'0';
zs3.insert(0,(sum2/10)+"0");
}
}
else{
flag2=0;
zs3[j] = sum2+'0';
}
}
cout<<zs3<<'.'<<xs3<<endl;
return 0;
}