#include<iostream>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
int n,a[15],ans[15];
int mtod[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int res;
char s[15][15];
bool isrn(int x){
if(x%4==0&&x%100!=0||x%400==0)return true;
return false;
}
bool isprime(int x){
if(x==1)return false;
for(int i=2;i*i<x;i++){
if(x%i==0)return false;
}
return true;
}
void dfs(int dep){
int day=ans[8]+ans[7]*10;
int month=ans[6]+ans[5]*10;
int year=ans[1]*1000+ans[2]*100+ans[3]*10+ans[4];
if(isrn(year)&&month==2&&day>29){
return ;
}else if(!isrn(year)&&month==2&&day>28){
return ;
}
if(month>12)return;
if(day>mtod[month])return ;
if(dep>8){
if(isprime(day+month*100)&&isprime(day)&&isprime(day+month*100+year*10000)){
res++;
}
return ;
}
if(a[dep]==-1){
for(int j=0;j<10;j++){
if(dep==5&&j>1)continue;
if(ans[5]==1&&dep==6&&(j>2))continue;
if(dep==7&&j>3)continue;
ans[dep]=j;
dfs(dep+1);
ans[dep]=-2;
}
}else{
ans[dep]=a[dep];
dfs(dep+1);
}
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
for(int i=1;i<=n;i++){
for(int j=0;j<8;j++){
cin>>s[i][j];
}
}
for(int i=1;i<=n;i++){
bool flag=true;
for(int j=0;j<8;j++){
if(s[i][j]=='-'){
flag=false;
break;
}
}
if(flag){
cout<<"0"<<'\n';
}else{
for(int j=0;j<8;j++){
if(s[i][j]!='-')a[j+1]=(s[i][j]-'0');
else a[j+1]=-1;
}
dfs(1);
cout<<res<<'\n';
}
res=0;
memset(ans,0,sizeof ans);
memset(a,0,sizeof ans);
}
return 0;
}