Problem:
Score : 300 points

Problem Statement

You are given an integer N.

For two positive integers A and B, we will define F(A,B) as the larger of the following: the number of digits in the decimal notation of A, and the number of digits in the decimal notation of B.

For example, F(3,11) = 2 since 3 has one digit and 11 has two digits.

Find the minimum value of F(A,B) as (A,B) ranges over all pairs of positive integers such that N = A \times B.

Constraints

1 \leq N \leq 10^{10}

N is an integer.

Input

The input is given from Standard Input in the following format:

N

Output

Print the minimum value of F(A,B) as (A,B) ranges over all pairs of positive integers such that N = A \times B.

Sample Input 1

10000

Sample Output 1

3

F(A,B) has a minimum value of 3 at (A,B)=(100,100).

Sample Input 2

1000003

Sample Output 2

7

There are two pairs (A,B) that satisfy the condition: (1,1000003) and (1000003,1). For these pairs, F(1,1000003)=F(1000003,1)=7.

Sample Input 3

9876543210

Sample Output 3

6

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include<iostream>
#include<vector>

using namespace std;

int F(int A, int B) {
    int digitA = 0;
    int digitB = 0;

    while(A != 0){
        A /= 10;
        digitA++;
    }

    while(B != 0){
        B /= 10;
        digitB++;
    }

    return digitA > digitB ? digitA : digitB;
}

int main() {
    int N;
    cin >> N;

    vector<int> n;

    int a = 2;
    while (N >= a * a) {
        // a で割り切れたら、a は素因数
        // そして、割られる数を a で割る
        // a で割り切れなかったら、 a を 1 増加させる
        if (N % a == 0) {
            n.push_back(a);
            N /= a;
        } else {
            a++;
        }
    }
    // 最後に残った n は素因数
    n.push_back(N);

    int A = 1, B = 1;

    for(int i = 0; i < n.size(); i++) {
        if(A < B) {
            A *= n[i];
        } else {
            B *= n[i];
        }
    }

    int ans = F(A, B);

    cout << ans << endl;

    return 0;
}