import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        // 入力
        MyScanner sc = new MyScanner(System.in);
        long N = Long.parseLong(sc.nextString());

        // 初期化
        int min_len = String.valueOf(N).length();

        // 主処理
        // 1からNまで繰り返す
        for (long A = 1; A*A <= N; A++) {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        }

        // 出力
        System.out.println(min_len);
    }

    // 10進表記における、Aの桁数とBの桁数のうち大きい方を返却
    public static int F(long A, long B) {
        int A_len = Long.toString(A).length();
        int B_len = Long.toString(B).length();
        return Math.max(A_len, B_len);
    }

    static class MyScanner {
        BufferedReader br;
        // 標準入力から入力値を取得
        MyScanner(InputStream in) {
            br = new BufferedReader(new InputStreamReader(in));
        }
        // 標準入力を文字列で取得
        public String nextString() throws IOException {
            return br.readLine();
        }
        // 標準入力を文字列の配列で取得
        public String[] nextStringArray() throws IOException {
            return nextString().split(" ");
        }
        // 標準入力を数値で取得
        public int nextInt() throws IOException {
            return Integer.parseInt(nextString());
        }
        // 標準入力を数値の配列で取得
        public int[] nextIntArray() throws IOException {
            String[] strArr = nextStringArray();
            int[] intArr = new int[strArr.length];
            for(int i = 0; i < strArr.length; i++) {
                intArr[i] = Integer.parseInt(strArr[i]);
            }
            return intArr;
        }
    }

} import java.io.*; io.* java public class Main {
    public static void main(String[] args) throws Exception {
        // 入力
        MyScanner sc = new MyScanner(System.in);
        long N = Long.parseLong(sc.nextString());

        // 初期化
        int min_len = String.valueOf(N).length();

        // 主処理
        // 1からNまで繰り返す
        for (long A = 1; A*A <= N; A++) {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        }

        // 出力
        System.out.println(min_len);
    }

    // 10進表記における、Aの桁数とBの桁数のうち大きい方を返却
    public static int F(long A, long B) {
        int A_len = Long.toString(A).length();
        int B_len = Long.toString(B).length();
        return Math.max(A_len, B_len);
    }

    static class MyScanner {
        BufferedReader br;
        // 標準入力から入力値を取得
        MyScanner(InputStream in) {
            br = new BufferedReader(new InputStreamReader(in));
        }
        // 標準入力を文字列で取得
        public String nextString() throws IOException {
            return br.readLine();
        }
        // 標準入力を文字列の配列で取得
        public String[] nextStringArray() throws IOException {
            return nextString().split(" ");
        }
        // 標準入力を数値で取得
        public int nextInt() throws IOException {
            return Integer.parseInt(nextString());
        }
        // 標準入力を数値の配列で取得
        public int[] nextIntArray() throws IOException {
            String[] strArr = nextStringArray();
            int[] intArr = new int[strArr.length];
            for(int i = 0; i < strArr.length; i++) {
                intArr[i] = Integer.parseInt(strArr[i]);
            }
            return intArr;
        }
    }

} Main public static void main(String[] args) throws Exception {
        // 入力
        MyScanner sc = new MyScanner(System.in);
        long N = Long.parseLong(sc.nextString());

        // 初期化
        int min_len = String.valueOf(N).length();

        // 主処理
        // 1からNまで繰り返す
        for (long A = 1; A*A <= N; A++) {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        }

        // 出力
        System.out.println(min_len);
    } main {
        // 入力
        MyScanner sc = new MyScanner(System.in);
        long N = Long.parseLong(sc.nextString());

        // 初期化
        int min_len = String.valueOf(N).length();

        // 主処理
        // 1からNまで繰り返す
        for (long A = 1; A*A <= N; A++) {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        }

        // 出力
        System.out.println(min_len);
    } MyScanner sc = new MyScanner(System.in); sc new MyScanner(System.in) long N = Long.parseLong(sc.nextString()); N Long.parseLong(sc.nextString()) Long.parseLong Long sc.nextString() sc.nextString sc int min_len = String.valueOf(N).length(); min_len String.valueOf(N).length() String.valueOf(N).length String.valueOf(N) String.valueOf String N for (long A = 1; A*A <= N; A++) {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        } long A = 1; long A = 1; A 1 A*A <= N A*A A A N A++ A++ A {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        } {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        } long amari = N % A; amari N % A N A if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            } amari == 0 amari 0 {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            } long B = N / A; B N / A N A int len = F(A, B); len F(A, B) F A B min_len = Math.min(min_len, len) min_len Math.min(min_len, len) Math.min Math min_len len System.out.println(min_len) System.out.println System.out System System.out min_len String[] args args // 10進表記における、Aの桁数とBの桁数のうち大きい方を返却
    public static int F(long A, long B) {
        int A_len = Long.toString(A).length();
        int B_len = Long.toString(B).length();
        return Math.max(A_len, B_len);
    } F {
        int A_len = Long.toString(A).length();
        int B_len = Long.toString(B).length();
        return Math.max(A_len, B_len);
    } int A_len = Long.toString(A).length(); A_len Long.toString(A).length() Long.toString(A).length Long.toString(A) Long.toString Long A int B_len = Long.toString(B).length(); B_len Long.toString(B).length() Long.toString(B).length Long.toString(B) Long.toString Long B return Math.max(A_len, B_len); Math.max(A_len, B_len) Math.max Math A_len B_len long A A long B B static class MyScanner {
        BufferedReader br;
        // 標準入力から入力値を取得
        MyScanner(InputStream in) {
            br = new BufferedReader(new InputStreamReader(in));
        }
        // 標準入力を文字列で取得
        public String nextString() throws IOException {
            return br.readLine();
        }
        // 標準入力を文字列の配列で取得
        public String[] nextStringArray() throws IOException {
            return nextString().split(" ");
        }
        // 標準入力を数値で取得
        public int nextInt() throws IOException {
            return Integer.parseInt(nextString());
        }
        // 標準入力を数値の配列で取得
        public int[] nextIntArray() throws IOException {
            String[] strArr = nextStringArray();
            int[] intArr = new int[strArr.length];
            for(int i = 0; i < strArr.length; i++) {
                intArr[i] = Integer.parseInt(strArr[i]);
            }
            return intArr;
        }
    } MyScanner BufferedReader br; br // 標準入力から入力値を取得
        MyScanner(InputStream in) {
            br = new BufferedReader(new InputStreamReader(in));
        } MyScanner {
            br = new BufferedReader(new InputStreamReader(in));
        } br = new BufferedReader(new InputStreamReader(in)) br new BufferedReader(new InputStreamReader(in)) InputStream in in // 標準入力を文字列で取得
        public String nextString() throws IOException {
            return br.readLine();
        } nextString {
            return br.readLine();
        } return br.readLine(); br.readLine() br.readLine br // 標準入力を文字列の配列で取得
        public String[] nextStringArray() throws IOException {
            return nextString().split(" ");
        } nextStringArray {
            return nextString().split(" ");
        } return nextString().split(" "); nextString().split(" ") nextString().split nextString() nextString " " // 標準入力を数値で取得
        public int nextInt() throws IOException {
            return Integer.parseInt(nextString());
        } nextInt {
            return Integer.parseInt(nextString());
        } return Integer.parseInt(nextString()); Integer.parseInt(nextString()) Integer.parseInt Integer nextString() nextString // 標準入力を数値の配列で取得
        public int[] nextIntArray() throws IOException {
            String[] strArr = nextStringArray();
            int[] intArr = new int[strArr.length];
            for(int i = 0; i < strArr.length; i++) {
                intArr[i] = Integer.parseInt(strArr[i]);
            }
            return intArr;
        } nextIntArray {
            String[] strArr = nextStringArray();
            int[] intArr = new int[strArr.length];
            for(int i = 0; i < strArr.length; i++) {
                intArr[i] = Integer.parseInt(strArr[i]);
            }
            return intArr;
        } String[] strArr = nextStringArray(); strArr nextStringArray() nextStringArray int[] intArr = new int[strArr.length]; intArr new int[strArr.length] strArr.length strArr strArr.length for(int i = 0; i < strArr.length; i++) {
                intArr[i] = Integer.parseInt(strArr[i]);
            } int i = 0; int i = 0; i 0 i < strArr.length i strArr.length strArr strArr.length i++ i++ i {
                intArr[i] = Integer.parseInt(strArr[i]);
            } {
                intArr[i] = Integer.parseInt(strArr[i]);
            } intArr[i] = Integer.parseInt(strArr[i]) intArr[i] intArr i Integer.parseInt(strArr[i]) Integer.parseInt Integer strArr[i] strArr i return intArr; intArr public class Main {
    public static void main(String[] args) throws Exception {
        // 入力
        MyScanner sc = new MyScanner(System.in);
        long N = Long.parseLong(sc.nextString());

        // 初期化
        int min_len = String.valueOf(N).length();

        // 主処理
        // 1からNまで繰り返す
        for (long A = 1; A*A <= N; A++) {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        }

        // 出力
        System.out.println(min_len);
    }

    // 10進表記における、Aの桁数とBの桁数のうち大きい方を返却
    public static int F(long A, long B) {
        int A_len = Long.toString(A).length();
        int B_len = Long.toString(B).length();
        return Math.max(A_len, B_len);
    }

    static class MyScanner {
        BufferedReader br;
        // 標準入力から入力値を取得
        MyScanner(InputStream in) {
            br = new BufferedReader(new InputStreamReader(in));
        }
        // 標準入力を文字列で取得
        public String nextString() throws IOException {
            return br.readLine();
        }
        // 標準入力を文字列の配列で取得
        public String[] nextStringArray() throws IOException {
            return nextString().split(" ");
        }
        // 標準入力を数値で取得
        public int nextInt() throws IOException {
            return Integer.parseInt(nextString());
        }
        // 標準入力を数値の配列で取得
        public int[] nextIntArray() throws IOException {
            String[] strArr = nextStringArray();
            int[] intArr = new int[strArr.length];
            for(int i = 0; i < strArr.length; i++) {
                intArr[i] = Integer.parseInt(strArr[i]);
            }
            return intArr;
        }
    }

} public class Main {
    public static void main(String[] args) throws Exception {
        // 入力
        MyScanner sc = new MyScanner(System.in);
        long N = Long.parseLong(sc.nextString());

        // 初期化
        int min_len = String.valueOf(N).length();

        // 主処理
        // 1からNまで繰り返す
        for (long A = 1; A*A <= N; A++) {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        }

        // 出力
        System.out.println(min_len);
    }

    // 10進表記における、Aの桁数とBの桁数のうち大きい方を返却
    public static int F(long A, long B) {
        int A_len = Long.toString(A).length();
        int B_len = Long.toString(B).length();
        return Math.max(A_len, B_len);
    }

    static class MyScanner {
        BufferedReader br;
        // 標準入力から入力値を取得
        MyScanner(InputStream in) {
            br = new BufferedReader(new InputStreamReader(in));
        }
        // 標準入力を文字列で取得
        public String nextString() throws IOException {
            return br.readLine();
        }
        // 標準入力を文字列の配列で取得
        public String[] nextStringArray() throws IOException {
            return nextString().split(" ");
        }
        // 標準入力を数値で取得
        public int nextInt() throws IOException {
            return Integer.parseInt(nextString());
        }
        // 標準入力を数値の配列で取得
        public int[] nextIntArray() throws IOException {
            String[] strArr = nextStringArray();
            int[] intArr = new int[strArr.length];
            for(int i = 0; i < strArr.length; i++) {
                intArr[i] = Integer.parseInt(strArr[i]);
            }
            return intArr;
        }
    }

} Main
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        // 入力
        MyScanner sc = new MyScanner(System.in);
        long N = Long.parseLong(sc.nextString());

        // 初期化
        int min_len = String.valueOf(N).length();

        // 主処理
        // 1からNまで繰り返す
        for (long A = 1; A*A <= N; A++) {
            // N を A で割った余りが0なら桁数を求める
            long amari = N % A;
            if (amari == 0) {
                long B = N / A;
                int len = F(A, B);
                // 桁数が最小かどうかを判定する
                min_len = Math.min(min_len, len);
                // System.out.println(String.format("A=%s, B=%s, len=%s, min_len=%s", A, B, len, min_len));
            }

        }

        // 出力
        System.out.println(min_len);
    }

    // 10進表記における、Aの桁数とBの桁数のうち大きい方を返却
    public static int F(long A, long B) {
        int A_len = Long.toString(A).length();
        int B_len = Long.toString(B).length();
        return Math.max(A_len, B_len);
    }

    static class MyScanner {
        BufferedReader br;
        // 標準入力から入力値を取得
        MyScanner(InputStream in) {
            br = new BufferedReader(new InputStreamReader(in));
        }
        // 標準入力を文字列で取得
        public String nextString() throws IOException {
            return br.readLine();
        }
        // 標準入力を文字列の配列で取得
        public String[] nextStringArray() throws IOException {
            return nextString().split(" ");
        }
        // 標準入力を数値で取得
        public int nextInt() throws IOException {
            return Integer.parseInt(nextString());
        }
        // 標準入力を数値の配列で取得
        public int[] nextIntArray() throws IOException {
            String[] strArr = nextStringArray();
            int[] intArr = new int[strArr.length];
            for(int i = 0; i < strArr.length; i++) {
                intArr[i] = Integer.parseInt(strArr[i]);
            }
            return intArr;
        }
    }

}
