Go: package main

import (
  "fmt"
  "unicode/utf8"
)


func main() {
  var a int
  var b int
  for _, err := fmt.Scan(&a, &b); err == nil; _, err = fmt.Scan(&a, &b) {
    fmt.Println(utf8.RuneCountInString(fmt.Sprint(a+b)))
  }
}

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;
}

C++: #include <algorithm>
#include <cstdio>
#include <functional>

using namespace std;

int main(){
    int a, b;
    while(scanf("%d %d", &a, &b) != EOF){
         a = a + b;
         int i = 0;
         while(a > 0){ a = a / 10; i++; }
         printf("%d\n", i);

    }
    return 0;

}

C++: #include<bits/stdc++.h>
using namespace std;
int main()
{
    long long a,b;
    int tt;
    //cin>>tt;
    while(cin>>a>>b)
    {
        int d2;
        int d1=d2=0;
        while(a){
            if(a%10) d1++;
            a/=10;
        }
        while(b){
            if(b%10) d2++;
            b/=10;
        }
        cout<<d1+d2<<endl;

    }

}

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

int main(){
long int sum,buf1,buf2;
int c;

while(cin >> buf1 >> buf2){
	c = 1;
	sum = buf1 + buf2;
	
	while(sum/10 != 0){
		sum /= 10;
		c++;
	}
	cout << c << endl;
}
return 0;
}

C++: #include <iostream>			//std::cout, std::cin
#include <string>			//std::string,std::to_string(C++11)
#include <vector>			//std::vector
#include <valarray>			//std::valarray
#include <algorithm>		//std::sort
#include <ctime>			//localtime_s
#include <cstdlib>			//abs
#include <cmath>			//abs,std::pow,sqrt,sin,cos,round,floor,ceil
#include <fstream>			//std::ifstream,std::ofstream
#include <iomanip>			//std::setprecision,std::setw,std::setfill
#include <random>			//std::random(C++11)
#include <numeric>			//std::accumulate
#include <functional>		//std::greater
#include <chrono>			//std::chrono(C++11)
#include <bitset>			//std::bitset
#include <queue>			//std::queue

const static double	de_PI	= 3.14159265358979323846;
const static int	de_MOD	= 1000000007;
const static int	de_MAX	= 999999999;

int main(void) {

	//std::ifstream in("123.txt");	std::cin.rdbuf(in.rdbuf());
	//std::ofstream ofs("456.csv");
	//std::chrono::system_clock::time_point t_st = std::chrono::system_clock::now();

	std::vector<int> A;
	int a = 0, b = 0;
	while (std::cin >> a) {
		std::cin >> b;
		A.push_back(std::to_string(a + b).length());
	}
	for (unsigned int i = 0; i < A.size(); i++) {
		std::cout << A[i] << std::endl;
	}

	//std::chrono::system_clock::time_point t_ed = std::chrono::system_clock::now();
	//std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(t_ed - t_st).count() << "ms" << std::endl;

}

C++: #include <iostream>
#include <cstdio>
using namespace std;
int main(void){
	int a=0,b=0,c=0,d=1;
	while (scanf("%d %d",&a,&b)!=EOF){
		c=a+b;
		while (1){
			if (c/10>=1){
				d++;
				c/=10;
			}
			else break;
		}
		cout<<d<<endl;
		d=1;
	}
	return 0;
}

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

int main(){
	int a,b;
	while(cin>>a>>b){
		a=log(a+b)+1;
		cout<<a<<endl;
		}
	return 0;
}

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

int main(){

	int i, j;
	while(cin >> i >> j){

		i += j;
		j = 0;

		while( i > 0, j++, i /=  10);
		cout << j;
	}

	cout << j;
}

C++: #include <vector>
#include <list>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <deque>
#include <algorithm>
#include <utility>
#include <functional>
#include <sstream>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <ctime>
#include <climits>
#include <cassert>
using namespace std;
inline int toInt(string s) {int v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef long long ll;
#define ALL(a) (a).begin(),(a).end()
#define RALL(a) (a).rbegin(),(a).rend()
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define EXIST2(s,e) (find(ALL(s),(e))!=(s).end())
#define FOR(i,a,b) for(int i=(a);i<(b);++i)
#define REP(i,n) FOR(i,0,n)
#define EACH(t,i,c) for(t::iterator i=(c).begin(); i!=(c).end(); ++i)
const double EPS = 1e-10;
const double PI  = acos(-1.0);


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