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
#include <iostream>
#include <ostream>
#include <istream>
#include <fstream>
#include <sstream>
#include <cmath>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <limits>
#include <functional>
#include <algorithm>
#include <cassert>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <queue>
#include <iterator>
#include <stack>
#include <deque>
#include <numeric>
#include <tuple>
#include <ctime>
#include <array>
#include <random>
#include <iomanip>
#include <typeinfo>
#include <locale>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef double dl;
typedef size_t sz;

typedef pair<int, int> pii;
typedef pair<ll, ll> pl;
typedef pair<ull, ull> pul;

typedef vector<int> vi;
typedef vector<vi> vvi;

typedef vector<sz> vsz;
typedef vector<vsz> vvsz;

typedef vector<unsigned int> vui;
typedef vector<vui> vvui;

typedef vector<long long> vl;
typedef vector<vl> vvl;

typedef vector<unsigned long long> vul;
typedef vector<vul> vvul;

typedef vector<double> vd;
typedef vector<vd> vvd;

typedef vector<string> vs;
typedef vector<vs> vvs;

int ri(){ int r; cin >> r; return r; }
unsigned int rui(){ unsigned int r; cin >> r; return r; }
long long rl(){ long long r; cin >> r; return r; }
unsigned long long rul(){ unsigned long long r; cin >> r; return r; }
double rd(){ double r; cin >> r; return r; }

string rss(){ string r; cin >> r; return r; }
string rs(){ string r; getline(cin, r); return r; }

vs rvs(int n)
{
	assert(n);

	vs r;	

	for (int i = 0; i < n; ++i)
	{
		string s = rs();
		while (s.empty())
			s = rs();
		r.push_back(s);
	}
	return r;
}

vi rvi(int n){ assert(n); vi r; for (int i = 0; i < n; ++i) r.push_back(ri()); return r; }
vui rvui(int n){ assert(n); vui r; for (int i = 0; i < n; ++i) r.push_back(rui()); return r; }
vl rvl(int n){ assert(n); vl r; for (int i = 0; i < n; ++i) r.push_back(rl()); return r; }
vul rvul(int n){ assert(n); vul r; for (int i = 0; i < n; ++i) r.push_back(rul()); return r; }
vd rvd(int n){ assert(n); vd r; for (int i = 0; i < n; ++i) r.push_back(rd()); return r; }

#define all(cont) (cont).begin(), (cont).end()

////////////////////////////////////////////////////////////////////////////////////////////////////

int main(int argc, const char* argv[])
{
	auto q = rul();
	auto or = q;

	vul v;

	while (q % 2 == 0)
	{
		v.push_back(2);
		q /= 2;
	}

	for (ull i = 3; i * i <= q && v.size() <= 2; i += 2)
	{
		if (q % i)
			continue;

		v.push_back(i);
		q /= i;
	}

	if (q > 1 && q != or)
		v.push_back(q);

	if (v.size() == 2)
		cout << 2 << endl;
	else if (v.empty())
		cout << 1 << endl << 0 << endl;
	else
		cout << 1 << endl << v[0] * v[1] << endl;

	return 0;
}