#include <bits/stdc++.h>
using namespace std;
inline int rei() {
  int x;
  cin >> x;
  return x;
}
inline long long rel() {
  long long x;
  cin >> x;
  return x;
}
inline string res() {
  string x;
  cin >> x;
  return x;
}
vector<int> Prime;
int P[1400000];
long long Cube(long long X) {
  long long bf = 0;
  long long bl = 1300000;
  while (bf != bl) {
    long long bc = (bf + bl) / 2;
    if (bc * bc * bc >= X) {
      bl = bc;
    } else {
      bf = bc + 1;
    }
  }
  if (bf * bf * bf == X) {
    return bf;
  }
  return -1;
}
long long Sqrt(long long X) {
  long long bf = 0;
  long long bl = 2000000000;
  while (bf != bl) {
    long long bc = (bf + bl) / 2;
    if (bc * bc >= X) {
      bl = bc;
    } else {
      bf = bc + 1;
    }
  }
  if (bf * bf == X) {
    return bf;
  }
  return -1;
}
long long FourRoot(long long X) {
  long long sq = Sqrt(X);
  if (sq == -1) {
    return -1;
  }
  return Sqrt(sq);
}
long long gcd(long long X, long long Y) {
  if (Y == 0) {
    return X;
  }
  return gcd(Y, X % Y);
}
vector<long long> TwoProduct;
void Calc() {
  int N = rei();
  map<long long, int> mp;
  for (int i = 0; i < N; i++) {
    long long a = rel();
    long long sq = Sqrt(a);
    if (sq == -1) {
      long long cq = Cube(a);
      if (cq != -1) {
        mp[cq] += 3;
      } else {
        TwoProduct.push_back(a);
      }
    } else {
      long long fq = Sqrt(sq);
      if (fq == -1) {
        mp[sq] += 2;
      } else {
        mp[fq] += 4;
      }
    }
  }
  for (int i = 0; i < TwoProduct.size(); i++) {
    for (int j = i + 1; j < TwoProduct.size(); j++) {
      if (TwoProduct[j] != TwoProduct[i]) {
        long long g = gcd(TwoProduct[i], TwoProduct[j]);
        if (g != 1) {
          mp[g] += 0;
          mp[TwoProduct[i] / g] += 0;
          mp[TwoProduct[j] / g] += 0;
        }
      }
    }
  }
  map<long long, int> mp2;
  for (int i = 0; i < TwoProduct.size(); i++) {
    for (auto it = mp.begin(), end = mp.end(); it != end; ++it) {
      if (TwoProduct[i] % it->first == 0) {
        mp[it->first]++;
        mp[TwoProduct[i] / it->first]++;
        TwoProduct[i] = 1;
        break;
      }
    }
    if (TwoProduct[i] != 1) {
      mp2[TwoProduct[i]]++;
    }
  }
  long long ans = 1;
  for (auto it = mp.begin(), end = mp.end(); it != end; ++it) {
    ans *= (it->second + 1);
    ans %= 998244353;
  }
  for (auto it = mp2.begin(), end = mp2.end(); it != end; ++it) {
    ans *= (it->second + 1) * (it->second + 1);
    ans %= 998244353;
  }
  cout << ans << endl;
}
int main(int argc, char** argv) {
  ios::sync_with_stdio(false), cin.tie(0);
  cout.tie(0);
  Calc();
  return 0;
}
