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 <bits/stdc++.h>
using namespace std;
bool flag[3500000 + 5];
vector<long long> vec;
set<long long> ans;
vector<pair<long long, long long> > divisor;
void seive() {
  for (int i = 3; i * i <= 3500000; i += 2) {
    if (!flag[i]) {
      for (int j = i * i; j <= 3500000; j += 2 * i) {
        flag[j] = 1;
      }
    }
  }
  vec.push_back(2);
  for (long long i = 3; i <= 3500000; i += 2) {
    if (!flag[i]) {
      vec.push_back(i);
    }
  }
}
long long factorize(long long n) {
  if (n == 1) {
    divisor.push_back(make_pair(n, 0));
    return 0;
  }
  if (n <= 3500000 && n % 2 && !flag[n]) {
    divisor.push_back(make_pair(1, 0));
    return 1;
  }
  long long expo = 0;
  for (int i = 0; i < vec.size() && (vec[i] * vec[i] <= n); i++) {
    if (n % vec[i] == 0) {
      expo = 0;
      while (n % vec[i] == 0) {
        n /= vec[i];
        expo++;
      }
      divisor.push_back(make_pair(vec[i], expo));
    }
  }
  if (n > 1) {
    divisor.push_back(make_pair(n, 1));
  }
  return 0;
}
int main() {
  seive();
  long long q, tmp, cnt = 0, f = 0;
  cin >> q;
  tmp = q;
  factorize(q);
  sort(divisor.begin(), divisor.end());
  for (int i = 0; i < divisor.size() - 1; i++) {
    if (divisor[i].first == divisor[i + 1].first) {
      divisor[i].first++;
      divisor.erase(divisor.begin() + i + 1);
    }
  }
  for (int i = 0; i < divisor.size(); i++) {
    for (int j = 1; j <= divisor[i].second; j++) {
      ans.insert(divisor[i].first * j);
      ans.insert(q / (divisor[i].first * j));
    }
  }
  set<long long>::iterator it;
  for (it = ans.end(); it != ans.begin(); it--) {
    if (tmp % (*it) == 0) {
      tmp = *it;
      if (!f) f = *it;
      cnt++;
    }
  }
  if (cnt % 2 == 0) {
    cout << "1" << endl << f << endl;
  } else
    cout << "2" << endl;
  return 0;
}
