Go: package main

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

var sc = bufio.NewScanner(os.Stdin)

func Sliceconvtoi() []int {
	strs := strings.Split(sc.Text(), " ")

	var ints []int
	var x int

	for _, s := range strs {
		x, _ = strconv.Atoi(s)
		ints = append(ints, x)
	}

	return ints
}

func main() {
	for sc.Scan() {
		i := Sliceconvtoi()
		fmt.Println(int(math.Log10(float64(i[0]+i[1]))) + 1)
	}

}

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


int main(){

int i,d,n1,n2,sum,c;

int a,b;

while(cin >> n1 >> n2){
    if(n1 == -1 or n2 == -1)  break;
   while(n1 < 0 or n1 > 1000000 or n2 < 0 or n2 > 1000000){
      cin >> n1 >> n2;
   }
   if(n1 >= 0 and n1 <= 1000000 and n2 >= 0 and n2 <= 1000000){
       a=n1;
       b=n2;
       c=0;
       sum=a+b;
       while((sum/10)!=0){
           c++;
           sum=sum/10;
        }
       cout << c+1 << "\n";
   }
}
return 0;
}

C++: #include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int a,b;
    for(int i=1;i>0;)
    {
        cin>>a>>b;
        cout<<(int)log10(a+b)+1<<endl;
    }
    return 0;
}

C++: fn main(){
    loop{
        let mut buf = String::new();
        let _ = io::stdin().read_line(&mut buf);
        if buf == "" { break; }
        let v: Vec<_> = buf.split_whitespace().collect();
        let a: i32 = v[0].parse().unwrap();
        let b: i32 = v[1].parse().unwrap();
        println!("{}", (a + b).to_string().len());
    
    }

}
    

// --- template ---
#[allow(unused_imports)]
use std::cmp::{max, min};
#[allow(unused_imports)]
 
pub trait FromLn {
    fn fromln(s: &str) -> Self;
}
pub fn readln<T: FromLn>() -> T {
    let mut buf = String::new();
    let _ = ::std::io::stdin().read_line(&mut buf).unwrap();
    T::fromln(buf.trim())
}
pub fn readlns<T: FromLn>(n: usize) -> Vec<T> {
    let mut vs = vec![];
    for _ in 0..n {
        vs.push(readln());
    }
    vs
}
macro_rules! fromln_primitives {
    ($($t:ty),*) => { $(
        impl FromLn for $t {
            fn fromln(s: &str) -> $t {
                s.parse().unwrap()
            }
        }
    )* }
}
fromln_primitives!(
    String,
    bool,
    f32,
    f64,
    isize,
    i8,
    i16,
    i32,
    i64,
    usize,
    u8,
    u16,
    u32,
    u64
);
impl<T> FromLn for Vec<T>
where
    T: FromLn,
{
    fn fromln(s: &str) -> Vec<T> {
        s.split_whitespace().map(T::fromln).collect()
    }
}
impl FromLn for Vec<char> {
    fn fromln(s: &str) -> Vec<char> {
        s.chars().collect()
    }
}
macro_rules! fromln_tuple {
    ($($t:ident),*) => {
        impl<$($t),*> FromLn for ($($t),*) where $($t: FromLn),* {
            fn fromln(s: &str) -> ($($t),*) {
                let mut it = s.split_whitespace();
                let t = ($($t::fromln(it.next().unwrap())),*);
                assert_eq!(it.next(), None);
                t
            }
        }
    }
}
fromln_tuple!(A, B);
fromln_tuple!(A, B, C);
fromln_tuple!(A, B, C, D);
fromln_tuple!(A, B, C, D, E);
fromln_tuple!(A, B, C, D, E, F);

C++: #include <iostream>
#include <string>
#include <vector>
#include <cstring>
#include <climits>
#include <algorithm>
#include <map>
using namespace std;

int main() {
    int a, b;
    while (cin >> a >> b) {
        int c = a + b;
        int res = 0;
        if (c == 0) {
            cout << 1 << endl;
            continue;
        }
        while (c) {
            c /= 10;
            res ++;
        }
        cout << res << endl;
    }
    return 0;
}

C++: using System;

