#include <bits/stdc++.h>
#define ll long long int
#define fast_io ios_base::sync_with_stdio(false); cin.tie(NULL)
#define endl '\n'
#define pb push_back
#define mp make_pair
#define all(a) a.begin(),a.end() 
#define max_pqueue priority_queue< long long >
#define min_pqueue priority_queue< long long , vector<long long> ,greater< long long > >

//~ setbase - cout << setbase (16); cout << 100 << endl; Prints 64
//~ setfill -   cout << setfill ('x') << setw (5); cout << 77 << endl; prints xxx77
//~ setprecision - cout << setprecision (14) << f << endl; Prints x.xxxx
//~ cout.precision(x)  cout<<fixed<<val;  // prints x digits after decimal in val

#ifndef LOCAL_MACHINE
#define cerr if (false) cerr
#endif

using namespace std;

void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const char *x) {cerr << '\"' << x << '\"';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}

template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto i: x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}
template<typename T>
void _printA(T *t, long long sz) { cout<<" { "; for (long long i=0; i<sz; i++) cout<<"["<<i<<"] = "<< t[i]<<endl; cout<<" } \n";}
#ifdef LOCAL_MACHINE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#define debugA(x, y) cerr << "[" << #x << "] = "; _printA(x, y)
#else
#define debug(x...)
#define debugA(x, y)
#endif

const ll _MOD = (ll)1e9 + 7;

ll mod(ll a, ll m=_MOD) {
	return (a + m) % m;
}

ll gcd(ll a, ll b) { return __gcd(a, b); }

ll gcd(ll a, ll b, ll & x, ll & y) {
    if (a == 0) {
        x = 0;
        y = 1;
        return b;
    }
    ll x1, y1;
    ll d = gcd(b % a, a, x1, y1);
    x = y1 - (b / a) * x1;
    y = x1;
    return d;
}

ll modinv(ll a, ll m=_MOD) {
	ll x, y;
	gcd(a, m, x, y);
	x = (x % m + m) % m;
    return x;
}

/* ------------------------------------------------------------------ */

void solve() {
	ll N;
	cin>>N;
	//~ bool sieve[(int)1e6+5];
	//~ vector<int> primes;
	//~ memset(sieve, true, sizeof(sieve));
	//~ for (int i=2; i<=(int)1e6; i++) 
		//~ if (sieve[i]) {
			//~ primes.pb(i);
			//~ for (int j=2*i; j<=(int)1e6; j+=i)
				//~ sieve[j] = false;
		//~ }
	
	ll fact = 0;
	ll sqrtN = sqrt(N);
	ll sqrtN1 = sqrt(N-1);
	for (ll i=2; i<=sqrtN1; i++) {
		if ((N-1) % i == 0) {
			fact += 2;
			if (i * i == N-1)
				fact--;
		}
	}
	
	if (N == 2)
		fact++;
	else
		fact += 2; 
	
	
	
	for (ll i=2; i<=sqrtN; i++) {
		if (N % i == 0) {
			ll k = N;
			ll cnt = 0;
			while (k % i == 0) {
				k = k / i;
				cnt++;
			}
			
			if (k == 1) {
				fact++;
				//~ ll sq = sqrt(cnt);
				//~ for (int i=1; i<=sq; i++) {
					//~ if (cnt % i == 0) {
						//~ fact += 2;
						//~ if (i*i == cnt)
							//~ fact--;
					//~ }
				//~ }
				//~ fact--;
			}
			else if (k % i == 1) {
				fact++;
			}
			
		}
	}
	//~ for (auto pr : primes) {
		//~ if (N % pr == 0) {
			//~ ll k = N;
			//~ ll cnt = 0;
			//~ while (k % pr == 0) {
				//~ k = k / pr;
				//~ cnt++;
			//~ }
			
			//~ if (k==1) {
				//~ if (pr != N) {
					//~ ll sq = sqrt(cnt);
					//~ for (int i=1; i<=sq; i++) {
						//~ if (cnt % i == 0) {
							//~ fact += 2;
						//~ }
						//~ if (i == sq)
							//~ fact--;
					//~ }
				//~ }
			//~ }
			//~ else
				//~ break;
		//~ }
	//~ }
	
	
	// N & N - 1 
	
	//~ for (ll i=2; i<=sqrtN; i++) {
		//~ if (N % i == 0) {
			//~ fact += 2;
			//~ if (i * i == N)
				//~ fact--;
		//~ }
	//~ }
	
	cout<<fact<<endl;
	
}

int main() {
#ifdef LOCAL_MACHINE
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
freopen("in", "r", stdin);
#pragma GCC diagnostic pop
#endif
	
	ll T;
	T = 1;
	//~ cin>>T;
	for (ll t=0; t<T; t++) {
		solve();
	}
}	











Measured memory_bytes: 256