1 #include<bits/stdc++.h>
2 using namespace std;
3 #define mem(a,b) memset(a,b,sizeof(a))
4 const int day[2][20]={{0,31,28,31,30,31,30,31,31,30,31,30,31},
5 {0,31,29,31,30,31,30,31,31,30,31,30,31}/**闰年*/};
6 char s[100];
7
8 int prime[10000000];
9 bool isPrime[99991232];
10 void Prime()
11 {
12 mem(isPrime,true);
13 int cnt=0;
14 isPrime[1]=false;
15 for(int i=2;i < 99991232;++i)
16 {
17 if(isPrime[i])
18 prime[++cnt]=i;
19 for(int j=1;j <= cnt && prime[j]*i < 99991232;++j)
20 {
21 isPrime[i*prime[j]]=false;
22 if(i%prime[j] == 0)
23 break;
24 }
25 }
26 }
27 bool isRun(int y)
28 {
29 return (y%100 != 0 && y%4 == 0)||(y%400 == 0);
30 }
31 bool isSatY(int y)
32 {
33 if(s[1] != '-' && (s[1]-'0') != y/1000)
34 return false;
35 if(s[2] != '-' && (s[2]-'0') != y/100%10)
36 return false;
37 if(s[3] != '-' && (s[3]-'0') != y/10%10)
38 return false;
39 if(s[4] != '-' && (s[4]-'0') != y%10)
40 return false;
41
42 return true;
43 }
44 bool isSatM(int m)
45 {
46 if(s[5] != '-' && (s[5]-'0') != m/10)
47 return false;
48 if(s[6] != '-' && (s[6]-'0') != m%10)
49 return false;
50
51 return true;
52 }
53 bool isSatD(int d)
54 {
55 if(s[7] != '-' && (s[7]-'0') != d/10)
56 return false;
57 if(s[8] != '-' && (s[8]-'0') != d%10)
58 return false;
59
60 return true;
61 }
62 int Solve()
63 {
64 int ans=0;
65 for(int y=1;y <= 9999;y++)
66 {
67 if(!isSatY(y))///判断y是否符合s
68 continue;
69
70 for(int m=1;m <= 12;m++)
71 {
72 if(!isSatM(m))///判断m是否符合s
73 continue;
74
75 for(int d=1;d <= day[isRun(y)][m];d++)///判断m是否符合s
76 if(isSatD(d) && isPrime[m*100+d] && isPrime[d] && isPrime[y*10000+m*100+d])
77 ans++;
78 }
79 }
80 return ans;
81 }
82 int main()
83 {
84 Prime();///预处理1~99991232内的所有素数
85
86 int T;
87 scanf("%d",&T);
88 while(T--)
89 {
90 scanf("%s",s+1);
91 printf("%d
",Solve());
92 }
93 return 0;
94 }