#include<iostream>
#include<cstring>
#include<string>
using namespace std;
int know[10];
int month1[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int month2[12]={31,29,31,30,31,30,31,31,30,31,30,31};
int ans;
int cnt;
string s;
string st;
bool pri(int num){
if(num<=1){
return false;
}
for(int i=2;i*i<=num;i++){
if(num%i==0){
return false;
}
}
return true;
}
bool ispri1(string t){
int a;
char ac[2];
for(int i=6;i<8;i++)ac[i-6]=t[i];
a=(ac[0]-'0')*10+(ac[1]-'0')*1;
return pri(a);
}
bool ispri2(string t){
int b;
char bc[4];
for(int i=4;i<8;i++)bc[i-4]=t[i];
b=(bc[0]-'0')*1000+(bc[1]-'0')*100+(bc[2]-'0')*10+(bc[3]-'0')*1;
return pri(b);
}
bool ispri3(string t){
int c;
char cc[8];
for(int i=0;i<8;i++)cc[i]=t[i];
c=(cc[0]-'0')*10000000+(cc[1]-'0')*1000000+(cc[2]-'0')*100000+(cc[3]-'0')*10000+(cc[4]-'0')*1000+(cc[5]-'0')*100+(cc[6]-'0')*10+(cc[7]-'0')*1;
return pri(c);
}
bool ispri(string t){
return (ispri1(t)&&ispri2(t)&&ispri3(t));
}
bool check(string t){
int a,b,c;
char ac[4],bc[2],cc[2];
for(int i=0;i<4;i++)ac[i]=t[i];
for(int i=4;i<6;i++)bc[i-4]=t[i];
for(int i=6;i<8;i++)cc[i-6]=t[i];
a=(ac[0]-'0')*1000+(ac[1]-'0')*100+(ac[2]-'0')*10+(ac[3]-'0')*1;
b=(bc[0]-'0')*10+(bc[1]-'0')*1;
c=(cc[0]-'0')*10+(cc[1]-'0')*1;
if(a%4==0){
return (a>=0&&a<=9999&&b>=0&&b<=12&&c>=0&&c<=month2[b-1]);
}
else{
return (a>=0&&a<=9999&&b>=0&&b<=12&&c>=0&&c<=month1[b-1]);
}
}
void dfs(int k){
int now=know[k];
if(now>=0){
if(now<6){
if(!ispri1(st))return;
}
if(now<4){
if(!ispri2(st))return;
}
}
if(k==0){
if(ispri3(st)&&check(st))ans++;
return;
}
for(int i=0;i<=9;i++){
st[now]=char(i+'0');
dfs(k-1);
st[now]='-';
}
return;
}
int main(){
int T;
cin>>T;
while(T--){
cin>>s;
st=s;
cnt=0;
for(int i=0;i<s.length();i++){
if(s[i]=='-'){
know[++cnt]=i;
}
}
ans=0;
if(cnt!=0){
dfs(cnt);
cout<<ans<<endl;
}
else{
if(ispri(s))
cout<<1<<endl;
else
cout<<0<<endl;
}
}
return 0;
}