Go: package main

import (
        "fmt"
        "bufio"
        "os"
)

func main() {
        var n int
        var a, b string
        sc := bufio.NewScanner(os.Stdin)
        fmt.Scanf("%d", &n)
        for i := 0; i < n; i++ {
                sc.Scan()
                a = sc.Text()
                sc.Scan()
                b = sc.Text()

                if len(a) > len(b) {
                        s := add(a, b)
                        if s[len(a)] > 0 {
                                if len(a) >= 80 {
                                        fmt.Printf("overflow")
                                } else {
                                        for i := 0; i <= len(a);i++ {
                                                fmt.Printf("%d", s[len(a)-i])
                                        }
                                }
                                fmt.Printf("\n")
                        } else {
                                if len(a)-1 >= 80 {
                                        fmt.Printf("overflow")
                                } else {
                                        for i := 0; i < len(a);i++ {
                                                fmt.Printf("%d", s[len(a)-i-1])
                                        }
                                }
                                fmt.Printf("\n")
                        }
                } else {
                        s := add(b, a)
                        if s[len(b)] > 0 {
                                if len(b) >= 80 {
                                        fmt.Printf("overflow")
                                } else {
                                        for i := 0; i <= len(b);i++ {
                                                fmt.Printf("%d", s[len(b)-i])
                                        }
                                }
                                fmt.Printf("\n")
                        } else {
                                if len(b)-1 >= 80 {
                                        fmt.Printf("overflow")
                                } else {
                                        for i := 0; i < len(b);i++ {
                                                fmt.Printf("%d", s[len(b)-i-1])
                                        }
                                }
                                fmt.Printf("\n")
                        }
                }
        }
}

// expects ln > lm
func add(n string, m string) (s [100]int) {
        ln := len(n)
        lm := len(m)
        var sum [100]int

        for i := 0; i < ln; i++ {
                var s, t int
                s = int(n[ln-1-i]) - int('0')

                if lm - 1 - i >= 0 {
                        t = int(m[lm-1-i]) - int('0')
                } else {
                        t = 0
                }

                sum[i+1] = (s + t + sum[i]) / 10
                sum[i] = (s + t + sum[i]) % 10
        }

        return sum
}

C++: #define _USE_MATH_DEFINES

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <utility>
#include <vector>
#include <numeric>

using namespace std;

int main()
{
	int n;
	for (cin >> n; n--; )
	{
		string a, b;
		cin >> a >> b;

		string c;

		int add = 0;
		int len = max(a.length(), b.length());
		for (int i = 0; i < len; i++)
		{
			int a0 = 0, b0 = 0;
			int ai = a.length() - i - 1;
			if (ai >= 0)
			{
				a0 = atoi(a.substr(ai, 1).c_str());
			}
			int bi = b.length() - i - 1;
			if (bi >= 0)
			{
				b0 = atoi(b.substr(bi, 1).c_str());
			}
			
			int c0 = a0 + b0 + add;
			add = (c0 >= 10) ? 1 : 0;

			c += to_string(c0).back();
		}
		if (add == 1)
		{
			c += to_string(1);
		}
		reverse(c.begin(), c.end());

		cout << (c.length() > 80 ? "overflow" : c) << endl;
	}
}

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

int main()
{
int x,a,b,h;
cin>>x;
for(int i=0; i<x; i++)
{
 while(true)
 {
  cin>>a>>b;
  if(a.size()>=80||b.size()>=80) break;
  else
  {
   cout<<a+b<<endl;
  }
 }
}
return 0;
}

