#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
ull mul_mod(ull a, ull b, ull mod) {
return (__uint128_t)a * b % mod;
}
ull pow_mod(ull a, ull d, ull mod) {
ull result = 1;
a %= mod;
while (d) {
if (d & 1) result = mul_mod(result, a, mod);
a = mul_mod(a, a, mod);
d >>= 1;
}
return result;
}
bool is_prime_mr(ull n) {
if (n < 2) return false;
if (n == 2 || n == 3) return true;
if (n % 2 == 0) return false;
ull d = n - 1;
int s = 0;
while ((d & 1) == 0) {
d >>= 1;
s++;
}
vector<ull> bases = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37};
for (ull a : bases) {
if (a >= n) continue;
ull x = pow_mod(a, d, n);
if (x == 1 || x == n - 1) continue;
bool composite = true;
for (int r = 1; r < s; r++) {
x = mul_mod(x, x, n);
if (x == n - 1) {
composite = false;
break;
}
}
if (composite) return false;
}
return true;
}
ull f(ull x, ull c, ull mod) {
return (mul_mod(x, x, mod) + c) % mod;
}
ull pollard_rho(ull n) {
if (n % 2 == 0) return 2;
ull x = rand() % (n - 2) + 2;
ull y = x;
ull c = rand() % (n - 1) + 1;
ull d = 1;
while (d == 1) {
x = f(x, c, n);
y = f(f(y, c, n), c, n);
d = __gcd((x > y ? x - y : y - x), n);
}
if (d == n) return pollard_rho(n);
return d;
}
ull find_smallest_prime_factor(ull n) {
if (is_prime_mr(n)) return n;
ull factor = pollard_rho(n);
while (!is_prime_mr(factor)) {
factor = pollard_rho(factor);
}
return factor;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
srand(time(0));
ull N;
cin >> N;
if (N < 4) {
cout << 0 << endl;
return 0;
}
ull p = find_smallest_prime_factor(N);
ull q = N / p;
if (is_prime_mr(p) && is_prime_mr(q)) {
if (p == q) {
cout << 1 << endl;
} else {
cout << 2 << endl;
}
} else {
cout << 0 << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwoKdWxsIG11bF9tb2QodWxsIGEsIHVsbCBiLCB1bGwgbW9kKSB7CiAgICByZXR1cm4gKF9fdWludDEyOF90KWEgKiBiICUgbW9kOwp9Cgp1bGwgcG93X21vZCh1bGwgYSwgdWxsIGQsIHVsbCBtb2QpIHsKICAgIHVsbCByZXN1bHQgPSAxOwogICAgYSAlPSBtb2Q7CiAgICB3aGlsZSAoZCkgewogICAgICAgIGlmIChkICYgMSkgcmVzdWx0ID0gbXVsX21vZChyZXN1bHQsIGEsIG1vZCk7CiAgICAgICAgYSA9IG11bF9tb2QoYSwgYSwgbW9kKTsKICAgICAgICBkID4+PSAxOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKfQoKYm9vbCBpc19wcmltZV9tcih1bGwgbikgewogICAgaWYgKG4gPCAyKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobiA9PSAyIHx8IG4gPT0gMykgcmV0dXJuIHRydWU7CiAgICBpZiAobiAlIDIgPT0gMCkgcmV0dXJuIGZhbHNlOwoKICAgIHVsbCBkID0gbiAtIDE7CiAgICBpbnQgcyA9IDA7CiAgICB3aGlsZSAoKGQgJiAxKSA9PSAwKSB7CiAgICAgICAgZCA+Pj0gMTsKICAgICAgICBzKys7CiAgICB9CgogICAgdmVjdG9yPHVsbD4gYmFzZXMgPSB7MiwgMywgNSwgNywgMTEsIDEzLCAxNywgMTksIDIzLCAyOSwgMzEsIDM3fTsKICAgIGZvciAodWxsIGEgOiBiYXNlcykgewogICAgICAgIGlmIChhID49IG4pIGNvbnRpbnVlOwogICAgICAgIHVsbCB4ID0gcG93X21vZChhLCBkLCBuKTsKICAgICAgICBpZiAoeCA9PSAxIHx8IHggPT0gbiAtIDEpIGNvbnRpbnVlOwogICAgICAgIGJvb2wgY29tcG9zaXRlID0gdHJ1ZTsKICAgICAgICBmb3IgKGludCByID0gMTsgciA8IHM7IHIrKykgewogICAgICAgICAgICB4ID0gbXVsX21vZCh4LCB4LCBuKTsKICAgICAgICAgICAgaWYgKHggPT0gbiAtIDEpIHsKICAgICAgICAgICAgICAgIGNvbXBvc2l0ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNvbXBvc2l0ZSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCnVsbCBmKHVsbCB4LCB1bGwgYywgdWxsIG1vZCkgewogICAgcmV0dXJuIChtdWxfbW9kKHgsIHgsIG1vZCkgKyBjKSAlIG1vZDsKfQoKdWxsIHBvbGxhcmRfcmhvKHVsbCBuKSB7CiAgICBpZiAobiAlIDIgPT0gMCkgcmV0dXJuIDI7CiAgICB1bGwgeCA9IHJhbmQoKSAlIChuIC0gMikgKyAyOwogICAgdWxsIHkgPSB4OwogICAgdWxsIGMgPSByYW5kKCkgJSAobiAtIDEpICsgMTsKICAgIHVsbCBkID0gMTsKICAgIHdoaWxlIChkID09IDEpIHsKICAgICAgICB4ID0gZih4LCBjLCBuKTsKICAgICAgICB5ID0gZihmKHksIGMsIG4pLCBjLCBuKTsKICAgICAgICBkID0gX19nY2QoKHggPiB5ID8geCAtIHkgOiB5IC0geCksIG4pOwogICAgfQogICAgaWYgKGQgPT0gbikgcmV0dXJuIHBvbGxhcmRfcmhvKG4pOwogICAgcmV0dXJuIGQ7Cn0KCnVsbCBmaW5kX3NtYWxsZXN0X3ByaW1lX2ZhY3Rvcih1bGwgbikgewogICAgaWYgKGlzX3ByaW1lX21yKG4pKSByZXR1cm4gbjsKICAgIHVsbCBmYWN0b3IgPSBwb2xsYXJkX3JobyhuKTsKICAgIHdoaWxlICghaXNfcHJpbWVfbXIoZmFjdG9yKSkgewogICAgICAgIGZhY3RvciA9IHBvbGxhcmRfcmhvKGZhY3Rvcik7CiAgICB9CiAgICByZXR1cm4gZmFjdG9yOwp9CgppbnQgbWFpbigpIHsKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBzcmFuZCh0aW1lKDApKTsKCiAgICB1bGwgTjsKICAgIGNpbiA+PiBOOwoKICAgIGlmIChOIDwgNCkgewogICAgICAgIGNvdXQgPDwgMCA8PCBlbmRsOwogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHVsbCBwID0gZmluZF9zbWFsbGVzdF9wcmltZV9mYWN0b3IoTik7CiAgICB1bGwgcSA9IE4gLyBwOwoKICAgIGlmIChpc19wcmltZV9tcihwKSAmJiBpc19wcmltZV9tcihxKSkgewogICAgICAgIGlmIChwID09IHEpIHsKICAgICAgICAgICAgY291dCA8PCAxIDw8IGVuZGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY291dCA8PCAyIDw8IGVuZGw7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICBjb3V0IDw8IDAgPDwgZW5kbDsKICAgIH0KCiAgICByZXR1cm4gMDsKfQo=