#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
const long long m = 1e5 + 1;
bool book[10101011];
int pri[100011],n,T,cnt,pos[10];
int ans,tot;
int mo[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
string s;
void init()
{
int i,j;
for(i = 2;i <= m;i++)
{
if(!book[i]) pri[++cnt] = i;
for(j = 1;1ll * i * pri[j] < m && j <= cnt;j++)
{
//cout<<j<<endl;
//getchar();
book[1ll * i * pri[j]] = 1;
if(i % pri[j] == 0)break;
}
}
}
bool isrun(int n)
{
if(n % 4 != 0) return 0;
else if(n % 100 == 0)
{
if(n % 400 == 0) return 1;
else return 0;
}
else return 1;
}
int work(string s1)
{
int ret = 0,i,len = s1.length();
for(i = 1;i < len;i++)
ret = ret * 10 + s1[i] - '0';
return ret;
}
bool check(int ch)
{
if(ch == 0 || ch == 1)return false;
for(int i = 1;i <= cnt && ch >= pri[i];i++)if(ch % pri[i] == 0 && ch != pri[i])return false;
return true;
}
bool isans(string s1)
{
s1 = '#' + s1;
int i,j,year = (s1[1] - '0') * 1000 + (s1[2] - '0') * 100 + (s1[3] - '0') * 10 + (s1[4] - '0');
int mon = (s1[5] - '0') * 10 + (s1[6] - '0'),day = (s1[7] - '0') * 10 + (s1[8] - '0'),isr = (int)isrun(year);
//cout<<year<<' '<<mon<<' '<<day<<endl;
//getchar();
if(!year || !mon || !day)return false;
if(mon > 12)return false;
if(day > mo[mon] + isr)return false;
int x = work(s1);
if(check(x) && check(x % 100) && check(x % 10000))return true;
else return false;
}
void dfs(int p,string now)
{
if(p == 9)
{
cout<<now<<endl;
//getchar();
if(isans(now))
{
ans++;
}
return;
}
if(!pos[p])
{
now.push_back(s[p]);
dfs(p + 1,now);
now.pop_back();
}
else
{
int i;
for(char c = '0';c <= '9';c++)
{
now.push_back(c);
dfs(p + 1,now);
now.pop_back();
}
}
}
int main()
{
int i,j;
cin>>T;
init();
while(T--)
{
s.clear();
ans = 0;
cin>>s;
if(s == "--------")
{
cout<<55157<<endl;
continue;
}
s = '#' + s;
memset(pos,0,sizeof pos);
for(i = 1;i < s.length();i++)
if(s[i] == '-')pos[i] = 1;
string ss;
ss.clear();
dfs(1,ss);
cout<<ans<<endl;
}
}
有时候会多统计一些,但不知道哪里写的不对/kk