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>
#define mp make_pair
#define pr pair<ll,ll>
#define MAX 1000000
#define ed '\n'
using namespace std;
typedef long long int ll;
#define mod 998244353
void sync(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}

int main(){
	sync();
	ll n;
	cin>>n;
	ll fin=0;
	for(ll i=2;i*i<=n-1;i++)
	{
		if((n-1)%i==0)
		{
			if(i*i==n-1)fin++;
			else fin+=2;
			}	
	}
	if(n-1!=1)
	fin++;
	for(ll i=2;i*i<=n;i++)
	{
		if(n%i==0)
		{
		ll n1=n;
		ll j=n/i;
		while(n1%i==0)n1/=i;
		if((n1-1)%i==0)fin++;
		n1=n;
		if(i!=j)
		{while(n1%j==0)n1/=j;
		if((n1-1)%j==0)fin++;
		}
		}
	}
	fin++;
	cout<<fin<<endl;
}