#include <bits/stdc++.h>
using namespace std;
const int N = 10005;
long long n, i, m;
long long a[N], b[N];
pair<long long, long long> s[N];
long long posing(long long p) {
  if (p > n) return 0;
  long long f = lower_bound(a + 1, a + a[0] + 1, p) - a;
  if (a[f] == p) return f;
  return 0;
}
long long deal(long long a) {
  if (a <= 1) return 0;
  long long b(a), i;
  for (i = 2; i * i <= a; i++)
    if (a % i == 0) {
      for (; b % i == 0; b /= i)
        ;
      if (b == 1)
        return i;
      else
        return 0;
    }
  return a;
}
long long dp[N], tp[N];
int main() {
  scanf("%I64d", &n);
  a[0] = 0;
  for (i = 1; i * i < n; i++)
    if (n % i == 0) a[++a[0]] = i, a[++a[0]] = n / i;
  if (i * i == n) a[++a[0]] = i;
  sort(a + 1, a + a[0] + 1);
  m = 0;
  for (i = 1; i <= a[0]; i++)
    if (b[i] = deal(a[i] - 1), b[i])
      s[++m] = pair<long long, long long>(b[i], a[i]);
  sort(s + 1, s + m + 1);
  dp[1] = 1;
  for (i = 1; i <= m; i++) {
    long long j = i, k, l, p;
    for (; j < m && s[j + 1].first == s[i].first; ++j)
      ;
    for (k = 1; k <= a[0]; k++) tp[k] = dp[k];
    for (k = 1; k <= a[0]; k++)
      if (dp[k])
        for (l = i; l <= j; l++) {
          p = posing(a[k] * s[l].second);
          if (p) tp[p] += dp[k];
        }
    for (k = 1; k <= a[0]; k++) dp[k] = tp[k];
    i = j;
  }
  printf("%I64d\n", dp[a[0]]);
  return 0;
}
