#include <bits/stdc++.h>
const int N = 1000000 + 10;
long long n;
int B;
long long d[N];
bool notp[N];
int p[N], pn;
int dn;
int cnt;
long long f[N], g[N];
void ins(long long x) {
  int i, j;
  if (n % x) return;
  for (i = j = 1; i <= dn; i++) {
    if (!(d[i] % x)) {
      while (d[j] * x != d[i]) j++;
      g[i] += f[j];
    }
  }
  cnt++;
}
bool check(long long x) {
  int i;
  for (i = 1; i <= pn and 1LL * p[i] * p[i] <= x; i++)
    if (!(x % p[i])) return false;
  return true;
}
int main() {
  int i, j;
  long long pk;
  scanf("%lld", &n);
  for (i = 1; 1LL * i * i <= n; i++) {
    if (!(n % i)) {
      d[++dn] = i;
      if (1LL * i * i < n) d[++dn] = n / i;
    }
  }
  B = i - 1;
  std::sort(d + 1, d + 1 + dn);
  f[1] = g[1] = 1;
  for (i = 2; i <= B; i++) {
    if (!notp[i]) {
      p[++pn] = i;
      for (pk = i; pk < n; pk *= i) ins(1 + pk);
      memcpy(f, g, (dn + 1) << 3);
    }
    for (j = 1; j <= pn and i * p[j] <= B; j++) {
      notp[i * p[j]] = true;
      if (!(i % p[j])) break;
    }
  }
  for (i = dn; d[i] - 1 > B; i--) {
    if (check(d[i] - 1)) {
      ins(d[i]);
      memcpy(f, g, (dn + 1) << 3);
    }
  }
  printf("%lld\n", f[dn]);
  return 0;
}