C++: #include<cstdio>
#include<iostream>
int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        char moneywrite[2][1000];
        int money[2][1000];
        int stl[2]={0,0};
        int stlstl;
        int sum[81];
        scanf("%s",moneywrite[0]);
        scanf("%s",moneywrite[1]);
        for(int j=0;moneywrite[0][j]!='\0';j++){
            money[0][j]=moneywrite[0][j]-'0';
            stl[0]++;
        }
        for(int j=0;moneywrite[1][j]!='\0';j++){
            money[1][j]=moneywrite[1][j]-'0';
            stl[1]++;
        }
        if(stl[0]>stl[1]){
            stlstl=stl[0];
            int p;
            p=stl[0]-stl[1];
            for(int j=0;j<stl[0];j++){
                money[1][stl[0]-j]=money[1][stl[0]-j-p];
            }
            for(int k=0;k<p;k++)
                money[1][k]=0;
        }
        else if(stl[1]>stl[0]){
            stlstl=stl[1];
            int p;
            p=stl[1]-stl[0];
            for(int j=0;j<stl[1];j++){
                money[0][stl[1]-j]=money[0][stl[1]-j-p];
            }
            for(int k=0;k<p;k++)
                money[0][k]=0;
        }
        else{
            stlstl=stl[1];
        }
/*
        for(int j=0;j<stlstl;j++)
            printf("[%d][%d]\n",money[0][j],money[1][j]);
*/
        if(80<=stlstl){
            printf("overflow");
            goto exit;
        }
        for(int j=stlstl-1;0<=j;j--){
            sum[j]=money[0][j]+money[1][j];
            if(10<=sum[j]){
                if(stlstl==79&&j==0){
                    printf("overflow");
                    goto exit;
                }
                else if(j==0){
                    printf("1");
                    sum[j]%=10;
                }
                else{
                    money[0][j-1]++;
                    sum[j]%=10;
                }
            }
        }
        for(int j=0;j<stlstl;j++)
            printf("%d",sum[j]);
exit:
        puts("");
    }
    return 0;
}

C++: 
#include <stdio.h>
#include <string.h>

int main(void){
  int N;
  scanf("%d", &N);

  int i,j,k;
  for(i=0; i<N; ++i){
    int digits[3][81];
    for(j=0; j<3; ++j){
      for(k=0; k<81; ++k){
        digits[j][k] = 0;
      }
    }

    int overflow = 0;
    for(j=0; j<2; ++j){
      char digit[80];
      scanf("%s", digit);
      if(overflow || strlen(digit)>80){
        overflow = 1;
      }else{
        for(k=0; k<strlen(digit); ++k){
          digits[j][k] = digit[strlen(digit)-1-k]-'0';
        }
      }
    }
    if(overflow){
      printf("overflow\n");
    }else{
      for(j=0; j<80; ++j){
        digits[2][j] += (digits[0][j]+digits[1][j]);
        digits[2][j+1] += digits[2][j]/10;
        digits[2][j] %= 10;
      }

      if(digits[2][80]!=0){
        printf("overflow\n");
      }else{
        int available = 0;
        for(j=79; j>=0; --j){
          if(available || digits[2][j]!=0 || j==0){
            available = 1;
            printf("%d", digits[2][j]);
          }
        }
        printf("\n");
      }
    }
  }
  
  return 0;
}

C++: #include<bits/stdc++.h>
using namespace std;

int main(){
  int n,k,p;
  string s1,s2,ans;
  cin>>n;
  while(n--){
    ans.clear();
    p=0;
    cin>>s1;
    cin>>s2;
    reverse(s1.begin(),s1.end());
    reverse(s2.begin(),s2.end());
    k=max(s1.size(),s2.size());
    for(int i=s1.size();i<k;i++)s1+='0';
    for(int i=s2.size();i<k;i++)s2+='0';
    for(int i=0;i<k;i++){
      int sum=s1[i]-'0'+s2[i]-'0'+p;
      ans+=(sum%10)+'0';
      p=sum/10;
    }
    if(p)ans+=p+'0';
    reverse(ans.begin(),ans.end());
    if(ans.size()<=80)cout<<ans<<endl;
    else cout<<"overflow"<<endl;
  }
  return 0;
}