#include<iostream>
#include<string>
using namespace std;
bool checkOverFlow(string& p) {
  //80行超えているかを判定
  if(p.size() > 80) {
    return false;
  } else return true;
}

void addZero(string& p, int num) {
  //addZero(string型, 0を先頭に付け加える個数)
  for(int i=0; i<num; i++) {
    p = '0' + p;
  }
  return;
}

int main() {
  int N;//データセットの個数
  cin >> N;
  //データを配列にセット
  string* value1 = new string[N];
  string* value2 = new string[N];
  for(int i=0; i<N; i++) {
    cin >> value1[i] >> value2[i];
    //80行超えていたらoverflow
    if(value1[i].size() > 80 or value2[i].size() > 80) {
      value1[i] = "overflow";
    } else {
      //桁数を先頭に0をつけて揃える
      if(value1[i].size() > value2[i].size()) {
        addZero(value2[i], value1[i].size() - value2[i].size());
      } else {
        addZero(value1[i], value2[i].size() - value1[i].size());
      }
    }
  }
  
  ////////////////
  //足し算をする//
  ////////////////
  for(int i=0; i<N; i++) {
    if(value1[i] == "overflow") {
      cout << "overflow" << endl;
      continue;
    }
    //最大の桁数
    int length = max(value1[i].size(), value2[i].size());
    //繰り上がりの保存配列
    int* carryUp = new int[length +1];
    for(int i=0; i<length +1; i++) {
      carryUp[i] = 0;
    } 
    //答えの保存配列
    int* ans = new int[length +1];
   
    for(int j=0; j<length; j++) {
      int sum;
      sum = (value1[i][value1[i].size()-j-1] - '0')
        + (value2[i][value2[i].size()-j-1] - '0')
        + carryUp[j];
      if(sum>9) carryUp[j+1] = 1;
      ans[j] = sum % 10;

      /*
        cout << "value1:  " << value1[i][value1[i].size()-j-1] - '0' << endl;
        cout << "value2:  " << value2[i][value2[i].size()-j-1] - '0' << endl;
        cout << "carryUp: " << carryUp[j] << endl;
        cout << "ans      " << ans[j] << endl;
        cout << "===========" << endl;
      */
    }

    //出力
    int start;//桁数(1:length桁 0:length+1桁)
    if(carryUp[length] == 1){
      ans[length] = 1;
      start = 0;
    } else start = 1;

    string output = "";
    for(int i=start; i<=length; i++) {
      output += ans[length -i];
    }

    if(output.size() > 80) {
      cout << "overflow" << endl;
    } else {
      for(int i=start; i<=length; i++) {
        cout << ans[length -i];
      }
      cout << endl;
    }
    
    delete[] carryUp;
    delete[] ans;
  }
  delete[] value1;
  delete[] value2;
}

