Problem:
Score : 600 points

Problem Statement

Given is a positive integer N.

We will choose an integer K between 2 and N (inclusive), then we will repeat the operation below until N becomes less than K.

Operation: if K divides N, replace N with N/K; otherwise, replace N with N-K.

In how many choices of K will N become 1 in the end?

Constraints

2 \leq N \leq 10^{12}

N is an integer.

Input

Input is given from Standard Input in the following format:

N

Output

Print the number of choices of K in which N becomes 1 in the end.

Sample Input 1

6

Sample Output 1

3

There are three choices of K in which N becomes 1 in the end: 2, 5, and 6.

In each of these choices, N will change as follows:

When K=2: 6 \to 3 \to 1

When K=5: 6 \to 1

When K=6: 6 \to 1

Sample Input 2

3141

Sample Output 2

13

Sample Input 3

314159265358

Sample Output 3

9

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mp(a, b) make_pair(a, b)
#define ls (rt << 1)
#define rs (rt << 1 | 1) 
typedef pair<int, int> pii; 
const ll mod = 1e9 + 7;
template <class T> T lowbit(T x){return ((x)&(-(x)));}
const int maxn = 1e6 + 10;
ll n;
int ans;
void solve(ll n, ll x)
{
	if(x == 1) return;
	while(n % x == 0) n /= x;
	if(n % x == 0 || n % x == 1) ++ans;
}
int main()
{
	cin >> n;
	for(ll i = 1; i * i <= n; ++i)
	{
		if(n % i) continue;
		solve(n, i);
		if(i * i != n) solve(n, n / i);
	}
	--n;
	for(ll i = 1; i * i <= n; ++i)
	{
		if(n % i) continue;
		ans += (i > 1);
		if(i * i != n) ans += (n / i > 1);
	}
	cout << ans << endl;
	return 0;
}