Go: package main

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

var sc = bufio.NewScanner(os.Stdin)

func main() {
	for sc.Scan() {
		s := strings.Split(sc.Text(), " ")
		a, _ := strconv.Atoi(s[0])
		b, _ := strconv.Atoi(s[1])
		fmt.Println(len(fmt.Sprint(a + b)))
	}
}

C++: /* 2012-07-07T08:23:31 */
#define DEBUG_ON
#define CONDITION true
using namespace std;/*{{{*/

#include <algorithm>
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <sys/time.h>
#include <vector>

#define INF (1e9)
static const double PI (3.14159265358979323846);
static const double EPS (1e-10);

typedef long long int ll;
typedef unsigned long long int ull;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<string> vs;
typedef pair<int, int> pii;
typedef complex<double> P;

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();}
inline double now(){ struct timeval tv; gettimeofday(&tv, NULL); return ((double)(tv.tv_sec) + (double)(tv.tv_usec) * 1e-6); }

#define FOR(i, b, e) for (typeof(b) i = (b); assert((i) <= (e)), i != (e); ++i)
#define REP(i, n) FOR(i, 0, n)

#define IFC(c) if(c) continue;
#define IFB(c) if(c) break;
#define IFR(c, r) if(c) return r;

#define OPOVER(_op, _type) inline bool operator _op (const _type &t) const

#define arrsz(a) ( sizeof(a) / sizeof(a[0]) )

#define F first
#define S second
#define MP(a, b) make_pair(a, b)

#define SZ(a) ((ll)a.size())
#define PB(e) push_back(e)
#define SORT(v) sort((v).begin(), (v).end())
#define RSORT(v) sort((v).rbegin(), (v).rend())

#define ALL(a) (a).begin(), (a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define EACH(c,it) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it)
#define EXIST(s,e) ((s).find(e)!=(s).end())

#define BIT(n) (1ULL << (n))
#define BITOF(n, m) ((n) >> (m) & 1)

#define RANGE(a, b, c) ((a) <= (b) && (b) <= (c))

#ifdef DEBUG_ON
#define dprt(fmt, ...) if (CONDITION) fprintf(stderr, fmt, __VA_ARGS__)
#define darr(a) if (CONDITION) copy( (a), (a) + arrsz(a), ostream_iterator<int>(cerr, " ") ); cerr << endl
#define darr_range(a, f, t) if (CONDITION) copy( (a) + (f), (a) + (t), ostream_iterator<int>(cerr, " ") ); cerr << endl
#define dvec(v) if (CONDITION) copy( ALL(v), ostream_iterator<int>(cerr, " ") ); cerr << endl
#define darr2(a, n, m) if (CONDITION) FOR(i, 0, (n)){ darr_range( (a)[i], 0, (m) ); }
#define dvec2(v) if (CONDITION) FOR(i, 0, SZ(v)){ dvec( (v)[i] ); }
#define WAIT() if (CONDITION) { string _wait_; cerr << "(hit return to continue)" << endl; getline(cin, _wait_); }
#else
#define cerr if(0) cerr
#define dprt(fmt, ...)
#define darr(a)
#define darr_range(a, f, t)
#define dvec(v)
#define darr2(a, n, m)
#define dvec2(v)
#define WAIT()
#endif
/*}}}*/

int main(int argc, char const* argv[])
{
	int a, b;
	while (cin >> a >> b) {
		cout << toString(a + b).length() << endl;
	}
	return 0;
}

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

using namespace std;

int main(void){

 int a,b;
 int ans;

 while(1){
  cin >> a >> b;

  if(a==0 && b==0)
   break;

  ans=log10(a+b)+1;
  cout << ans << endl;
 }
}

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

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

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

C++: main(a,b,i=1,x){for(scanf("%d%d",&a,&b),x=a+b;x=x/10;i++);printf("%d\n",i);}

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

using namespace std;

