#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;
}