import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

/**
 *
 * @author Administrator
 */
public class Main {
    public static int numDigits(long num){
        int res = 0;
        while(num != 0){
            num /= 10;
            res += 1;
        }
        return res;
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
//        boolean[] sieve = new boolean[100001];
//        Arrays.fill(sieve, true);
//        sieve[0] = false;
//        sieve[1] = false;
//        int index = 2;
//        while(index * index <= 100000){
//            if(sieve[index]){
//                for (int i = index * index; i <= 100000; i += index) {
//                    sieve[i] = false;
//                }
//            }
//            index += 1;
//        }
//        ArrayList<Integer> prime = new ArrayList<>();
//        for(int i = 2; i <= 100000; i++){
//            if(sieve[i])
//                prime.add(i);
//        }
        long bound = (int) Math.sqrt(n);
        int res = numDigits(n);
        for(long i = 2; i <= bound; i++){
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        }
        System.out.println(res);
        
    }
} import java.util.ArrayList; ArrayList java.util import java.util.Arrays; Arrays java.util import java.util.Scanner; Scanner java.util public class Main {
    public static int numDigits(long num){
        int res = 0;
        while(num != 0){
            num /= 10;
            res += 1;
        }
        return res;
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
//        boolean[] sieve = new boolean[100001];
//        Arrays.fill(sieve, true);
//        sieve[0] = false;
//        sieve[1] = false;
//        int index = 2;
//        while(index * index <= 100000){
//            if(sieve[index]){
//                for (int i = index * index; i <= 100000; i += index) {
//                    sieve[i] = false;
//                }
//            }
//            index += 1;
//        }
//        ArrayList<Integer> prime = new ArrayList<>();
//        for(int i = 2; i <= 100000; i++){
//            if(sieve[i])
//                prime.add(i);
//        }
        long bound = (int) Math.sqrt(n);
        int res = numDigits(n);
        for(long i = 2; i <= bound; i++){
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        }
        System.out.println(res);
        
    }
} Main public static int numDigits(long num){
        int res = 0;
        while(num != 0){
            num /= 10;
            res += 1;
        }
        return res;
    } numDigits {
        int res = 0;
        while(num != 0){
            num /= 10;
            res += 1;
        }
        return res;
    } int res = 0; res 0 while(num != 0){
            num /= 10;
            res += 1;
        } num != 0 num 0 {
            num /= 10;
            res += 1;
        } num /= 10 num 10 res += 1 res 1 return res; res long num num public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
//        boolean[] sieve = new boolean[100001];
//        Arrays.fill(sieve, true);
//        sieve[0] = false;
//        sieve[1] = false;
//        int index = 2;
//        while(index * index <= 100000){
//            if(sieve[index]){
//                for (int i = index * index; i <= 100000; i += index) {
//                    sieve[i] = false;
//                }
//            }
//            index += 1;
//        }
//        ArrayList<Integer> prime = new ArrayList<>();
//        for(int i = 2; i <= 100000; i++){
//            if(sieve[i])
//                prime.add(i);
//        }
        long bound = (int) Math.sqrt(n);
        int res = numDigits(n);
        for(long i = 2; i <= bound; i++){
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        }
        System.out.println(res);
        
    } main {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
//        boolean[] sieve = new boolean[100001];
//        Arrays.fill(sieve, true);
//        sieve[0] = false;
//        sieve[1] = false;
//        int index = 2;
//        while(index * index <= 100000){
//            if(sieve[index]){
//                for (int i = index * index; i <= 100000; i += index) {
//                    sieve[i] = false;
//                }
//            }
//            index += 1;
//        }
//        ArrayList<Integer> prime = new ArrayList<>();
//        for(int i = 2; i <= 100000; i++){
//            if(sieve[i])
//                prime.add(i);
//        }
        long bound = (int) Math.sqrt(n);
        int res = numDigits(n);
        for(long i = 2; i <= bound; i++){
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        }
        System.out.println(res);
        
    } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) long n = sc.nextLong(); n sc.nextLong() sc.nextLong sc long bound = (int) Math.sqrt(n); bound (int) Math.sqrt(n) Math.sqrt Math n int res = numDigits(n); res numDigits(n) numDigits n for(long i = 2; i <= bound; i++){
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        } long i = 2; long i = 2; i 2 i <= bound i bound i++ i++ i {
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        } {
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        } if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            } n % i == 0 n % i n i 0 {
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            } res = Math.min(res, Math.max(numDigits(i), numDigits(n/i))) res Math.min(res, Math.max(numDigits(i), numDigits(n/i))) Math.min Math res Math.max(numDigits(i), numDigits(n/i)) Math.max Math numDigits(i) numDigits i numDigits(n/i) numDigits n/i n i System.out.println(res) System.out.println System.out System System.out res String[] args args public class Main {
    public static int numDigits(long num){
        int res = 0;
        while(num != 0){
            num /= 10;
            res += 1;
        }
        return res;
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
//        boolean[] sieve = new boolean[100001];
//        Arrays.fill(sieve, true);
//        sieve[0] = false;
//        sieve[1] = false;
//        int index = 2;
//        while(index * index <= 100000){
//            if(sieve[index]){
//                for (int i = index * index; i <= 100000; i += index) {
//                    sieve[i] = false;
//                }
//            }
//            index += 1;
//        }
//        ArrayList<Integer> prime = new ArrayList<>();
//        for(int i = 2; i <= 100000; i++){
//            if(sieve[i])
//                prime.add(i);
//        }
        long bound = (int) Math.sqrt(n);
        int res = numDigits(n);
        for(long i = 2; i <= bound; i++){
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        }
        System.out.println(res);
        
    }
} public class Main {
    public static int numDigits(long num){
        int res = 0;
        while(num != 0){
            num /= 10;
            res += 1;
        }
        return res;
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
//        boolean[] sieve = new boolean[100001];
//        Arrays.fill(sieve, true);
//        sieve[0] = false;
//        sieve[1] = false;
//        int index = 2;
//        while(index * index <= 100000){
//            if(sieve[index]){
//                for (int i = index * index; i <= 100000; i += index) {
//                    sieve[i] = false;
//                }
//            }
//            index += 1;
//        }
//        ArrayList<Integer> prime = new ArrayList<>();
//        for(int i = 2; i <= 100000; i++){
//            if(sieve[i])
//                prime.add(i);
//        }
        long bound = (int) Math.sqrt(n);
        int res = numDigits(n);
        for(long i = 2; i <= bound; i++){
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        }
        System.out.println(res);
        
    }
} Main
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

/**
 *
 * @author Administrator
 */
public class Main {
    public static int numDigits(long num){
        int res = 0;
        while(num != 0){
            num /= 10;
            res += 1;
        }
        return res;
    }
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        long n = sc.nextLong();
//        boolean[] sieve = new boolean[100001];
//        Arrays.fill(sieve, true);
//        sieve[0] = false;
//        sieve[1] = false;
//        int index = 2;
//        while(index * index <= 100000){
//            if(sieve[index]){
//                for (int i = index * index; i <= 100000; i += index) {
//                    sieve[i] = false;
//                }
//            }
//            index += 1;
//        }
//        ArrayList<Integer> prime = new ArrayList<>();
//        for(int i = 2; i <= 100000; i++){
//            if(sieve[i])
//                prime.add(i);
//        }
        long bound = (int) Math.sqrt(n);
        int res = numDigits(n);
        for(long i = 2; i <= bound; i++){
            if(n % i == 0){
                res = Math.min(res, Math.max(numDigits(i), numDigits(n/i)));
            }
        }
        System.out.println(res);
        
    }
}
