#include<iostream>
using namespace std;
#include<string>
#include<algorithm>
//整数部分
string stradd(string p1, string p2, string q1,string q2) {
string res = "";
string ls, ss;
if (q1.size() >= q2.size()) {
ls = q1; ss = q2;
}
else {
ls = q2; ss = q1;
}
int carry = 0;
for (int i = ss.size() - 1; i >= 0; i--) {
//if (i == 0 && carry == 1)break;
if (ss[i] - '0' + ls[i] - '0' + carry <= 9) {
ls[i] = ss[i] - '0' + ls[i] + carry;
carry = 0;
}
else {
ls[i] = ss[i] - '0' + ls[i] + carry - 10;
carry = 1;
}
}
res += '.';
res += ls;
if (p1.size() >= p2.size()) {
ls = p1; ss = p2;
}
else {
ls = p2; ss = p1;
}
reverse(ls.begin(), ls.end());
reverse(ss.begin(), ss.end());
int i = 0;
for (; i < ss.size(); i++) {
if (ss[i] - '0' + ls[i] - '0' + carry <= 9) {
ls[i] = ss[i] - '0' + ls[i] + carry;
carry = 0;
}
else {
ls[i] = ss[i] - '0' + ls[i] + carry - 10;
carry = 1;
}
}
while (carry == 1) {
if (i == ls.size() && carry == 1) {
ls.insert(0, "1");
carry = 0;
}
if (ls[i] - '0' + carry <= 9) {
ls[i] = ls[i] + carry;
carry = 0;
}
else {
ls[i] = ls[i] + carry - 10;
carry = 1;
}
i++;
}
reverse(ls.begin(), ls.end());
res.insert(0, ls);
return res;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
string p1, q1, p2, q2;//p整数部分,q小数部分
p1 = s1.substr(0, s1.find('.', 0));
p2 = s2.substr(0, s2.find('.', 0));
q1 = s1.erase(0, p1.size() + 1);
q2 = s2.erase(0, p2.size() + 1);
cout << stradd(p1, p2, q1, q2) << endl;
return 0;
}