#include <bits/stdc++.h>   using namespace std;   long long GCD(long long a, long long b) {     while (b) b ^= a ^= b ^= a %= b;     return a;   }   long long LCM(long long a, long long b) { return a * (b / GCD(a, b)); }   const double EPS = 10e-9;   const long long INF = (1LL << 30);   using namespace std;   template <typename T>   string toString(T t) {     stringstream ss;     ss << t;     return ss.str();   }   long long isSquare(long long N) {     long long lo = 1, hi = 2 * sqrt(N);     while (hi - lo > 1) {       long long mid = (hi + lo) >> 1;       long long res = mid * mid;       if (res < N) {         lo = mid;       } else if (res > N) {         hi = mid;       } else {         return mid;       }     }     return lo;   }   int main() {     long long N;     cin >> N;     if (N % 3 != 0) {       cout << 0 << endl;     } else {       N /= 3;       int options = 0;       for (long long i = 1; i * i * i <= N; i++) {         if (N % i == 0) {           long long left = N / i, to = i / 2;           for (long long a = 1; a <= to; a++) {             long long c = i - a;             long long d = (a - c) * (a - c);             long long sqr = isSquare(d + 4 * left);             if (sqr * sqr == d + 4 * left) {               long long b = (-(a + c) + sqr) >> 1;               if (c <= b) {                 if (a == c) {                   if (b == c) {                     options += 1;                   } else {                     options += 3;                   }                 } else {                   if (b == c) {                     options += 3;                   } else {                     options += 6;                   }                 }               }             }           }         }       }       cout << options << endl;     }     return 0;   }   