import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
	public static void main(String[]args) {
		try(Scanner scan = new Scanner(System.in)){
			
			long N = scan.nextLong();
			int min = Integer.MAX_VALUE;
			for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			}
			
			System.out.println(min);
			
			
			
			
		}
		
		
	}
	
	
	private static ArrayList<Long> enum_div(long n){//数字１〜ｎまでの約数を全部Allaylistに詰め込むメソッド
		ArrayList<Long> ret = new ArrayList<Long>();
		for(long i = 1;i*i<=n;i++) {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		}
		
		//ただここまでだと格納した約数はソートされてない
		
		Collections.sort(ret);//int型、Sting型くらいの格納した奴ならコレクションクラスのソートが使える。
		//ソートしてからcollections.reverseつかえば降順にもできる
		return ret;
		
		
		
	}
		

} import java.util.ArrayList; ArrayList java.util import java.util.Collections; Collections java.util import java.util.Scanner; Scanner java.util public class Main {
	public static void main(String[]args) {
		try(Scanner scan = new Scanner(System.in)){
			
			long N = scan.nextLong();
			int min = Integer.MAX_VALUE;
			for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			}
			
			System.out.println(min);
			
			
			
			
		}
		
		
	}
	
	
	private static ArrayList<Long> enum_div(long n){//数字１〜ｎまでの約数を全部Allaylistに詰め込むメソッド
		ArrayList<Long> ret = new ArrayList<Long>();
		for(long i = 1;i*i<=n;i++) {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		}
		
		//ただここまでだと格納した約数はソートされてない
		
		Collections.sort(ret);//int型、Sting型くらいの格納した奴ならコレクションクラスのソートが使える。
		//ソートしてからcollections.reverseつかえば降順にもできる
		return ret;
		
		
		
	}
		

} Main public static void main(String[]args) {
		try(Scanner scan = new Scanner(System.in)){
			
			long N = scan.nextLong();
			int min = Integer.MAX_VALUE;
			for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			}
			
			System.out.println(min);
			
			
			
			
		}
		
		
	} main {
		try(Scanner scan = new Scanner(System.in)){
			
			long N = scan.nextLong();
			int min = Integer.MAX_VALUE;
			for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			}
			
			System.out.println(min);
			
			
			
			
		}
		
		
	} try(Scanner scan = new Scanner(System.in)){
			
			long N = scan.nextLong();
			int min = Integer.MAX_VALUE;
			for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			}
			
			System.out.println(min);
			
			
			
			
		} {
			
			long N = scan.nextLong();
			int min = Integer.MAX_VALUE;
			for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			}
			
			System.out.println(min);
			
			
			
			
		} Scanner scan = new Scanner(System.in) Scanner scan = new Scanner(System.in) new Scanner(System.in) long N = scan.nextLong(); N scan.nextLong() scan.nextLong scan int min = Integer.MAX_VALUE; min Integer.MAX_VALUE Integer Integer.MAX_VALUE for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			} Long key enum_div(N) enum_div N {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			} {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			} String A = String.valueOf(key); A String.valueOf(key) String.valueOf String key String B= String.valueOf(N/key); B String.valueOf(N/key) String.valueOf String N/key N key if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length()); min>Math.max(A.length(), B.length()) min Math.max(A.length(), B.length()) Math.max Math A.length() A.length A B.length() B.length B min=Math.max(A.length(), B.length()) min Math.max(A.length(), B.length()) Math.max Math A.length() A.length A B.length() B.length B System.out.println(min) System.out.println System.out System System.out min String[]args args private static ArrayList<Long> enum_div(long n){//数字１〜ｎまでの約数を全部Allaylistに詰め込むメソッド
		ArrayList<Long> ret = new ArrayList<Long>();
		for(long i = 1;i*i<=n;i++) {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		}
		
		//ただここまでだと格納した約数はソートされてない
		
		Collections.sort(ret);//int型、Sting型くらいの格納した奴ならコレクションクラスのソートが使える。
		//ソートしてからcollections.reverseつかえば降順にもできる
		return ret;
		
		
		
	} enum_div {//数字１〜ｎまでの約数を全部Allaylistに詰め込むメソッド
		ArrayList<Long> ret = new ArrayList<Long>();
		for(long i = 1;i*i<=n;i++) {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		}
		
		//ただここまでだと格納した約数はソートされてない
		
		Collections.sort(ret);//int型、Sting型くらいの格納した奴ならコレクションクラスのソートが使える。
		//ソートしてからcollections.reverseつかえば降順にもできる
		return ret;
		
		
		
	} ArrayList<Long> ret = new ArrayList<Long>(); ret new ArrayList<Long>() for(long i = 1;i*i<=n;i++) {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		} long i = 1; long i = 1; i 1 i*i<=n i*i i i n i++ i++ i {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		} {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		} if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			} n%i==0 n%i n i 0 {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			} ret.add(i) ret.add ret i if(i*i!=n){
					ret.add(n/i);
				} i*i!=n i*i i i n {
					ret.add(n/i);
				} ret.add(n/i) ret.add ret n/i n i Collections.sort(ret) Collections.sort Collections ret return ret; ret long n n public class Main {
	public static void main(String[]args) {
		try(Scanner scan = new Scanner(System.in)){
			
			long N = scan.nextLong();
			int min = Integer.MAX_VALUE;
			for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			}
			
			System.out.println(min);
			
			
			
			
		}
		
		
	}
	
	
	private static ArrayList<Long> enum_div(long n){//数字１〜ｎまでの約数を全部Allaylistに詰め込むメソッド
		ArrayList<Long> ret = new ArrayList<Long>();
		for(long i = 1;i*i<=n;i++) {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		}
		
		//ただここまでだと格納した約数はソートされてない
		
		Collections.sort(ret);//int型、Sting型くらいの格納した奴ならコレクションクラスのソートが使える。
		//ソートしてからcollections.reverseつかえば降順にもできる
		return ret;
		
		
		
	}
		

} public class Main {
	public static void main(String[]args) {
		try(Scanner scan = new Scanner(System.in)){
			
			long N = scan.nextLong();
			int min = Integer.MAX_VALUE;
			for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			}
			
			System.out.println(min);
			
			
			
			
		}
		
		
	}
	
	
	private static ArrayList<Long> enum_div(long n){//数字１〜ｎまでの約数を全部Allaylistに詰め込むメソッド
		ArrayList<Long> ret = new ArrayList<Long>();
		for(long i = 1;i*i<=n;i++) {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		}
		
		//ただここまでだと格納した約数はソートされてない
		
		Collections.sort(ret);//int型、Sting型くらいの格納した奴ならコレクションクラスのソートが使える。
		//ソートしてからcollections.reverseつかえば降順にもできる
		return ret;
		
		
		
	}
		

} Main
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Main {
	public static void main(String[]args) {
		try(Scanner scan = new Scanner(System.in)){
			
			long N = scan.nextLong();
			int min = Integer.MAX_VALUE;
			for(Long key:enum_div(N)) {
				String A = String.valueOf(key);
				String B= String.valueOf(N/key);
				if(min>Math.max(A.length(), B.length()))
					min=Math.max(A.length(), B.length());
				
				
			}
			
			System.out.println(min);
			
			
			
			
		}
		
		
	}
	
	
	private static ArrayList<Long> enum_div(long n){//数字１〜ｎまでの約数を全部Allaylistに詰め込むメソッド
		ArrayList<Long> ret = new ArrayList<Long>();
		for(long i = 1;i*i<=n;i++) {
			if(n%i==0) {
				ret.add(i);
				if(i*i!=n){
					ret.add(n/i);
				}
			}
		}
		
		//ただここまでだと格納した約数はソートされてない
		
		Collections.sort(ret);//int型、Sting型くらいの格納した奴ならコレクションクラスのソートが使える。
		//ソートしてからcollections.reverseつかえば降順にもできる
		return ret;
		
		
		
	}
		

}
