Go: package main

import (
	"bufio"
	"fmt"
	"math/big"
	"os"
	"strconv"
)

var sc = bufio.NewScanner(os.Stdin)

func main() {
	sc.Scan()
	dataset, _ := strconv.Atoi(sc.Text())
	var firstdata *big.Int

	for i := 0; i < dataset*2; i++ {
		n := new(big.Int)
		sc.Scan()
		data, _ := n.SetString(sc.Text(), 10)

		if i%2 == 0 {
			firstdata = data
			continue
		}

		result := new(big.Int)
		if result := result.Add(data, firstdata); len(result.String()) > 80 {
			fmt.Println("overflow")
			continue
		} else {
			fmt.Println(result)
		}
	}
}

C++: //#define __USE_MINGW_ANSI_STDIO 0
#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<ll> VL;
typedef vector<VL> VVL;
typedef pair<int, int> PII;

#define FOR(i, a, n) for (ll i = (ll)a; i < (ll)n; ++i)
#define REP(i, n) FOR(i, 0, n)
#define ALL(x) x.begin(), x.end()
#define IN(a, b, x) (a<=x&&x<b)
#define MP make_pair
#define PB push_back
#define MOD 1000000007
#define INF (1LL<<30)
#define LLINF (1LL<<60)
#define PI 3.14159265359
#define EPS 1e-12
//#define int ll

signed main(void)
{
	int n;
	cin >> n;
	REP(i, n) {
		string s, t;
		cin >> s >> t;

		int dif = abs((int)s.size()-(int)t.size());
		//cout << "dif:" << dif << endl;
		string tmp = "";
		REP(i, dif) tmp += '0';
		//cout << tmp << endl;
		if(s.size() < t.size()) s = tmp + s;
		else t = tmp + t;
		//cout << s << " " << t << endl;

		bool flag = false;
		for(int i=t.size()-1; i>=0; --i) {
			int tmp = (t[i]-'0')+(s[i]-'0');
			if(flag) tmp++;
			flag = false;
			if(tmp >= 10) {tmp -= 10; t[i] = tmp+'0'; flag = true;}
			else {t[i] = tmp+'0';}
			//cout << t << endl;
		}
		if(flag) t = '1' + t;
		if(t.size() > 80) cout << "overflow" << endl;
		else cout << t << endl;
	}

	return 0;
}

C++: #include <cstdio>
#include <string>
using namespace std;

int main(void)
{
    int n;
    bool flag;
    scanf("%d", &n);
    
    while (n != 0){
        flag = true;
        
        int num1[81] = {0};
        int num2[81] = {0};
        int max_len;
        
        char in[3000];
        scanf("%s", in);
        // êUlðæèÞ
        int len = (int)strlen(in);
        if (80 < len) flag = false;
        // üÁ½lª80Èã¾Á½çAflagð0É·é
        else {
            max_len = len;
            int j = 0;
            for (int i = (len - 1); -1 < i; i--){
                num1[j] = in[i] - '0';
                j++;
            }
        }
        
        scanf("%s", in);
        // êUlðæèÞ
        len = (int)strlen(in);
        if (80 < len) flag = false;
        // üÁ½lª80Èã¾Á½çAflagð0É·é
        else {
            if (max_len < len) max_len = len;
            int j = 0;
            for (int i = (len - 1); -1 < i; i--){
                num2[j] = in[i] - '0';
                j++;
            }
        }
        
        // üÁ½lª80Èã¶áÈ¢Æ«ÉZ
        if (flag){
            for (int i = 0; i < 80; i++){
                num1[i] += num2[i];
                if (10 <= num1[i]){
                    num1[i + 1] += 1;
                    num1[i] %= 10;
                }
            }
            
            if (num1[80] != 0){
                flag = 0;
                // 81Úª0¶áÈ¢ = overflow
            }
            
            // overflowµÄÈ¢Æ«ÉoÍ
            if (flag){
                // ÅãÌ«µã°ÅJèãªèµÄé©Ç¤©
                if (num1[max_len] == 0){
                    for (int i = max_len - 1; -1 < i; i--){
                        printf("%d", num1[i]);
                    }
                    printf("\n");
                }
                else {
                    for (int i = max_len; -1 < i; i--){
                        printf("%d", num1[i]);
                    }
                    printf("\n");
                }
            }
        }
        
        // ¡ÜÅÉflagª0ÉÈÁÄ½çoverflowI
        if (!flag){
            printf("overflow\n");
        }
        
        n--;
    }
    
}

