#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using Int = long long; template ostream &operator<<(ostream &os, const pair &a) { return os << "(" << a.first << ", " << a.second << ")"; }; template void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; } template bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; } template bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; } int N; int len; int ps[110], es[110]; Int pfs[110][110]; int ans; void dfs(int i, Int x0, Int x1, Int x2, Int x3) { if (i == len) { if (x1 >= x2 && x2 >= x3 && x0 == x1 + x2 + x3) { ++ans; } } else { for (int f0 = 0; f0 <= es[i]; ++f0) { for (int f1 = 0; f1 <= es[i] - f0; ++f1) { for (int f2 = 0; f2 <= es[i] - f0 - f1; ++f2) { const int f3 = es[i] - f0 - f1 - f2; dfs(i + 1, x0 * pfs[i][f0], x1 * pfs[i][f1], x2 * pfs[i][f2], x3 * pfs[i][f3]); } } } } } int main() { for (; ~scanf("%d", &N); ) { len = 0; int n = N; for (Int p = 2; p * p <= n; ++p) { if (n % p == 0) { int e = 0; do { ++e; n /= p; } while (n % p == 0); ps[len] = p; es[len] = 2 * e; ++len; } } if (n > 1) { ps[len] = n; es[len] = 2; ++len; } // cerr<<"ps = ";pv(ps,ps+len); // cerr<<"es = ";pv(es,es+len); for (int i = 0; i < len; ++i) { pfs[i][0] = 1; for (int f = 0; f < es[i]; ++f) { pfs[i][f + 1] = pfs[i][f] * ps[i]; } } ans = 0; dfs(0, 1, 1, 1, 1); printf("%d\n", ans); } return 0; }