#include <bits/stdc++.h>
using namespace std;
int rd();
int gcd(int a, int b) { return a == 0 ? b : gcd(b % a, a); }
int J(int x) {
  int sum = 0;
  for (int i = 1; i * i <= x; ++i) {
    if (x % i == 0 && gcd(i, x / i) == 1) {
      sum += i;
      sum += x / i;
    }
  }
  return sum;
}
const int N = 1000007;
int n, cnt, pr[N], lp[N];
void sieve() {
  for (int i = 2; i < N; ++i) {
    if (lp[i] == 0) {
      lp[i] = i;
      pr[cnt++] = i;
    }
    for (int j = 0; j < cnt && pr[j] <= lp[i] && pr[j] * i < N; ++j) {
      lp[i * pr[j]] = pr[j];
    }
  }
}
long long getp(long long d) {
  --d;
  for (int i = 0; i < cnt && (long long)pr[i] * pr[i] <= d; ++i) {
    if (d % pr[i] == 0) {
      while (d % pr[i] == 0) d /= pr[i];
      if (d == 1) return pr[i];
      return -1;
    }
  }
  return d;
}
vector<pair<long long, long long> > mas;
long long ans;
bool used[N];
void rec(int ptr, long long rem) {
  if (rem == 1) {
    ++ans;
    return;
  }
  if (ptr == (int)(mas).size()) return;
  if (rem % mas[ptr].first == 0 && !used[mas[ptr].second]) {
    used[mas[ptr].second] = true;
    rec(ptr + 1, rem / mas[ptr].first);
    used[mas[ptr].second] = false;
  }
  rec(ptr + 1, rem);
}
void solve() {
  sieve();
  long long x;
  cin >> x;
  vector<long long> divs;
  for (int i = 1; (long long)i * i <= x; ++i) {
    if (x % i == 0) {
      if (i != 1) divs.push_back(i);
      if (i * i != x) divs.push_back(x / i);
    }
  }
  sort((divs).begin(), (divs).end());
  vector<long long> pp;
  for (long long d : divs) {
    long long p = getp(d);
    if (p == -1 || p == 1) continue;
    mas.push_back(make_pair(d, p));
    pp.push_back(p);
  }
  sort((mas).begin(), (mas).end());
  reverse((mas).begin(), (mas).end());
  sort((pp).begin(), (pp).end());
  for (int i = 0; i < ((int)(mas).size()); ++i)
    mas[i].second =
        lower_bound((pp).begin(), (pp).end(), mas[i].second) - pp.begin();
  rec(0, x);
  cout << ans << endl;
}
int rd() { return (((long long)rand() << 16) ^ rand()) % 1000000000; }
void testGen() {
  FILE *f = fopen("input.txt", "w");
  fclose(f);
}
int main() {
  cerr << fixed;
  cerr.precision(9);
  solve();
  return 0;
}
