#include <bits/stdc++.h>
using namespace std;
template <typename C>
void MA(C& a, C b) {
  if (a < b) a = b;
}
template <typename C>
void MI(C& a, C b) {
  if (a > b) a = b;
}
long long n;
map<long long, vector<long long> > m;
void add(long long a, long long d) { m[d].push_back(a); }
void spr(long long a) {
  if (a <= 2) return;
  a--;
  for (long long i = 2; i * i <= a; i++) {
    if (a % i == 0) {
      long long pom = a;
      while (a % i == 0) a /= i;
      if (a != 1) return;
      add(pom + 1, i);
      return;
    }
  }
  add(a + 1, a);
}
map<long long, long long> dp;
int main() {
  scanf("%lld", &n);
  long long i;
  for (i = 1; i * i < n; i++) {
    if (n % i == 0) {
      spr(i);
      spr(n / i);
    }
  }
  if (i * i == n) spr(i);
  dp[1] = 1;
  for (auto x : m) {
    vector<pair<long long, long long> > to_add;
    for (long long a : x.second) {
      for (auto b : dp) {
        if (1e13 / a > b.first)
          to_add.push_back(make_pair(a * b.first, b.second));
      }
    }
    for (int i = 0; i < to_add.size(); i++) {
      if (n % to_add[i].first == 0) {
        dp[to_add[i].first] += to_add[i].second;
      }
    }
  }
  printf("%lld\n", dp[n]);
}
