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