#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#include<math.h>
using namespace std;
string stradd(string s1, string s2) {
int n1 = s1.size();
int n2 = s2.size();
int i = 0;
string res;
reverse(s1.begin(), s1.end());
reverse(s2.begin(), s2.end());
int c = 0;
while (i < n1 && i < n2) {
if ((s1[i] - '0') + (s2[i] - '0') + c < 10) {
res.push_back(s1[i] + (s2[i] - '0') + c);
c = 0;
} else {
int x = (s1[i] - '0') + (s2[i] - '0') + c;
res.push_back('0' + x % 10);
c = x / 10;
}
i++;
}
if (n1 > n2) {
for (int i = n2; i < n1; i++) {
int sum = (s1[i] - '0') + c;
res.push_back('0' + sum % 10);
c = sum / 10;
}
} else if (n1 < n2) {
for (int i = n1; i < n2; i++) {
int sum = (s2[i] - '0') + c;
res.push_back('0' + sum % 10);
c = sum / 10;
}
}
if (c > 0) {
res.push_back('0' + c);
}
reverse(res.begin(), res.end());
return res;
}
int main() {
string s1, s2;
string zhenshu[2], xiaoshu[2];
string left, right;
cin >> s1 >> s2;
int n1 = s1.size(), n2 = s2.size();
for (int i = 0; i < n1; i++) {
if (s1[i] == '.') {
zhenshu[0] = s1.substr(0, i);
xiaoshu[0] = s1.substr(i + 1, n1 - i - 1);
}
}
for (int i = 0; i < n2; i++) {
if (s2[i] == '.') {
zhenshu[1] = s2.substr(0, i);
xiaoshu[1] = s2.substr(i + 1, n2 - i - 1);
}
}
if (xiaoshu[0].size() < xiaoshu[1].size()) {
while (xiaoshu[0].size() < xiaoshu[1].size()) {
xiaoshu[0].push_back('0');
}
} else if (xiaoshu[1].size() < xiaoshu[0].size()) {
while (xiaoshu[1].size() < xiaoshu[0].size()) {
xiaoshu[1].push_back('0');
}
}
left = stradd(zhenshu[0], zhenshu[1]);
right = stradd(xiaoshu[0], xiaoshu[1]);
if (right.size() > max(xiaoshu[0].size(), xiaoshu[1].size())) {
string xiaoshu_c = right.substr(0, 1);
left = stradd(left, xiaoshu_c);
right = right.erase(0, 1);
}
cout << left << "." << right;
return 0;
}