#include <iostream>
#include <string>
#include <math.h>
using namespace std;
char plec(int pesel)
{
if (pesel % 2 == 0)
return '2';
else
return '1';
}
char przestepny(int rok, int miesiac)
{
int wiek=0;
if (miesiac > 0 && miesiac < 13)
{
wiek = 19;
rok+=(wiek*100);
}
else if (miesiac > 20 && miesiac < 33)
{
wiek = 20;
rok+=(wiek*100);
}
else if (miesiac > 40 && miesiac < 53)
{
wiek = 21;
rok+=(wiek*100);
}
else if (miesiac > 60 && miesiac < 73)
{
wiek = 22;
rok+=(wiek*100);
}
else if (miesiac > 80 && miesiac < 93)
{
wiek = 18;
rok+=(wiek*100);
}
if(rok % 4 == 0){
if(rok % 100 == 0){
if(rok % 400 == 0) return '1';
else return '2';
}
else return '1';
}
else return '2';
}
char dzien_tygodnia(int rok, int miesiac, int dzien)
{
int wiek = 0;
if (miesiac > 0 && miesiac < 13)
{
wiek = 19;
miesiac -= 2;
}
else if (miesiac > 20 && miesiac < 33)
{
wiek = 20;
miesiac -= 22;
}
else if (miesiac > 40 && miesiac < 53)
{
wiek = 21;
miesiac -= 42;
}
else if (miesiac > 60 && miesiac < 73)
{
wiek = 22;
miesiac -= 62;
}
else if (miesiac > 80 && miesiac < 93)
{
wiek = 18;
miesiac -= 62;
}
if (miesiac < 1)
{
miesiac += 12;
rok -= 1;
}
int weekday=0;
weekday = (floor((26 * miesiac - 2) / 10) + dzien + rok + floor(rok / 4) + floor(wiek / 4) + 5 * wiek);
weekday %= 7;
if (weekday == 0)
return '7';
else if (weekday == 1)
return '1';
else if (weekday == 2)
return '2';
else if (weekday == 3)
return '3';
else if (weekday == 4)
return '4';
else if (weekday == 5)
return '5';
else return '6';
}
int main()
{
string kod;
int testy;
cin >> kod >> testy;
int ile = 0;
int wynik = 0;
string test_pesel = {'1', '3', '7', '9', '1', '3', '7', '9', '1', '3', '1'};
for (int i = 0; i < 3; i++)
{
if (kod[i] != '0')
ile++;
}
for (int k = 0; k < testy; k++)
{
string pesel;
cin >> pesel;
int ilosc = 0;
bool szukaj=0;
int nr = 0;
for (int i = 0; i < 11; i++)
{
if (pesel[i] == '?')
{
szukaj = true;
nr = i;
}
}
int szukana = 1;
int suma = 0;
if (szukaj == true)
{
for (int i = 0; i < 11; i++)
{
if (i != nr)
{
suma += ((pesel[i] - 48) * (test_pesel[i] - 48));
}
}
int suma_dwa = suma;
while (suma_dwa % 10 != 0)
{
suma_dwa = suma;
suma_dwa += (test_pesel[nr] - 48) * szukana;
szukana++;
}
szukana -= 1;
string zmiana=to_string(szukana);
pesel.replace(nr, 1, zmiana);
}
int suma_test=0;
for(int i=0; i<11; i++){
suma_test+=((pesel[i] - 48) * (test_pesel[i] - 48));
}
if(suma_test % 10 == 0){
if (kod[0] != '0')
{
char wartosc_1 = plec(pesel[9] - 48);
if (wartosc_1 == kod[0])
{
ilosc++;
}
}
if (kod[2] != '0')
{
char wartosc_2 = przestepny(stoi(pesel.substr(0, 2)), stoi(pesel.substr(2, 2)));
if (wartosc_2 == kod[2])
{
ilosc++;
}
}
if (kod[1] != '0')
{
char wartosc_3 = dzien_tygodnia(stoi(pesel.substr(0, 2)), stoi(pesel.substr(2, 2)), stoi(pesel.substr(4, 2)));
if (wartosc_3 == kod[1])
{
ilosc++;
}
}
if (ilosc == ile)
{
wynik++;
}
}
}
cout << wynik;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8bWF0aC5oPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNoYXIgcGxlYyhpbnQgcGVzZWwpCnsKCiAgICBpZiAocGVzZWwgJSAyID09IDApCiAgICAgICAgcmV0dXJuICcyJzsKICAgIGVsc2UKICAgICAgICByZXR1cm4gJzEnOwoKfQoKY2hhciBwcnplc3RlcG55KGludCByb2ssIGludCBtaWVzaWFjKQp7CiAgICBpbnQgd2llaz0wOwoKICAgIGlmIChtaWVzaWFjID4gMCAmJiBtaWVzaWFjIDwgMTMpCiAgICB7CiAgICAgICAgd2llayA9IDE5OwogICAgICAgIHJvays9KHdpZWsqMTAwKTsKICAgICAgICAKICAgIH0KICAgIGVsc2UgaWYgKG1pZXNpYWMgPiAyMCAmJiBtaWVzaWFjIDwgMzMpCiAgICB7CiAgICAgICAgd2llayA9IDIwOwogICAgICAgIHJvays9KHdpZWsqMTAwKTsKICAgICAgICAKICAgIH0KICAgIGVsc2UgaWYgKG1pZXNpYWMgPiA0MCAmJiBtaWVzaWFjIDwgNTMpCiAgICB7CiAgICAgICAgd2llayA9IDIxOwogICAgICAgIHJvays9KHdpZWsqMTAwKTsKICAgICAgICAKICAgIH0KCiAgICBlbHNlIGlmIChtaWVzaWFjID4gNjAgJiYgbWllc2lhYyA8IDczKQogICAgewogICAgICAgIHdpZWsgPSAyMjsKICAgICAgICByb2srPSh3aWVrKjEwMCk7CiAgICAgICAgCiAgICB9CgogICAgZWxzZSBpZiAobWllc2lhYyA+IDgwICYmIG1pZXNpYWMgPCA5MykKICAgIHsKICAgICAgICB3aWVrID0gMTg7CiAgICAgICAgcm9rKz0od2llayoxMDApOwogICAgICAgIAogICAgfQogICAgCiAgICBpZihyb2sgJSA0ID09IDApewogICAgICAgIGlmKHJvayAlIDEwMCA9PSAwKXsKICAgICAgICAgICAgaWYocm9rICUgNDAwID09IDApIHJldHVybiAnMSc7CiAgICAgICAgICAgIGVsc2UgcmV0dXJuICcyJzsKCiAgICAgICAgfQogICAgICAgIGVsc2UgcmV0dXJuICcxJzsKICAgIH0KICAgIGVsc2UgcmV0dXJuICcyJzsKCn0KCmNoYXIgZHppZW5fdHlnb2RuaWEoaW50IHJvaywgaW50IG1pZXNpYWMsIGludCBkemllbikKewoKICAgIGludCB3aWVrID0gMDsKCiAgICBpZiAobWllc2lhYyA+IDAgJiYgbWllc2lhYyA8IDEzKQogICAgewogICAgICAgIHdpZWsgPSAxOTsKICAgICAgICBtaWVzaWFjIC09IDI7CiAgICB9CiAgICBlbHNlIGlmIChtaWVzaWFjID4gMjAgJiYgbWllc2lhYyA8IDMzKQogICAgewogICAgICAgIHdpZWsgPSAyMDsKICAgICAgICBtaWVzaWFjIC09IDIyOwogICAgfQogICAgZWxzZSBpZiAobWllc2lhYyA+IDQwICYmIG1pZXNpYWMgPCA1MykKICAgIHsKICAgICAgICB3aWVrID0gMjE7CiAgICAgICAgbWllc2lhYyAtPSA0MjsKICAgIH0KCiAgICBlbHNlIGlmIChtaWVzaWFjID4gNjAgJiYgbWllc2lhYyA8IDczKQogICAgewogICAgICAgIHdpZWsgPSAyMjsKICAgICAgICBtaWVzaWFjIC09IDYyOwogICAgfQoKICAgIGVsc2UgaWYgKG1pZXNpYWMgPiA4MCAmJiBtaWVzaWFjIDwgOTMpCiAgICB7CiAgICAgICAgd2llayA9IDE4OwogICAgICAgIG1pZXNpYWMgLT0gNjI7CiAgICB9CgogICAgaWYgKG1pZXNpYWMgPCAxKQogICAgewogICAgICAgIG1pZXNpYWMgKz0gMTI7CiAgICAgICAgcm9rIC09IDE7CiAgICB9CgogICAgaW50IHdlZWtkYXk9MDsKCiAgICB3ZWVrZGF5ID0gKGZsb29yKCgyNiAqIG1pZXNpYWMgLSAyKSAvIDEwKSArIGR6aWVuICsgcm9rICsgZmxvb3Iocm9rIC8gNCkgKyBmbG9vcih3aWVrIC8gNCkgKyA1ICogd2llayk7CgogICAgd2Vla2RheSAlPSA3OwoKICAgIGlmICh3ZWVrZGF5ID09IDApCiAgICAgICAgcmV0dXJuICc3JzsKICAgIGVsc2UgaWYgKHdlZWtkYXkgPT0gMSkKICAgICAgICByZXR1cm4gJzEnOwogICAgZWxzZSBpZiAod2Vla2RheSA9PSAyKQogICAgICAgIHJldHVybiAnMic7CiAgICBlbHNlIGlmICh3ZWVrZGF5ID09IDMpCiAgICAgICAgcmV0dXJuICczJzsKICAgIGVsc2UgaWYgKHdlZWtkYXkgPT0gNCkKICAgICAgICByZXR1cm4gJzQnOwogICAgZWxzZSBpZiAod2Vla2RheSA9PSA1KQogICAgICAgIHJldHVybiAnNSc7CiAgICBlbHNlIHJldHVybiAnNic7CiAgICAgICAgCgp9CgppbnQgbWFpbigpCnsKCiAgICBzdHJpbmcga29kOwogICAgaW50IHRlc3R5OwoKICAgIGNpbiA+PiBrb2QgPj4gdGVzdHk7CgogICAgaW50IGlsZSA9IDA7CiAgICBpbnQgd3luaWsgPSAwOwoKICAgIHN0cmluZyB0ZXN0X3Blc2VsID0geycxJywgJzMnLCAnNycsICc5JywgJzEnLCAnMycsICc3JywgJzknLCAnMScsICczJywgJzEnfTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKICAgIHsKICAgICAgICBpZiAoa29kW2ldICE9ICcwJykKICAgICAgICAgICAgaWxlKys7CiAgICB9CgogICAgZm9yIChpbnQgayA9IDA7IGsgPCB0ZXN0eTsgaysrKQogICAgewoKICAgICAgICBzdHJpbmcgcGVzZWw7CiAgICAgICAgY2luID4+IHBlc2VsOwoKICAgICAgICBpbnQgaWxvc2MgPSAwOwogICAgICAgIGJvb2wgc3p1a2FqPTA7CiAgICAgICAgaW50IG5yID0gMDsKCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMTsgaSsrKQogICAgICAgIHsKCiAgICAgICAgICAgIGlmIChwZXNlbFtpXSA9PSAnPycpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN6dWthaiA9IHRydWU7CiAgICAgICAgICAgICAgICBuciA9IGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGludCBzenVrYW5hID0gMTsKICAgICAgICBpbnQgc3VtYSA9IDA7CgogICAgICAgIGlmIChzenVrYWogPT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTE7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGkgIT0gbnIpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3VtYSArPSAoKHBlc2VsW2ldIC0gNDgpICogKHRlc3RfcGVzZWxbaV0gLSA0OCkpOwogICAgICAgICAgICAgICAgfQogICAgCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGludCBzdW1hX2R3YSA9IHN1bWE7CgogICAgICAgICAgICB3aGlsZSAoc3VtYV9kd2EgJSAxMCAhPSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdW1hX2R3YSA9IHN1bWE7CiAgICAgICAgICAgICAgICBzdW1hX2R3YSArPSAodGVzdF9wZXNlbFtucl0gLSA0OCkgKiBzenVrYW5hOwogICAgICAgICAgICAgICAgc3p1a2FuYSsrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzenVrYW5hIC09IDE7CiAgICAgICAgICAgIHN0cmluZyB6bWlhbmE9dG9fc3RyaW5nKHN6dWthbmEpOwoKICAgICAgICAgICAgcGVzZWwucmVwbGFjZShuciwgMSwgem1pYW5hKTsKCiAgICAgICAgfQoKICAgICAgICBpbnQgc3VtYV90ZXN0PTA7CiAgICAgICAgZm9yKGludCBpPTA7IGk8MTE7IGkrKyl7CiAgICAgICAgICAgIHN1bWFfdGVzdCs9KChwZXNlbFtpXSAtIDQ4KSAqICh0ZXN0X3Blc2VsW2ldIC0gNDgpKTsKICAgICAgICB9CgogICAgICAgIGlmKHN1bWFfdGVzdCAlIDEwID09IDApewoKICAgICAgICAgICAgaWYgKGtvZFswXSAhPSAnMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNoYXIgd2FydG9zY18xID0gcGxlYyhwZXNlbFs5XSAtIDQ4KTsKICAgICAgICAgICAgICAgIGlmICh3YXJ0b3NjXzEgPT0ga29kWzBdKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlsb3NjKys7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoa29kWzJdICE9ICcwJykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2hhciB3YXJ0b3NjXzIgPSBwcnplc3RlcG55KHN0b2kocGVzZWwuc3Vic3RyKDAsIDIpKSwgc3RvaShwZXNlbC5zdWJzdHIoMiwgMikpKTsKICAgICAgICAgICAgICAgIGlmICh3YXJ0b3NjXzIgPT0ga29kWzJdKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlsb3NjKys7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChrb2RbMV0gIT0gJzAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGFyIHdhcnRvc2NfMyA9IGR6aWVuX3R5Z29kbmlhKHN0b2kocGVzZWwuc3Vic3RyKDAsIDIpKSwgc3RvaShwZXNlbC5zdWJzdHIoMiwgMikpLCBzdG9pKHBlc2VsLnN1YnN0cig0LCAyKSkpOwogICAgICAgICAgICAgICAgaWYgKHdhcnRvc2NfMyA9PSBrb2RbMV0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWxvc2MrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlsb3NjID09IGlsZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgd3luaWsrKzsKICAgICAgICAgICAgfQoKICAgICAgICB9CgogICAgfQoKICAgIGNvdXQgPDwgd3luaWs7CgogICAgcmV0dXJuIDA7Cn0=