#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int maxn = 1e6 + 7;
const int maxv = 1e5 + 10;
const double eps = 1e-9;
int ans, N;
int prime[maxv];
int maxprime[maxn];
int keyprime[maxn];
int nxtkeyprime[maxn];
int p[maxv];
int n;
void init() {
  N = 0;
  keyprime[1] = 1;
  for (int i = 2; i < maxn; i++) {
    if (maxprime[i]) continue;
    prime[N++] = i;
    for (int j = i; j < maxn; j += i) {
      maxprime[j] = i;
    }
    for (long long j = i; j < maxn - 1; j *= i) {
      keyprime[j + 1] = i;
    }
  }
  nxtkeyprime[maxn - 1] = maxn - 1;
  for (int i = maxn - 1; i > 0; i--) {
    if (keyprime[i])
      nxtkeyprime[i - 1] = i;
    else
      nxtkeyprime[i - 1] = nxtkeyprime[i];
  }
}
bool exist(int k) {
  for (int i = 0; i < n; i++)
    if (p[i] == k) return true;
  return false;
}
long long Find(long long k) {
  if (k + 1 < maxn) return keyprime[k + 1];
  int keyp = 0;
  int sqx = sqrt(k + 0.5);
  for (int i = 0; i < N; i++) {
    if (k % prime[i] == 0) {
      keyp = prime[i];
      break;
    }
    if (prime[i] > sqx) break;
  }
  if (keyp) {
    while (k % keyp == 0) k /= keyp;
    if (k == 1) return keyp;
    return 0;
  }
  return k;
}
void dfs(long long x, long long cur) {
  long long nk = Find(x - 1);
  int top = sqrt(x + 0.5);
  if (nk && !exist(nk)) ans++;
  for (int i = nxtkeyprime[cur]; i <= top; i = nxtkeyprime[i]) {
    if (x % i == 0 && !exist(keyprime[i])) {
      p[n++] = keyprime[i];
      dfs(x / i, i);
      n--;
    }
  }
}
int main() {
  long long k;
  init();
  while (cin >> k) {
    ans = 0;
    n = 0;
    dfs(k, 2);
    cout << ans << endl;
  }
  return 0;
}