C++: #include<iostream>
#include<string>
#include<iomanip>
#include<cmath>
using namespace std;

int main(){

	int n;

	string a, b;
	char N1[80], N2[80];
	char sum[80], temp[81];
	string ans;

	cin >> n;

	for( int i=0;i<n;i++ ){

		cin >> a;
		
		cin >> b;

		if( a.length() >= 80 ){
			cout << "overflow" << endl;
			continue;
		}

		if( b.length() >= 80 ){
			cout << "overflow" << endl;
			continue;
		}

		for( int i=0;i<80;i++ ){
			N1[i] = -1; N2[i] = -1; sum[i] = 0;
		}

		for( int i=1;i<=a.length();i++ )
			N1[i] = a[a.length()-i] - '0';
		for( int i=1;i<=b.length();i++)
			N2[i] = b[b.length()-i] - '0';

		int over = 0;
		
		for( int i=0;i<80;i++ ){


			if( N1[i] == -1 && N2[i] == -1 ){
				if( over >= 10 ){
					sum[i] = over / 10;
					over = 0;
				}else
					sum[i] = -1;
				continue;
			}

			if( N1[i] != -1 )
				sum[i] += N1[i];
			if( N2[i] != -1 )
				sum[i] += N2[i];

			sum[i] += over / 10;

			over = floor((double)sum[i]/10)*10;

			sum[i] -= over;
			
		}

		if(over > 0)cout << "overflow" << endl;
		else{
			int j=0;
			for( int i=1;i<=80;i++ ){
				if( sum[80-i] >= 0 ){
					temp[j] = sum[80-i] + '0';
					j++;
					continue;
				}
				
			}
			temp[j] = '\0';

			ans = temp;

			cout << ans << endl;
		}

	}
	return 0;
}

C++: #include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
    char num1[100],num2[100];
    char sum[100],temp;
    int a,b,q,r,i,big,small,j,testcase;
    cin>>testcase;
    while(testcase--){
        scanf("%s %s",&num1,&num2);
        int len1=strlen(num1);
        int len2=strlen(num2);
        if(len1>80 || len2>80){
            cout<<"overflow\n";
            continue;
        }
        reverse(num1,num1+len1);
        reverse(num2,num2+len2);

        if(len1>len2){
            big=len1;
            small=len2;
        }
        else{
            big=len2;
            small=len1;
        }
        r=0;
        for(i=0;i<small;i++){
            a=num1[i]-48;
            b=num2[i]-48;
            if(a+b+r>9){
                q=(a+b+r)-10;
                r=1;
                sum[i]=q+48;
            }
            else{
                q=a+b+r;
                r=0;
                sum[i]=q+48;
            }
        }
        if(len1>len2){
            for(;i<big;i++){
                a=num1[i]-48;
                a+=r;
                if(a>9){
                    q=a-10;
                    r=1;
                    sum[i]=q+48;
                }
                else{
                    q=a;
                    r=0;
                    sum[i]=q+48;
                }
            }
        }
        else{
            for(;i<big;i++){
                a=num2[i]-48;
                a+=r;
                if(a>9){
                    q=a-10;
                    r=1;
                    sum[i]=q+48;
                }
                else{
                    q=a;
                    r=0;
                    sum[i]=q+48;
                }
            }
        }
        if(r>0){
            q=r;
            sum[i]=q+48;
            sum[++i]='\0';
        }
        else{
            sum[i]='\0';
        }
        j=strlen(sum);
        if(j>80){
            cout<<"overflow\n";
        }
        else{
            reverse(sum,sum+j);
            cout<<sum<<endl;
        }
    }
    return 0;
}