Go: package main

import (
        "fmt"
        "os"
        "bufio"
        "strings"
        "strconv"
)

func main() {
        sc := bufio.NewScanner(os.Stdin)

        for sc.Scan() {
                digits := 0
                num := 0
                for _, s := range strings.Fields(sc.Text()) {
                        i, _ := strconv.Atoi(s)
                        num += i
                }
                for num > 0 {
                        digits += 1
                        num /= 10
                }
                fmt.Printf("%d\n", digits)
        }
}

C++: #include<iostream>
using namespace std;
int main(){
    int a[1000000],b[1000000],i,j,n;
    cin>>n;
    for(i=0;i<n;i++){
        cin>>a[i]>>b[i];
    }
    for(j=0;j<n;j++){
        if(a[j]+b[j]<10){
            cout<<"1"<<endl;
        }
        else if(a[j]+b[j]<100){
            cout<<"2"<<endl;
        }
        else if(a[j]+b[j]<1000){
            cout<<"3"<<endl;
        }
        else if(a[j]+b[j]<10000){
            cout<<"4"<<endl;
        }
        else if(a[j]+b[j]<100000){
            cout<<"5"<<endl;
        }
        else if(a[j]+b[j]<1000000){
            cout<<"6"<<endl;
        }
        else if(a[j]+b[j]<=1999999){
            cout<<"7"<<endl;
        }
    }
    return 0;
}

C++: #include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<string>
#include<vector>
#include<math.h>
#include<queue>
#include <algorithm>
#include<functional>
#include<cstdlib>
#include<cmath>

#define REP(i, n) for(int i = 0;i < n;i++)
#define REPR(i, n) for(int i = n;i >= 0;i--)
#define FOR(i, m, n) for(int i = m;i < n;i++)
#define FORR(i, m, n) for(int i = m;i >= n;i--)
#define CI cin >>
#define CO cout <<
#define E << endl;

using namespace std;

typedef pair<int, int> P;
typedef pair<long, long> LP;
typedef pair<int, P> PP;
typedef pair<long, LP> LPP;



int dy[] = { 0, 0, 1, -1, 0 };
int dx[] = { 1, -1, 0, 0, 0 };

int A = 0, B = 0, K = 0, T = 0, W = 0, N = 0, H = 0;
int n = 0;
double L = 0;
double S = 0;
double ar = 0, br = 0, cr = 0;
int answer = 0;

string C;
string sA, strB;
vector<vector<char>> map;
vector<double> num;
vector<string> str;

int sum = 0;

vector<int> value;
vector<int> weight;

int dp[110][10010];

int data_[210][2] = {-2};

void input() {
	int i = 0;

	while (scanf_s("%d%d",&data_[i][0],&data_[i][1]) != EOF) {
		i++;
	}

	return;
}


int main(void) {
	input();
	int i = 0;
	int sum = 0;
	int numb = 0;

	while (true) {
		sum = data_[i][0] + data_[i][1];
		while (sum != 0) {
			numb++;
			sum /= 10;
		}
		if (data_[i + 1][0] == -2) {
			break;
		}
	}

	CO numb E

	return 0;
}

C++: #include <iostream>
using namespace std;
int main() {
	int number;
	int digit = 0;
	int a, b;
	while (cin >> a >> b) {
		digit=0;
		number = a + b;
		while (number != 0) {
			number = number / 10;
			++digit;
		}
		cout << digit << endl;
	}
	return 0;
}

C++: #include<stdio.h>
 
int main(void){
int a, b, c, i;
 
while(scanf("%d %d", &a, &b) != EOF){
c = a + b;
for( i=0; c != 0;i++){
c /= 10;
}
printf("%d\n", i+1);
}
return 0;
}

C++: #include <iostream>

using namespace std;

int main(){
	
	int a,b;
	int  s,k;
	
	while(cin>>a>>b){
	s=a+b;
		k=0;
	while(s!=0){
	s=s/10;
	k++;
	}
		cout<<k<<endl;
	}
	}

C++: #include <iostream>
#include <vector>

using namespace std;

int main() {
    int tmpa, tmpb;
    vector<int> a;
    vector<int> b;
    
    while (cin >> tmpa >> tmpb) {
        a.push_back(tmpa);
        b.push_back(tmpb);
    }
    
    for (int i = 0; i < a.size(); i++) {
        int sum = a[i] + b[i];
        int keta = 0;
        while (sum > 0) {
            sum /= 10;
            keta++;
        }
        cout << keta << endl;
    }

    return 0;
}

C++: #include<cstdio>
#include<cmath>

int main(){
	int a,b;
	while(scanf_s("%d %d",&a,&b) != EOF)
		printf_s("%d\n",(int)log10((double)a+b)+1);
}

C++: #include <iostream>
  
