#include<iostream>
#include<string>
using namespace std;
void paddingLeft(string& s, int num) {
if (s.size() == num) return;
int padding = num - s.size();
for (int i = 0; i < padding; i++) s = "0" + s;
}
void paddingRight(string& s, int num) {
if (s.size() == num) return;
int padding = num - s.size();
for (int i = 0; i < padding; i++) s += "0";
}
string sum(string a, string b, int& outputCarry, int inputCarry = 0) {
string::reverse_iterator it1 = a.rbegin();
string::reverse_iterator it2 = b.rbegin();
string ans = "";
int carry = inputCarry;
while (it1 != a.rend()) { //已经对齐过了反正
int sum = (*it1 - '0') + (*it2 - '0') + carry;
//计算本位并拼接字符串
int remain = sum % 10;
char digit = '0' + remain;
ans = digit + ans;
//进位到下一位
carry = sum / 10;
it1++;
it2++;
}
outputCarry = carry;
return ans;
}
int main() {
string a, b;
while (cin >> a >> b) {
//提取整数/小数部分
string aU = a.substr(0, a.find('.'));
string aL = a.substr(a.find('.') + 1);
string bU = b.substr(0, b.find('.'));
string bL = b.substr(b.find('.') + 1);
//对齐
int dU = aU.size() >= bU.size() ? aU.size() : bU.size();
int dL = aL.size() >= bL.size() ? aL.size() : bL.size();
paddingRight(aL, dL);
paddingRight(bL, dL);
paddingLeft(aU, dU);
paddingLeft(bU, dU);
//计算
int cL = 0; //小数部分进位
int cU = 0; //整数部分进位
string sL = sum(aL, bL, cL);
string sU = sum(aU, bU, cU, cL);
if (cU == 1) sU = '1' + sU;
//输出
cout << sU << '.' << sL << endl;
}
return 0;
}