#include <bits/stdc++.h>
using namespace std;
const int maxn = 10010;
const int maxm = 1000000;
inline long long GetP(long long x) {
  for (register int i = 2; (((long long)i) * ((long long)i)) <= x; i++)
    if (x % i == 0) {
      while (x % i == 0) x /= i;
      return x == 1 ? i : 0;
    }
  return x >= 2 ? x : 0;
}
int f[maxn];
long long num[maxn], p[maxn], d[maxn], V[maxn];
vector<long long> fac[maxn];
int n, m, cnt;
inline void Add(long long x) {
  d[++n] = x;
  long long P = GetP(x - 1);
  if (!P) return;
  V[++cnt] = P;
  p[cnt] = P;
  num[cnt] = x;
}
inline int ID(long long *A, int R, long long v) {
  int L = 1;
  while (L < R) {
    int mid = (L + R) >> 1;
    if (A[mid] < v)
      L = mid + 1;
    else
      R = mid;
  }
  return L;
}
int main() {
  long long A;
  cin >> A;
  for (int i = 1; (((long long)i) * ((long long)i)) <= A; i++)
    if (A % i == 0) {
      Add(i);
      if ((((long long)i) * ((long long)i)) != A) Add(A / i);
    }
  sort(V + 1, V + 1 + cnt);
  m = unique(V + 1, V + 1 + cnt) - V - 1;
  for (int i = 1; i <= cnt; i++) fac[ID(V, m, p[i])].push_back(num[i]);
  sort(d + 1, d + 1 + n);
  f[1] = 1;
  for (register int i = 1; i <= m; i++)
    for (register int j = n; j >= 1; j--)
      for (register int k = 0; k < (int)fac[i].size(); k++)
        if (d[j] % fac[i][k] == 0) f[j] += f[ID(d, n, d[j] / fac[i][k])];
  cout << f[n] << endl;
  return 0;
}