u_int getDigit(u_int n){
    u_int digit = 0;
      
    while(n > 0){
        n /= 10;
        ++digit;
    }
      
    return digit;
}
    
int main(){
    u_int a, b;
      
    while(std::cin >> a >> b){
        std::cout << getDigit(a + b) << std::endl;
    }
      
    return 0;
}

C++: #define _USE_MATH_DEFINES
#include<iostream>
#include<string>
#include<queue>
#include<cmath>
#include<map>
#include<set>
#include<list>
#include<iomanip>
#include<vector>
#include<random>
#include<functional>
#include<algorithm>
#include<stack>
#include<cstdio>
#include<bitset>
#include<unordered_map>
#include<climits>
#include<fstream>
using namespace std;
///////////////////library zone!!!!!!!!!!!!!!!!!!!!!!!!!!!!
typedef long long ll;
typedef long double ld;
#define all(a) (a).begin(),(a).end()
const ll Mod = 1000000007;
const ll mod = 998244353;
struct H {
	ll x, y;
	bool operator<(const H &b) const {
		if (x != b.x) return x < b.x;
		return y < b.y;
	}
	bool operator>(const H &b) const {
		if (x != b.x) return x > b.x;
		return y > b.y;
	}
	bool operator==(const H &b) const { return x == b.x&&y == b.y; }
	bool operator!=(const H &b) const { return (*this) != b; }
};
struct P {
	ll pos, cost;
	bool operator<(const P &b) const { return cost < b.cost; }
	bool operator>(const P &b) const { return cost > b.cost; }
};
struct B {
	ll to, cost;
};
struct E {
	ll from, to, cost;
	bool operator<(const E &b) const { return cost < b.cost; }
	bool operator>(const E &b) const { return cost > b.cost; }
};
template<typename T, typename U>
void chmin(T &a, U b) {
	if (a > b) a = b;
}
template<typename T, typename U>
void chmax(T &a, U b) {
	if (a < b) a = b;
}
template<typename T>
T max_0(T a) {
	if (a < 0) return 0;
	return a;
}
template<typename T>
T min_0(T a) {
	if (a > 0) return 0;
	return a;
}
ll read() {
	ll u;
	ll k = scanf("%lld", &u);
	return u;
}
ll gcd(ll i, ll j) {
	if (i > j) swap(i, j);
	if (i == 0) return j;
	return gcd(j%i, i);
}
ll mod_pow(ll x, ll n, ll p) {
	ll res = 1;
	while (n > 0) {
		if (n & 1) res = res * x % p;
		x = x * x % p;
		n >>= 1;
	}
	return res;
}//x^n%p
const ll Inf = 3023372036854775807;
const int inf = 1500000000;
#define int long long
//----------------------------------------------------
signed main() {
	int a, b;
	while (cin >> a >> b) {
		cout << to_string(a + b).size() << endl;
	}
}

C++: #include <iostream>
#include <cmath>
using namespace std;
int main()
{
	long long int a, b;
	while (cin >> a >> b)
	{
		cout << (int)log10((double)(a+b)) + 1 << endl;
	}
}

C++: #include <stdio.h>

int main(){

	int a=0,b=0,x=0;

	while (scanf("%d%d", &a, &b)!=EOF){
		
		if (a + b < 1000000){
			x=6;
		}else if(a + b < 100000){
			x=5;
		}else if (a + b < 10000){
			x=4;
		}else if (a + b < 1000){
			x=3;
		}else if (a + b < 100){
			x=2; 
		}
		else(a + b < 10); {
			x=1;
		}printf("%d\n", x);
	}
	return 0;
}

C++: #include<complex>
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cmath>
#include<vector>
#include<map>
#include<sstream>
#include<ctime>
#include<cstdio>
#include<cstdlib>
#include<cassert>
#include<deque>
#include<queue>
#include<climits>
#include<list>
#include<stack>
#include<fstream>
#include<ctime>
#define all(n) n.begin(),n.end()
#define REP(i,s,n) for(int i=s;i<n;i++)
#define rep(i,n) REP(i,0,n)
#define insert(a,b,c,d) PP(P(a,b),P(c,d))
#define F first
#define S second
#define pb push_back
#define INF (1<<27)
#define EPS 1e-10
#define equals(a,b) (fabs((a)-(b)) < EPS)

using namespace std;

typedef pair<int,int> P;
typedef pair<P,P> PP;
typedef unsigned long long ull;
typedef long long ll;
const int dx[4] = {0,1,0,-1};
const int dy[4] = {1,0,-1,0};


int main(){

  int a,b;
  while(cin >> a >> b){
    int c = a+b;
    stringstream ss;
    ss << c;
    string ret;
    ss >> ret;   
    cout << ret.size() << endl;
  }

  ofstream ofs("out2.txt");
  for(int i=0;i<=10000;i++){
    ofs << string(100000,'?') << endl;
  }

return 0;
}