#include <bits/stdc++.h>
using namespace std;
vector<long long> divs;
vector<bool> good;
vector<long long> prl;
vector<long long> v;
vector<vector<int>> g;
map<pair<int, long long>, long long> dp;
const int maxn = (int)1e6 + 123;
int ev[maxn];
long long go(int ind, long long lim) {
  if (ind == 0) {
    return 1;
  }
  if (dp.count(make_pair(ind, lim))) return dp[make_pair(ind, lim)];
  long long res = 0;
  for (auto x : g[ind]) {
    if (v[x] <= lim) continue;
    int j = lower_bound((divs).begin(), (divs).end(), divs[ind] / divs[x]) -
            divs.begin();
    assert(divs[ind] / divs[x] == divs[j]);
    res += go(j, v[x]);
  }
  return dp[make_pair(ind, lim)] = res;
}
int solve() {
  g.clear();
  divs.clear();
  v.clear();
  long long a;
  if (!(cin >> a)) return 0;
  for (long long p = 1; p * p <= a; p++) {
    if (a % p == 0) {
      divs.push_back(p);
      if (a / p != p) divs.push_back(a / p);
    }
  }
  sort((divs).begin(), (divs).end());
  good.resize(divs.size());
  v.resize(divs.size());
  fill((good).begin(), (good).end(), 0);
  fprintf(stderr, "divs = %d\n", (int)(divs).size());
  for (int i = 0; i < (int)(divs).size(); i++) {
    long long nn = divs[i] - 1;
    if (nn == 0) continue;
    if (nn == 1) continue;
    good[i] = 1;
    v[i] = divs[i] - 1;
    for (int j = 0; j < (int)(prl).size(); j++) {
      if (prl[j] > nn) break;
      if (nn % prl[j] == 0) {
        v[i] = prl[j];
        while (nn % prl[j] == 0) {
          nn /= prl[j];
        }
        if (nn != 1) {
          good[i] = 0;
          break;
        } else {
          good[i] = 1;
        }
      }
    }
  }
  g.resize((int)(divs).size());
  for (int i = 0; i < (int)(g).size(); i++) g[i] = vector<int>();
  fprintf(stderr, "go !!\n");
  for (int i = 0; i < (int)(divs).size(); i++) {
    if (!good[i]) continue;
    for (int j = 0; j < (int)(divs).size(); j++) {
      if (divs[j] % divs[i] == 0) {
        g[j].push_back(i);
      }
    }
  }
  cout << go((int)(divs).size() - 1, -1) << endl;
  return 1;
}
int main() {
  for (int i = 2; i < maxn; i++) {
    if (!ev[i]) {
      prl.push_back(i);
      for (int j = i; j < maxn; j += i) {
        ev[j] = 1;
      }
    }
  }
  while (solve())
    ;
}