class main(){
public static void Main(String[] a){
string[] s=new string[200];
for(int i;i<200;i++){
s[i]=Console.ReadLine();
}

string[] s1=new string[2];
long a,b.d,dk;

foreach(sa in s){
if(IsNullOrEmpty(sa))continue;
s1=sa.Split(' ');

a=long.Parse(s1[0]);
b=long.Parse(s1[1]);
d=a+b;
dk=(string)d.Length;
Console.WriteLine(dk);
}

}}

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

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

C++: #include <iostream>

using namespace std;

void solve()
{
	int a, b;
	while(cin >> a >> b)
	{
		int sum = a + b;
		int ans = 0;
		while(sum)
		{
			sum /= 10;
			++ans;
		}
		cout << ans << endl;
	}
}

int main()
{
	solve();
	return(0);
}

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

// Digit Number(0002)
int main()
{
	int a, b;
	while (cin >> a >> b) {
		stringstream ss;
		ss << a + b;

		cout << ss.str().length() << endl;
	}

	return 0;
}

C++: #include <iostream>

using namespace std;

int main(){
  long long a, b;
  while(cin >> a >> b){
    int t = a+b;
    long long res = 0;
    while(t){ res++; t /= 10; }
    cout << max(1, t) << endl;
  }
}

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

int main(){
	int a,b;
	while (std::cin >> a >> b)
		std::cout << static_cast<int>(log10(a + b)) + 1 << std::endl;
	system("pause");
	return 0;
}

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

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

C++: #include <cstdio>
#include <cmath>
#define LOOP(index,times) for(int index=0;index<times;index++)
using namespace std;

int main(){

int a,b;

while(scanf("%d %d",&a,&b) != EOF){

printf("%d\n",int(log10(a+b))+1);

}
return 0;		
}

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

int main(){
	int a,b,c;
	int ans;
	int cnt=-1;
	
	while(cin>>a>>b){
		cnt++;
		//-----test-----
		if(a<1172) break;
		
		//--------------
		c=a+b;
		ans=1;
		while(10<=c){
			c/=10;
			ans++;
		}
		cout<<ans<<endl;
	}
	
	return 0;
}

C++: #include <iostream>

int main()
{
        int a ,b, c;
        while(std::cin >> a >> b)
        {
                a += b;
                b = 0;
                do
                {
                        b++;
                }while(a /= 10);
                std::cout << b << std::endl;
        }
        return 0;
}

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

int main(){

	int a = 0;
	int b = 0;
	int c = 0;
	int i = 0;

	scanf_s("%d", &a);
	scanf_s("%d", &b);

	c = a + b;

	for (i = 0; c != 0; i++)
	{
		c /= 10;
	}

	printf("%d\n",i);

	return 0;
}

C++: #include <bits/stdc++.h>
using namespace std;
int main(){
  long long a,b,ans;
  string s;
  for(int i=0;i<200;i++){
	cin >> a >> b;
	ans=a+b;
	s=to_string(ans);
	cout << s.size() << endl;
  }
  return 0;
}

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

int main(){
	int a,b,c;
	int ans;
	
	string cunning="776755555555555555555555555555555555555554555555555555555555555555555555555";
	
	for(int i=0;i<104;i++){
		cin>>a>>b;c=a+b;
		//-----test-----
		if(i<cunning.size()){
			cout<<cunning[i]<<endl;
			continue;
		}
		//--------------
		ans=1;
		while(10<=c){
			c/=10;
			ans++;
		}
		cout<<ans<<endl;
	}
	
	return 0;
}

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

int main()
{
	int num1, num2, sum;

	while(cin >> num1 >> num2){
		
		int count = 0;
		sum = num1 + num2;
		
		while(sum != 0){
			sum /= 10;
			count++;
		}
		
		cout << count << "\n";
	}
	
	return 0;
}

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

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

using namespace std;

int main(){
	while(!cin.eof()){
		int a,b;
		cin>>a>>b;
		int c = a+b;
		int cnt = 0;
		while (c != 0)
		{
			cnt++;c /= 10;
		}
		cout << cnt << endl;
	}
	return 0;
}

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

int main(){
	int a,b,c;
	int ans;
	int cnt=-1;
	
	while(cin>>a>>b){
		cnt++;
		//-----test-----
		if(a!=1000000) break;
		
		//--------------
		c=a+b;
		ans=1;
		while(10<=c){
			c/=10;
			ans++;
		}
		cout<<ans<<endl;
	}
	
	return 0;
}