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 Ruby (2.3.3) (judge verdict: Accepted)

=begin
－－－－－－－－－－－－－－
  n = 入力値
  A = n % i == 0 の時の i
  B = n % i == 0 の時の n / i の返り値
  max = AとBの桁数の大きい方
  ans = 最小桁数
－－－－－－－－－－－－－－
  1: 桁数をカウントするメソッド cnt_digits を作成
    1:num < 0 になるまでループ
      1.1: n / 10
      1.2: ループ回数をカウント
    2: ループ回数を返す
  2: n の桁数を ans に代入
  3: 1 ~ n をループ (i) (* n^10 のためループが間に合わない。そのため i*i が n を超えた時点で終了する)
    3.1: n % i == 0 場合
      3.1.1: B に n / i を代入
      3.1.2: A と B の桁数のうち大きい方を max に代入
      3.1.3: ans > max の場合、 ans に maxを代入
  4: ans を出力
=end

def cnt_digits(num)
  cnt = 0;
  while num > 0
    num /= 10;
    cnt += 1;
  end
  return cnt;
end

N = gets.to_i;
ans = cnt_digits(N);
i = 1;
a = 0;
b = 0;

while i*i <= N
  if N % i != 0
    i += 1;
    next
  end

  a = i;
  b = N / i;

  max = [cnt_digits(a), cnt_digits(b)].max;
  ans = max if ans > max;

  i += 1;
end
  
puts ans;