#include<iostream>
#include<vector>
#include<string>

using namespace std ;

class Bigint {
	vector<int> digit ;//一桁ずつ格納する
	
public:
	Bigint(){}
	Bigint(string) ;
	Bigint operator + (Bigint &) ;
	friend ostream& operator << (ostream& os, const Bigint& obj) ;
};

Bigint::Bigint(string str)
{
	for(string::iterator it = str.begin() ;
		it != str.end() ;
		it++){
		this->digit.push_back(*it - '0');//一桁ごとに切り分ける
	}
}
Bigint Bigint::operator + (Bigint &obj)
{
	Bigint *domina ;//dominant
	Bigint *depend ;//dependent
	
	if(this->digit.size() >= obj.digit.size()){
		domina = this ;//大きい方が支配的である
		depend = &obj ;
	}else{
		domina = &obj ;
		depend = this ;
	}
	
	int diff = domina->digit.size() - depend->digit.size() ;
	for(int i=0 ; i < diff ; i++){//zero fill (zero padding)
		depend->digit.insert(depend->digit.begin(),0) ;// .unshift(0)　前から詰めるのがunshiftである。しかし、c++は融通も気も効かないので、perlなどで見られるunshiftなる命令があるわけが無く、わざわざ面倒な長い書き方をして、unshiftの代理とせねばならない。しかも、c++11でも無い限りは、back()もfront()も使えない。通常のc++では様々な語が使えないので、ストレスは極限まで上昇する。vectorとstringでこれらの便利極まりない用語が使えないので、c++での文字列操作はperlよりも数段階も悪化した劣悪な環境に置かれている。splitすらも無いというギリギリの状況で、プログラマは一体何をすればいいのか。全く以て深い霧に覆われている。
	}
	
	Bigint temp ;
	int carry = 0 ;
	for(vector<int>::reverse_iterator it = domina->digit.rbegin(),
		jt = depend->digit.rbegin() ;
		it != domina->digit.rend() ;
		it++, jt++){// reverseであることに注意
		int sum = *it + *jt + carry ;
		if(sum >= 10){
			carry = sum/10 ;
			sum = sum%10 ;
		}else{
			carry = 0 ;
		}
		temp.digit.insert(temp.digit.begin(),sum) ;// unshift
	}
	if(carry > 0){
		temp.digit.insert(temp.digit.begin(),carry) ;// unshift
	}
	
	return temp ;
}
ostream& operator << (ostream& os, const Bigint& obj)
{
	if(obj.digit.size() > 80){
		os << "overflow" ;
		return os ;
	}
	
	for(typeof(obj.digit.begin()) it = obj.digit.begin() ;
		it != obj.digit.end() ;
		it++){
		os << *it ;
	}
	
	return os ;
}
int main(void)
{
	int N;
	string str_a, str_b;
	
	cin >> N;
	
	for (int i = 0; i < N; i++){
		cin >> str_a >> str_b ;
		Bigint a(str_a), b(str_b);
		cout << a+b << endl ;
	}
}