#include <bits/stdc++.h>
using namespace std;
const int MOD = 998244353;
vector<bool> isPrime;
vector<vector<vector<int>>> primesByLen;
vector<vector<vector<vector<int>>>> cand;
// cand[len][k][prefix] = list các index của prime (độ dài len) có prefix độ dài k = prefix
void sieve(int N=100000){
isPrime.assign(N+1,true);
isPrime[0]=isPrime[1]=false;
for(int i=2;i*i<=N;i++) if(isPrime[i])
for(int j=i*i;j<=N;j+=i) isPrime[j]=false;
}
vector<int> toDigits(int x,int n){
vector<int>d(n);
for(int i=n-1;i>=0;i--){ d[i]=x%10; x/=10; }
return d;
}
int n;
vector<vector<int>> board;
long long ans;
void dfs(int row){
if(row==n){ ans=(ans+1)%MOD; return; }
// tạo prefix (row chữ số đầu tiên)
int prefix=0;
for(int j=0;j<row;j++) prefix = prefix*10 + board[j][row];
// duyệt ứng viên từ cand
for(int idx : cand[n][row][prefix]){
const auto &dig = primesByLen[n][idx];
bool ok=true;
vector<pair<int,int>> changed;
for(int j=row;j<n;j++){
if(board[row][j]!=-1 && board[row][j]!=dig[j]){ ok=false; break; }
if(board[j][row]!=-1 && board[j][row]!=dig[j]){ ok=false; break; }
}
if(!ok) continue;
for(int j=row;j<n;j++){
if(board[row][j]==-1){ board[row][j]=dig[j]; changed.push_back({row,j}); }
if(board[j][row]==-1){ board[j][row]=dig[j]; changed.push_back({j,row}); }
}
dfs(row+1);
for(auto [x,y]:changed) board[x][y]=-1;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
sieve();
primesByLen.assign(6,{});
// collect primes by length
for(int x=2;x<100000;x++) if(isPrime[x]){
int len = to_string(x).size();
primesByLen[len].push_back(toDigits(x,len));
}
// build cand
cand.assign(6,{});
for(int len=1; len<=5; len++){
cand[len].assign(len+1,{});
for(int k=0;k<=len;k++){
cand[len][k].assign((int)pow(10,k),{});
}
for(int i=0;i<(int)primesByLen[len].size();i++){
int prefix=0;
cand[len][0][0].push_back(i);
for(int k=1;k<=len;k++){
prefix = prefix*10 + primesByLen[len][i][k-1];
cand[len][k][prefix].push_back(i);
}
}
}
int T; cin>>T;
while(T--){
int p; cin>>p;
n = to_string(p).size();
board.assign(n,vector<int>(n,-1));
auto d = toDigits(p,n);
for(int j=0;j<n;j++){
board[0][j]=d[j];
board[j][0]=d[j];
}
ans=0;
dfs(1);
cout<<ans%MOD<<"\n";
}
}