#include<iostream>
#include<string>
#include<queue>
using namespace std;
int ans;
struct node
{
string num;
int k;
};
queue <node> q;
int stringToInt(string s)
{
int num=0;
for(int i=0;i<s.size();i++)
num = num*10+(s[i]-'0');
return num;
}
bool isPrime(int num)
{
for(int i=2;i*i<=num;i++)
if(num%i==0)
return false;
return true;
}
bool check(int date)
{
int ymd = date;
int md = date%10000;
int d = date%100;
if(isPrime(ymd) && isPrime(md) && isPrime(d))
return true;
return false;
}
void bfs()
{
while(!q.empty())
{
node front = q.front();
q.pop();
if(front.k == 7)
{
int date = stringToInt(front.num);
if(check(date))
ans++;
}
if(front.num[front.k]!='-')
continue;
for(int i=0;i<=9;i++)
{
string s;
for(int j=0;j<front.num.size();j++){
if(j==front.k) s += (char)(i+'0');
else s += front.num[j];
}
node now = {s,front.k+1};
q.push(now);
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
string s;
cin>>s;
node head = {s,0};
q.push(head);
bfs();
cout<<ans<<endl;
ans = 0;
while(!q.empty()) q.pop();
}
}