#include <iostream>
#include <string>
using namespace std;
string formularz, imie, nazwisko, rok, miesiac, dzien;
int dlugoscStringa, dlImie, dlNazwisko, Srednik1_int,Srednik2_int, rok_int, miesiac_int, dzien_int;
size_t Srednik1, Srednik2;
bool imieOK, nazwiskoOK, dataOK;
int main()
{
while(getline(cin,formularz))
{
imieOK=0;
nazwiskoOK = 0;
dataOK = 0;
dlugoscStringa=formularz.length();
Srednik1=formularz.find(";");
Srednik2=formularz.find(";",Srednik1+1);
Srednik1_int=int(Srednik1);
Srednik2_int=int(Srednik2);
imie = formularz.substr(6,Srednik1_int-6);
nazwisko = formularz.substr(Srednik1_int+12,Srednik2_int-Srednik1_int-12);
rok = formularz.substr(Srednik2_int+12,4);
miesiac = formularz.substr(Srednik2_int+17,2);
dzien = formularz.substr(Srednik2_int+20,2);
dlImie=imie.length();
dlNazwisko=nazwisko.length();
//imie
if((imie[0]>=65)and(imie[0]<=90))
{
for (int i=1;i<dlImie;i++)
{
if((imie[i]>=97)and(imie[i]<=122))
imieOK=true;
else
{
imieOK = false;
break;
}
}
}
else
imieOK = false;
//nazwisko
if((nazwisko[0]>=65)and(nazwisko[0]<=90))
{
for (int i=1;i<dlNazwisko;i++)
{
if((nazwisko[i]>=97)and(nazwisko[i]<=122))
{
nazwiskoOK = true;
}
else
{
nazwiskoOK = false;
break;
}
}
}
else
nazwiskoOK = false;
//data
rok_int= stoi(rok);
miesiac_int = stoi(miesiac);
dzien_int = stoi(dzien);
if((rok_int>=1900)and(rok_int<=2000))
if((miesiac_int>=1)and(miesiac_int<=12))
if((dzien_int>=1)and(dzien_int<=31))
dataOK = true;
else
dataOK=false;
if (imieOK==true)
if(nazwiskoOK==true)
if(dataOK==true)
cout << 3 << endl;
else
cout << 2 << endl;
else
cout << 1 << endl;
else
cout << 0 << endl ;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cmluZyBmb3JtdWxhcnosIGltaWUsIG5hendpc2tvLCByb2ssIG1pZXNpYWMsIGR6aWVuOwppbnQgZGx1Z29zY1N0cmluZ2EsIGRsSW1pZSwgZGxOYXp3aXNrbywgU3JlZG5pazFfaW50LFNyZWRuaWsyX2ludCwgcm9rX2ludCwgbWllc2lhY19pbnQsIGR6aWVuX2ludDsKc2l6ZV90IFNyZWRuaWsxLCBTcmVkbmlrMjsKYm9vbCBpbWllT0ssIG5hendpc2tvT0ssIGRhdGFPSzsKCmludCBtYWluKCkKewoKICAgIHdoaWxlKGdldGxpbmUoY2luLGZvcm11bGFyeikpCiAgICB7CgogICAgICAgIGltaWVPSz0wOwogICAgICAgIG5hendpc2tvT0sgPSAwOwogICAgICAgIGRhdGFPSyA9IDA7CgogICAgICAgIGRsdWdvc2NTdHJpbmdhPWZvcm11bGFyei5sZW5ndGgoKTsKCiAgICAgICAgU3JlZG5pazE9Zm9ybXVsYXJ6LmZpbmQoIjsiKTsKICAgICAgICBTcmVkbmlrMj1mb3JtdWxhcnouZmluZCgiOyIsU3JlZG5pazErMSk7CgogICAgICAgIFNyZWRuaWsxX2ludD1pbnQoU3JlZG5pazEpOwogICAgICAgIFNyZWRuaWsyX2ludD1pbnQoU3JlZG5pazIpOwoKICAgICAgICBpbWllID0gZm9ybXVsYXJ6LnN1YnN0cig2LFNyZWRuaWsxX2ludC02KTsKCiAgICAgICAgbmF6d2lza28gPSBmb3JtdWxhcnouc3Vic3RyKFNyZWRuaWsxX2ludCsxMixTcmVkbmlrMl9pbnQtU3JlZG5pazFfaW50LTEyKTsKCiAgICAgICAgcm9rID0gZm9ybXVsYXJ6LnN1YnN0cihTcmVkbmlrMl9pbnQrMTIsNCk7CgogICAgICAgIG1pZXNpYWMgPSBmb3JtdWxhcnouc3Vic3RyKFNyZWRuaWsyX2ludCsxNywyKTsKCiAgICAgICAgZHppZW4gPSBmb3JtdWxhcnouc3Vic3RyKFNyZWRuaWsyX2ludCsyMCwyKTsKCiAgICAgICAgZGxJbWllPWltaWUubGVuZ3RoKCk7CiAgICAgICAgZGxOYXp3aXNrbz1uYXp3aXNrby5sZW5ndGgoKTsKCiAgICAgICAgLy9pbWllCgogICAgICAgIGlmKChpbWllWzBdPj02NSlhbmQoaW1pZVswXTw9OTApKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgaT0xO2k8ZGxJbWllO2krKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZigoaW1pZVtpXT49OTcpYW5kKGltaWVbaV08PTEyMikpCiAgICAgICAgICAgICAgICAgICAgaW1pZU9LPXRydWU7CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpbWllT0sgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgICBpbWllT0sgPSBmYWxzZTsKCiAgICAgICAgLy9uYXp3aXNrbwogICAgICAgIGlmKChuYXp3aXNrb1swXT49NjUpYW5kKG5hendpc2tvWzBdPD05MCkpCiAgICAgICAgewogICAgICAgICAgICBmb3IgKGludCBpPTE7aTxkbE5hendpc2tvO2krKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICBpZigobmF6d2lza29baV0+PTk3KWFuZChuYXp3aXNrb1tpXTw9MTIyKSkKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG5hendpc2tvT0sgPSB0cnVlOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIG5hendpc2tvT0sgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgICAgbmF6d2lza29PSyA9IGZhbHNlOwoKICAgICAgICAvL2RhdGEKCiAgICAgICAgcm9rX2ludD0gc3RvaShyb2spOwogICAgICAgIG1pZXNpYWNfaW50ID0gc3RvaShtaWVzaWFjKTsKICAgICAgICBkemllbl9pbnQgPSBzdG9pKGR6aWVuKTsKCiAgICAgICAgaWYoKHJva19pbnQ+PTE5MDApYW5kKHJva19pbnQ8PTIwMDApKQogICAgICAgICAgICBpZigobWllc2lhY19pbnQ+PTEpYW5kKG1pZXNpYWNfaW50PD0xMikpCiAgICAgICAgICAgICAgICBpZigoZHppZW5faW50Pj0xKWFuZChkemllbl9pbnQ8PTMxKSkKICAgICAgICAgICAgICAgICAgICBkYXRhT0sgPSB0cnVlOwogICAgICAgIGVsc2UKICAgICAgICAgICAgZGF0YU9LPWZhbHNlOwoKICAgICAgICBpZiAoaW1pZU9LPT10cnVlKQogICAgICAgICAgICBpZihuYXp3aXNrb09LPT10cnVlKQogICAgICAgICAgICAgICAgaWYoZGF0YU9LPT10cnVlKQogICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgMyA8PCBlbmRsOwogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgMiA8PCBlbmRsOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBjb3V0IDw8IDEgPDwgZW5kbDsKICAgICAgICBlbHNlCiAgICAgICAgICAgIGNvdXQgPDwgMCA8PCBlbmRsIDsKCiAgICB9CgogICAgcmV0dXJuIDA7Cn0K