//这道题比较麻烦但不难,如果掌握大数的加法乘法,那这道题就是代码多点
#include "stdio.h"
#include "string"
#include "algorithm"
using namespace std;

string addString1(string num1,string num2,int &carry){//小数加法
    int length = num1.size()>num2.size()?num1.size():num2.size();
    while (num1.size() < length)//将二者的位数补齐(低位补齐)
        num1 += "0";
    while (num2.size() < length)
        num2 += "0";
    string num3 = "";int temp;
    for (int i = length-1; i >= 0; --i) {
        temp = num1[i]-'0' + num2[i]-'0'+carry;
        if(temp > 9){
            carry = 1;
            num3 += temp - 10 + '0';
        } else{
            num3 += temp + '0';
            carry = 0;
        }
    }
    int i = 0;
    while (num3[i] == '0'){//消除低位的0
        ++i;
    }
    num3.erase(0,i);//低位多出来的0舍去
    reverse(num3.begin(),num3.end());//算的时候是按反着存的,所以倒回来
    return num3;
}

string addString2(string num1,string num2,int &carry){//整数加法
    int length = num1.size()>num2.size()?num1.size():num2.size();
    while (num1.size() < length)//高位补齐
        num1 = "0" + num1;
    while (num2.size() < length)
        num2 = "0" + num2;
    string num3 = "";int temp;
    for (int i = length-1; i >= 0; --i) {
        temp = num1[i]-'0' + num2[i]-'0' + carry;
        if (temp > 9){
            carry = 1;
            num3 += temp-10+'0';
        } else{
            num3 += temp+'0';
            carry = 0;
        }
    }
    if (carry == 1)
        num3 += carry+'0';//最高位>9后要产生更高的一位
    reverse(num3.begin(),num3.end());//算的时候是按反着存的,所以倒回来
    return num3;
}

int main(){
    char buf1[1000],buf2[1000];
    while (fgets(buf1,1000,stdin)!=NULL){
        fgets(buf2,1000,stdin);
        string num1_entire = buf1,num2_ebtire = buf2;
        num1_entire.pop_back();num2_ebtire.pop_back();
        int pos1 = num1_entire.find('.');//记录第一个数的小数点位置
        int pos2 = num2_ebtire.find('.');//记录第二个数的小数点位置
        string num1_part1 = num1_entire.substr(0,pos1);//得到第一个数的小数点前面的部分
        string num1_part2 = num1_entire.substr(pos1+1);//得到第一个数的小数点后面的部分
        string num2_part1 = num2_ebtire.substr(0,pos2);//得到第二个数的小数点前面的部分
        string num2_part2 = num2_ebtire.substr(pos2+1);//得到第二个数的小数点后面的部分
        /*
         * 之后的思路是是先将小数点后面的字符串相加,再将小数点前面的字符串相加
         */
        int carry = 0;//存储进位信息
        string num3_part2 = addString1(num1_part2,num2_part2,carry);
        string num3_part1 = addString2(num1_part1,num2_part1,carry);
        string num3_entire = num3_part1+'.'+num3_part2;
        printf("%s\n",num3_entire.c_str());
    }
}