You are given a positive integer n, written without leading zeroes (for example, the number 04 is incorrect). 

In one operation you can delete any digit of the given integer so that the result remains a positive integer without leading zeros.

Determine the minimum number of operations that you need to consistently apply to the given integer n to make from it the square of some positive integer or report that it is impossible.

An integer x is the square of some positive integer if and only if x=y^2 for some positive integer y.

Input

The first line contains a single integer n (1 ≤ n ≤ 2 ⋅ 10^{9}). The number is given without leading zeroes.

Output

If it is impossible to make the square of some positive integer from n, print -1. In the other case, print the minimal number of operations required to do it.

Examples

Input

8314


Output

2


Input

625


Output

0


Input

333


Output

-1

Note

In the first example we should delete from 8314 the digits 3 and 4. After that 8314 become equals to 81, which is the square of the integer 9.

In the second example the given 625 is the square of the integer 25, so you should not delete anything. 

In the third example it is impossible to make the square from 333, so the answer is -1.

import java.util.*;

import java.io.*;
public class Solution {
	private static final int ArrayList = 0;
	static FastScanner scr=new FastScanner();
	static PrintStream out=new PrintStream(System.out);
	static StringBuilder sb=new StringBuilder();
	
	
	
	
	static class pair{
		int x;int y;
		pair(int x,int y){ 
			this.x=x;this.y=y;
			
		}
	}
	static class triplet{
		int x;
		long y;
		int z;
		triplet(int x,long y,int z){
			this.x=x;
			this.y=y;
			this.z=z;
		}
	}
	static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
	 	String next() {
	 		while (!st.hasMoreTokens())
	 			try {
	 				st=new StringTokenizer(br.readLine());
	 			} catch (IOException e) {
	 				e.printStackTrace();
	 			}
	 			return st.nextToken();
		} long gcd(long a,long b){
			if(b==0) {
				return a;
			}
				
			return gcd(b,a%b);
		}
	 	int[]  sort(int a[]) {
			 
	        int multiplier = 1, len = a.length, max = Integer.MIN_VALUE;
	        int b[] = new int[len];
	        int bucket[];
	        for (int i = 0; i < len; i++) if (max < a[i]) max = a[i];
	        while (max / multiplier > 0) {
	            bucket = new int[10];
	            for (int i = 0; i < len; i++) bucket[(a[i] / multiplier) % 10]++;
	            for (int i = 1; i < 10; i++) bucket[i] += (bucket[i - 1]);
	            for (int i = len - 1; i >= 0; i--) b[--bucket[(a[i] / multiplier) % 10]] = a[i];
	            for (int i = 0; i < len; i++) a[i] = b[i];
	            multiplier *= 10;
	        }
	        return a;
	    }
	 	 long modPow(long base,long exp) {
			if(exp==0) {
				return 1;
			}
			if(exp%2==0) {
				long res=(modPow(base,exp/2));
				return (res*res);
			}
			return (base*modPow(base,exp-1));
		}
		int []reverse(int a[]){
			int b[]=new int[a.length];
			int index=0;
			for(int i=a.length-1;i>=0;i--) {
				b[index]=a[i];
			}
			return b;
		}
		int nextInt() {
			return Integer.parseInt(next());
		}
		int[] readArray(int n) {
			int[] a=new int[n];
			for (int i=0; i<n; i++) a[i]=nextInt();
			return a;
		}
		long[] readLongArray(int n) {
			long  [] a=new long  [n];
			for (int i=0; i<n; i++) a[i]=nextLong();
			return a;
		}
		long nextLong() {
			return Long.parseLong(next());
		}
	}
	
	static void print(Object ele) {
		sb.append(ele).append(" ");
	}
	static void println(Object ele) {
		sb.append(ele).append('\n');
		
	}
	static void println() {
		sb.append('\n');
	}
	static long LCM(long a,long b) {
		return a*b/(scr.gcd(a, b));
	}
//	static long n,m,k,l,q,count,sum,temp,ans;
//	static long []a;
//	static long b[];
//	static  char c[];
//	static char t[];
//	static boolean visited[][];
	static void solve() {
		String s = scr.next();
		
		int n  = s.length();
		
		int len = -1 ;
		for(int mask = 1 ; mask < 1<<n ; mask++) {
			
			String temp = "";
			for(int i = 0 ; i < n ; i++) {
				if((mask & (1<<i)) != 0) {
					temp += s.charAt(i);
				}
			}
			
			long ele  = Long.parseLong(temp);
			int i=0;
			
			String str = "";
			while( i<temp.length() && temp.charAt(i) == '0') {
				i++;
			}
			while(i<temp.length() ) {
				str+=temp.charAt(i);
				i++;
			}
			
			temp = "";
			temp += str;
			long sq = (long)Math.sqrt(ele);
			
			if(sq * sq == ele && sq!=0) {
				
				len = Math.max(temp.length() , len);	
			}
		}
			if(len == -1) {
				sb.append(-1);
				return;
			}
//			out.println(len);
		sb.append(n-len);
	}
	
	static int  MAX=Integer.MAX_VALUE;
	static int  MIN=Integer.MIN_VALUE;
	public static void main(String []args) {
//		int t=scr.nextInt();
//		while(t-->0) {
//			solve();
//		}
		solve();
		out.println(sb);
	}
}
	 