#include <iostream>
#include <string>
#include <bits/stdc++.h>
using namespace std;
void f_init(string& a, string& a1, string& a2) {
int i = 0;
int n = a.size();
for (i ; a[i] != '.'; i++)a1.push_back(a[i]);
i++;
for (i ; i < n; i++)a2.push_back(a[i]);
return ;
}
string func_add(string& a, string& b,bool flag){
if(b.size()>a.size())return func_add(b,a,flag);
string ans;
int t=0;//用于记录进位
if(flag)t=1;//小数加法有进位
reverse(a.begin(),a.end());
reverse(b.begin(),b.end());
int i;
for(i=0;i<b.size();i++){
int temp = a[i]-'0'+b[i]-'0';
temp+=t;
if(temp/10){
temp%=10;
t=1;
}else{
t=0;
}
ans.push_back(temp+'0');
}
while(i<a.size()){
int temp = a[i]-'0';
temp+=t;
if(temp/10){
temp%=10;
t=1;
}else{
t=0;
}
ans.push_back(temp+'0');
i++;
}
if(t)ans.push_back(t+'0');
reverse(ans.begin(),ans.end());
return ans;
}
string func_add1(string& a, string& b) {//小数加
if (b.size() > a.size())return func_add1(b, a);
string ans;
//b小数点后补零,使其长度与a的小数长度一致
while(b.size()<a.size()){
b.push_back('0');
}
int t=0;//用于记录进位
int n=a.size();
for(int i=n-1;i>=0;i--){//从小数最小位开始计算
int temp = a[i]-'0'+b[i]-'0';
temp+=t;
if(temp/10){//有进位
temp%=10;
t=1;
}else{
t=0;
}
ans.push_back(temp+'0');
}
if(t)ans.push_back(t+'0');
reverse(ans.begin(),ans.end());
return ans;
}
int main() {
string a, b;
while (cin >> a >> b) { // 注意 while 处理多个 case
string a1, a2;
string b1, b2;
f_init(a, a1, a2);
f_init(b, b1, b2);
string ans1 = func_add1(a2,b2);
bool flag=false;//标志小数加法是否有进位
if(ans1.size()>max(a2.size(),b2.size())){
//说明小数有进位
ans1=ans1.substr(1,ans1.size()-1);
flag=true;
}
string ans=func_add(a1,b1,flag);
cout<<ans<<'.'<<ans1;
}
return 0;
}
// 64 位输出请用 printf("%lld")