#include <bits/stdc++.h>
using namespace std;
const long long int maxn = 1e6 + 5;
string s;
const long long int mod = 1e9 + 7;
long long int add(long long int &a, long long int b) {
  a = a + b;
  if (a > mod) a -= mod;
}
long long int sub(long long int &a, long long int b) {
  a = a - b;
  if (a < 0) a += mod;
}
long long int mul(long long int a, long long int b) {
  return (a % mod * b % mod) % mod;
}
long long int exp(long long int a, long long int pow) {
  if (pow == 0) return 1;
  if (pow == 1) return a;
  return (pow & 1 ? mul(a, exp(mul(a, a), pow / 2)) : exp(mul(a, a), pow / 2));
}
signed main() {
  long long int t;
  cin >> t;
  while (t--) {
    long long int n;
    cin >> n;
    long long int f = 2;
    long long int steps = 0;
    vector<long long int> rem;
    while (n > 0) {
      rem.push_back(n % f);
      n /= f;
      f++;
      steps++;
    }
    sort(rem.begin(), rem.end(), greater<long long int>());
    long long int ans = 1;
    long long int a[30] = {0};
    long long int zero = 0;
    for (long long int i = 0; i < rem.size(); i++) {
      if (rem[i] == 0) zero++;
      a[rem[i]]++;
      ans =
          ans *
          ((0) > (rem.size() - ((0) > (rem[i] - 1) ? (0) : (rem[i] - 1)) - i)
               ? (0)
               : (rem.size() - ((0) > (rem[i] - 1) ? (0) : (rem[i] - 1)) - i)) /
          a[rem[i]];
    }
    long long int zero_ans = 1;
    long long int sz = rem.size() - (zero > 0 ? 1 : 0);
    long long int b[30] = {0};
    for (long long int i = 0; i < sz; i++) {
      b[rem[i]]++;
      zero_ans = zero_ans *
                 ((0) > (sz - ((0) > (rem[i] - 1) ? (0) : (rem[i] - 1)) - i)
                      ? (0)
                      : (sz - ((0) > (rem[i] - 1) ? (0) : (rem[i] - 1)) - i)) /
                 b[rem[i]];
    }
    if (zero) zero_ans += 1;
    cout << (zero > 0 ? ans - zero_ans : ans - 1) << "\n";
  }
}
