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: Wrong Answer)

#include	<bits/stdc++.h>
using	namespace	std;
typedef	long long ll;

// int/long:		-2,147,483,648 - 2,147,483,647 (-2^31 <= int < 2^31)
// long/long long:	-9,223,372,036,854,775,808 - 9,223,372,036,854,775,807 (-2^63 <= long < 2^63)

#define	INF (1<<30)
//1,073,741,824
//= 536,870,912 *2

#define	MOD 1000000007

#define	Rep0(i, n)	for (auto i=0; i<n; i++)
#define	Rep1(i, n)	for (auto i=1; i<=n; i++)
#define Sort(P)	sort(P.begin(), P.end())
#define Rev(P)	reverse(P.begin(), P.end())

int	main() {
	ll N;
	cin >>N;
	ll S=0;
	vector<ll> A;
	A.push_back(N);
	// Divisor of N
	for (ll i=2; i*i<=N; i++)
		if (0==N%i) {
			A.push_back(i);
			if (N!=i*i)
				A.push_back(N/i);
		}
	// Sort(A); // Not Required
	Rep0(i, A.size()) {
		ll KK=A.at(i);
		ll NN=N;
		while (NN>=KK)
			if (0==NN%KK)
				NN/=KK;
			else
				NN%=KK;
		if (1==NN)
			S++;
	}
	// Divisor of N-1
	ll NN=N-1;
	vector<ll> B;
	B.push_back(NN);
	for (ll i=2; i*i<=NN; i++)
		if (0==NN%i) {
			B.push_back(i);
			if (NN!=i*i)
				B.push_back(NN/i);
		}
	// Sort(B);// Not required
	S +=B.size();
	cout <<S <<endl;
	return 0;
}