#include <iostream>
#include <string>
#include <vector>
using namespace std;
int T, num = 0;
int f(string str) {
int a = 0;
for (int i = 0; i < str.size(); i++) {
if (str[i] == '-') {
return -1;
}
a = a * 10;
a += str[i] - '0';
}
return a;
}
bool hf_date(int y, int m, int d) {
int month[13] = {0, 31, 30, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (m < 1 || m > 12) return false;
if (m != 2) {
return d >= 1 && d <= month[m];
} else {
int M;
if (y % 400 == 0 || (y % 4 == 0 && y % 100 != 0)) M = 29;
else M = 28;
return d >= 1 && d <= M;
}
}
bool isPrime(int a) {
if (a <= 1) return false;
for (int i = 2; i * i <= a; i++) {
if (a % i == 0) return false;
}
return true;
}
void dfs(int zb, int n, string str, vector<int> vec) {
if (zb == n) {
int y = f(str.substr(0, 4));
int m = f(str.substr(4, 2));
int d = f(str.substr(6, 2));
if (y == -1 || m == -1 || d == -1) return;
if (hf_date(y, m, d)) {
if (isPrime(y) && isPrime(m) && isPrime(d) &&
isPrime(m * 100 + d) &&
isPrime(y * 10000 + m * 100 + d)) num++;
}
return;
}
int y = f(str.substr(0, 4));
int m = f(str.substr(4, 2));
int d = f(str.substr(6, 2));
if (y != -1 && !isPrime(y)) return;
if (m != -1 && (m < 1 || m > 12 || !isPrime(m))) return;
if (d != -1 && (d < 1 || d > 31 || !isPrime(d))) return;
for (int i = 0; i <= 9; i++) {
string str1 = str;
str1[vec[zb]] = char(i + '0');
dfs(zb + 1, n, str1, vec);
}
}
int main() {
cin >> T;
for (int i = 1; i <= T; i++) {
string str;
cin >> str;
vector<int> vec;
int all = 0;
for (int j = 0; j < 8; j++)
if (str[j] == '-') {
vec.push_back(j);
all++;
}
num = 0;
dfs(0, all, str, vec);
cout << num << endl;
}
return 0;
}