#include<iostream>
#include<string>
using namespace std;

void Calc( string &str, int sum, int trans, int &move_up )
{
    if( sum > 9 )
    {
        str += sum - 10 + trans;                       // Integer to String
        move_up = 1;
    }
    else
    {
        str += sum + trans;                            // Integer to String
        move_up = 0;
    }
}

int main()
{
    int n, trans = 48;                                 //48は文字としての0を整数に変換したときの値。ex) '6' - 48 = 6
    int move_up = 0;
    string str1, str2, strr = "";

    cin >> n;

    for( int i = 0; i < n; i++ )
    {
        cin >> str1 >> str2;

        int s1 = str1.size(), s2 = str2.size();                     // while分を回す回数を決定
        int j = s1 - 1, k = s2 - 1, sum = 0;                        // sumは位ごとの合計値
        while( j >= 0 && k >= 0 )                                   // 最後の桁まで繰り上がり等計算
        {
            sum = str1[j] + str2[k] - 2 * trans + move_up;          // String to Integer
            Calc( strr, sum, trans, move_up );                      // 繰り上がりの計算
            j--;
            k--;
        }
        while( j >= 0 )                                             // 余った桁を順次格納(繰り上がり情報は保持)
        {
            sum = str1[j] - trans + move_up;
            Calc( strr, sum, trans, move_up );
            j--;
        }
        while( k >= 0 )
        {
            sum = str2[k] - trans + move_up;
            Calc( strr, sum, trans, move_up );
            k--;
        }
        if( move_up == 1 )                                          // 最後の桁での繰り上がり処理
            strr += 1 + trans;

        int sr = strr.size();
        if( sr <= 80 )
        {
            for( int i = sr - 1; i >= 0; i-- )                      // 100という文字列strは、str[0] = 1, str[1] = 0, str[2] = 0という順番で格納される。　
                cout << strr[i];
            cout << endl;
        }
        else
            cout << "overflow" << endl;

        strr = "";                                                  // strrの値をクリア
        move_up = 0;
    }
    return 0;
}
