#include <bits/stdc++.h>
using namespace std;
bool k[100000010];
long long t,x,maxx,num1,sum;
string a[15],cs[15];
short r[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool zs(long long jn){
for (int i = 2;i <= sqrt(jn)+1;i ++){
if (jn%i == 0) return 0;
}
return 1;
}
void dfs(long long num,int d){
if (num>a[d].size()){
long long num2=0,num3=0,num4=0,num5=0,num6=0;
for (int i = 0;i < cs[d].size();i ++){
num2 *= 10;
num2 += cs[d][i]-'0';
if (i >= cs[d].size()-4){
num3 *= 10;
num3 += cs[d][i]-'0';
if (i >= cs[d].size()-2){
num6 *= 10;
num6 += cs[d][i]-'0';
}
else{
num5 *= 10;
num5 += cs[d][i]-'0';
}
}
else{
num4 *= 10;
num4 += cs[d][i]-'0';
}
}
bool flag1=0;
if (num4%4 != 0) flag1=1;
if (num4%100 == 0){
flag1=0;
if (num4%400 == 0) flag1=1;
}
if (num5>12) return ;
if (num5 <= 0) return ;
if (num6 <= 0) return ;
if (!flag1){
if (r[num5]<num6) return ;
}
else{
if (num5 == 2){
if (num6>29) return ;
}
else{
if (r[num5]<num6) return ;
}
}
sum += int ((!k[num2])&&(!k[num3]));
return ;
}
if (a[d][num-1] != '-'){
dfs(num+1,d);
return ;
}
if (num == 1){
for (int i = 1;i <= 9;i ++){
cs[d][num-1]=i+'0';
dfs(num+1,d);
}
return ;
}
for (int i = 0;i <= 9;i ++){
cs[d][num-1]=i+'0';
dfs(num+1,d);
}
return ;
}
int main(){
cin >>t;
for (int i = 1;i <= t;i ++){
cin >>a[i];
cs[i]=a[i];
x=0;
for (int j = 0;j < a[i].size();j ++){
if (a[i][j] == '-'){
x *= 10;
x += 9;
continue;
}
x *= 10;
x += a[i][j]-'0';
}
maxx=max(maxx,x);
}
num1=sqrt(maxx)+1;
for (long long i = 2;i <= maxx;i ++){
if (!k[i])
if (i>num1) continue;
for (long long j = i*i;j <= maxx;j += i)
k[j]=1;
}
// 质数筛
for (int i = 1;i <= t;i ++){
sum=0;
dfs(1,i);
cout <<sum <<endl;
}
return 0;
}