int main()
{
	for(;;){
		int a, b, i;
		
		scanf("%d%d",&a,&b);
		
		if(a == EOF || b == EOF){
			break;
		}
		
		a += b;
		
		for(i = 1;; i++){
			if(a < 10){
				break;
			}
			a = a / 10;
		}
		
		cout << i << endl;
	}
}

C++: #include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
int main()
{
    int num1,num2;
    int count =0;
   
  
                          cin>>num1;
                          cin>>num2;
                          int sum = num1+num2;
                          while(sum>9)
            {
              count =count+1;
               sum = sum/10;
              
            }
            cout << count+1 <<endl;
            return 0;
            
    
}

C++: #include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <utility>
#include <ctime>
#define INF 999999999
#define mod 1000000007

#define rep(i,n) for(int i=0;i<int(n);i++)
#define rrep(i,n) for(int i=(n);i>=0;i--)
#define REP(i,a,b) for(int i=(a);i<int(b);i++)
#define all(x) (x).begin(),x.end()
#define pb push_back
#define MOD(x) (x%(mod))
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int,int> pi;

bool debug=false;
/*---------------------------------------------------*/

int main(){
    int a,b,sum,keta;
    while(cin>>a>>b){
        sum=a+b;
        for(keta=1;;keta++){
            sum=sum/10;
            if(sum==0)break;
        }
        cout<<keta<<endl;
    }
    return 0;
}

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

int main()
{
	double a,b;
	while(std::cin>>a>>b)
	{
		int digit=(int)std::log10(a+b);
		std::cout << digit+1 << std::endl;
	}
	return 0;
}

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

C++: #include<iostream>
#include<sstream>
#include<cmath>
using namespace std;
   
int main(){
string s;
int a,b,c;
while (getline(cin, s ))
{
int SpaceInd = s.find_first_of(" ");
 
std::istringstream iss1(s.substr(0,SpaceInd));
iss1 >> a;
   
std::istringstream iss2(s.substr(SpaceInd+1));
iss2 >> b;
cout<<(int)log10(a+b)+1<<endl;
}
return 0;
}

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

int main()
{
    int a, b;
    int l;

    while (std::cin >> a >> b)
    {
        l = log10(a + b);
        std::cout << l + 1 << std::endl;
    }

    return 0;
}

C++: #include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include <functional>
using namespace std;

#define rep(p,q) for(int i = p; i < q;i++)

//2
int main(void) {
	int a, b;
	while (cin >> a >> b) {
		string sumLen = to_string(a + b);
		cout << sumLen.length() << endl;
	}
}

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

int main() {
	int a, b;
	while (cin >> a >> b;) {
		if (a + b < 10)
			cout << "1" << endl;
		else if (a + b < 100)
			cout << "2" << endl;
		else if (a + b < 1000)
			cout << "3" << endl;
		else if (a + b < 10000)
			cout << "4" << endl;
		else if (a + b < 100000)
			cout << "5" << endl;
		else if (a + b < 1000000)
			cout << "6" << endl;
		else if (a + b < 10000000)
			cout << "7" << endl;
		else if (a + b < 100000000)
			cout << "8" << endl;
		else if (a + b < 10000000000)
			cout << "9" << endl;
	}
	return 0;
}

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

int main() {
/*	int a[3];
	cin >> a[0] ;
	a[1] = 3;
	a[2] = a[0] * 10;

	cout << a[0] <<" " << a[1] <<" "<< a[2] << endl;
	
	for (int i = 0; i < 3; i++) {
		cout << a[i] << endl;
	}


	sort(a,a+5);
*//*
	int a[10];
	for (int i = 0; i < 10; i++) {
		cin >> a[i];
	}
	
	sort(a,a+10,greater<int>());

	for (int i = 0; i < 3; i++) {
		cout << a[i]<<endl;
	}
*/
	int ans = 0;
	int a, b,c;
	while(cin>>a>>b) {
		ans = 0;
		c = a + b;

		if ( c==0   ) {
			ans = 1;
		}
		else{
			while (c > 0) {
				c /= 10;
				ans++;
			}
		}
		cout << ans << endl;
	}
	return 0;;
}