#include <bits/stdc++.h>
using namespace std;
unsigned long long N, idx;
unsigned long long a[200005];
unsigned long long num[200005];
bool vis[200005];
unsigned long long getcb(unsigned long long x) {
  unsigned long long ret = cbrt((long double)(x));
  for (unsigned long long i = ret - 20; i <= ret + 20; i++) {
    if (i * i == x) ret = i;
  }
  return ret;
}
unsigned long long getsq(unsigned long long x) {
  unsigned long long ret = sqrt((long double)(x));
  for (unsigned long long i = ret - 20; i <= ret + 20; i++) {
    if (i * i == x) ret = i;
  }
  return ret;
}
unsigned long long gcd(unsigned long long a, unsigned long long b) {
  if (a == 0) return b;
  return gcd(b % a, a);
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(0);
  cin >> N;
  unsigned long long ans = 1;
  for (unsigned long long i = 1; i <= N; i++) cin >> num[i];
  for (unsigned long long i = 1; i <= N; i++) {
    if (vis[i]) continue;
    unsigned long long p4 = (unsigned long long)getsq(
        (unsigned long long)getsq((unsigned long long)num[i]));
    if (p4 * p4 * p4 * p4 == num[i]) {
      for (unsigned long long j = 0; j < 4; j++) a[idx++] = p4;
      continue;
    }
    unsigned long long p2 =
        (unsigned long long)getsq((unsigned long long)num[i]);
    if (p2 * p2 == num[i]) {
      for (unsigned long long j = 0; j < 2; j++) a[idx++] = p2;
      continue;
    }
    unsigned long long p3 =
        (unsigned long long)getcb((unsigned long long)num[i]);
    if (p3 * p3 * p3 == num[i]) {
      for (unsigned long long j = 0; j < 3; j++) a[idx++] = p3;
      continue;
    }
    bool fnd = 0;
    unsigned long long cnt = 0;
    for (unsigned long long j = 1; j <= N; j++) {
      unsigned long long tmp = gcd(num[i], num[j]);
      if (num[j] == num[i]) cnt++;
      if (tmp > 1 && tmp < num[i]) {
        fnd = 1;
        a[idx++] = tmp;
        a[idx++] = num[i] / tmp;
        break;
      }
    }
    if (!fnd) {
      ans *= (cnt + 1);
      ans %= 998244353;
      ans *= (cnt + 1);
      ans %= 998244353;
      for (unsigned long long j = 1; j <= N; j++)
        if (num[j] == num[i]) vis[j] = 1;
    }
  }
  sort(a, a + idx);
  unsigned long long i = 0;
  while (i < idx) {
    unsigned long long l = i;
    unsigned long long r = i;
    while (r + 1 < idx && a[r + 1] == a[l]) r++;
    ans *= (r - l + 2);
    ans %= 998244353;
    i = r + 1;
  }
  cout << ans;
  cout.flush();
  return 0;
}
