8587340257
 9
 81
 27
 1408514752349
 25
 49380563
 266418
 319757451841
 6599669076000
 8
 1000000000000
 30971726
 274875809788
 64
 34280152201
 236
 472670214391
 7938986881993
 44
 4
 388
 2
 802241960524
 3047527844089
 5
 12
 614125
 1716443237161
 48855707
 99
 9999925100701
 5839252225
 3
 50
 1307514188557
 9999926826034
 1468526771489
 2975
 8110708459517
 401120980262
 5138168457911
 1245373417369
 128
 16
 2000000014
 445538663413
 57461344602
 324
 7420738134810

1
9409 2 1
9 1
9 1
72361 2 1
289 1
6 1
289 1
4 1
4 1
4 2 1
4 1
4 2 1
4 1
23020027 1
378028993 1
4 2 1
4 1
0 1
4 2 1
0 1
4 1
25 1
5329 1
2603 1
9 1
0 1
25 1
0 1
10 1
39283 2 1
613783 1
25 2 2 2 1
908209 1
4 1
4 2 1
0 1
6 1
4 1
6
import java.io.*;
import java.util.*;
import java.math.*;

public class Timus {
    static BufferedReader in;
    static PrintWriter out;
    static StringTokenizer st;
    static Random rnd;
    
    static boolean isPrime(long a) {
        if(a <= 1) return false;
        if(a == 2) return true;
        
        if(a <= 1000) {
            for(long i = 2; i * i <= a; i++) {
                if(a % i == 0)
                    return false;
            }
            
            return true;
        } else {
            return BigInteger.valueOf(a).isProbablePrime(32);
        }
    }

    static void solve() throws IOException {
        long q = nextLong();
        
        if(q == 1 || isPrime(q)) {
            out.println(1);
            out.println(0);
            return;
        }
        
        ArrayList<Long> divs = new ArrayList<Long>();
        
        for(long i = 2; i * i <= q; i++) {
            if(q % i == 0) {
                long j = q / i;
                
                if(i != 1 && i != q && isPrime(i))
                divs.add(i);
                
                if(i != j && j != 1 && j != q && isPrime(j))
                    divs.add(j);
            }
        }
        
        Collections.sort(divs);
        
        long result = Long.MAX_VALUE;
        
        search:
        for(long d1 : divs) {
            for(long d2 : divs) {
                long r = d1 * d2;
                
                if(r != 1 && r < q && q % r == 0) {
                    result = r;
                    break search;
                }
            }
        }
        
        if(result == Long.MAX_VALUE) {
            out.println(2);
        } else {
            out.println(1);
            out.println(result);
        }
    }

    public static void main(String[] args) {
        try {
            in = new BufferedReader(new InputStreamReader(System.in));
            out = new PrintWriter(System.out);
            rnd = new Random();

            solve();

            out.close();
        } catch (IOException e) {
            e.printStackTrace();
            System.exit(42);
        }
    }

    static String nextToken() throws IOException {
        while (st == null || !st.hasMoreTokens()) {
            String line = in.readLine();

            if (line == null)
                return null;

            st = new StringTokenizer(line);
        }

        return st.nextToken();
    }

    static int nextInt() throws IOException {
        return Integer.parseInt(nextToken());
    }

    static long nextLong() throws IOException {
        return Long.parseLong(nextToken());
    }

    static double nextDouble() throws IOException {
        return Double.parseDouble(nextToken());
    }
}