#include <iostream>
#include <iomanip>
#include <cctype>
#include <sstream>
using namespace std;
bool sprawdz_imie(char wyraz[])
{
int k=0;
while(wyraz[k]!=59)
{
k++;
}
for(int g=5; g<k; g++)
{
if(isalpha(wyraz[g])==0)
{
return false;
}
}
if(wyraz[5]>=65 && wyraz[5]<=90 && k>=6 && k<=16)
{
return true;
}
else
{
return false;
}
}
bool sprawdz_nazwisko(char wyraz[])
{
int k=0;
while(wyraz[k]!=59)
{
k++;
}
for(int g=9; g<k; g++)
{
if(isalpha(wyraz[g])==0)
{
return false;
}
}
if(wyraz[9]>=65 && wyraz[9]<=90 && k>=10 && k<=30)
{
return true;
}
else
{
return false;
}
}
bool sprawdz_data(char wyraz[])
{
string rok="";
string miesiac="";
string dzien="";
for(int i=4; i<8; i++)
{
rok+=wyraz[i];
}
for(int i=9; i<11; i++)
{
miesiac+=wyraz[i];
}
for(int i=12; i<14; i++)
{
dzien+=wyraz[i];
}
int j,k,l;
istringstream konwert1(rok);
istringstream konwert2(miesiac);
istringstream konwert3(dzien);
konwert1 >> j;
konwert2 >> k;
konwert3 >> l;
if(j>=1900 && j<=2000 && k>=1 && k<=12 && l>=1 && l<=31)return true;
else return false;
}
int main()
{
char imie[16];
char nazwisko[30];
char data[14];
char tekst[4];
while(cin>>imie>>nazwisko>>tekst>>data)
{
if(sprawdz_imie(imie)!=true)cout<<0<<endl;
else if(sprawdz_imie(imie)==true && sprawdz_nazwisko(nazwisko)!=true)cout<<1<<endl;
else if(sprawdz_imie(imie)==true && sprawdz_nazwisko(nazwisko)==true && sprawdz_data(data)!=true)cout<<2<<endl;
else cout<<3<<endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGNjdHlwZT4KI2luY2x1ZGUgPHNzdHJlYW0+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmJvb2wgc3ByYXdkel9pbWllKGNoYXIgd3lyYXpbXSkKewogICAgaW50IGs9MDsKICAgIHdoaWxlKHd5cmF6W2tdIT01OSkKICAgIHsKICAgICAgICBrKys7CiAgICB9CiAgICBmb3IoaW50IGc9NTsgZzxrOyBnKyspCiAgICB7CiAgICAgICAgaWYoaXNhbHBoYSh3eXJheltnXSk9PTApCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQogICAgaWYod3lyYXpbNV0+PTY1ICYmIHd5cmF6WzVdPD05MCAmJiBrPj02ICYmIGs8PTE2KQogICAgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKCmJvb2wgc3ByYXdkel9uYXp3aXNrbyhjaGFyIHd5cmF6W10pCnsKCiAgICBpbnQgaz0wOwogICAgd2hpbGUod3lyYXpba10hPTU5KQogICAgewogICAgICAgIGsrKzsKICAgIH0KICAgIGZvcihpbnQgZz05OyBnPGs7IGcrKykKICAgIHsKICAgICAgICBpZihpc2FscGhhKHd5cmF6W2ddKT09MCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CiAgICBpZih3eXJhels5XT49NjUgJiYgd3lyYXpbOV08PTkwICYmIGs+PTEwICYmIGs8PTMwKQogICAgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKCmJvb2wgc3ByYXdkel9kYXRhKGNoYXIgd3lyYXpbXSkKewogICAgICAgc3RyaW5nIHJvaz0iIjsKICAgICAgIHN0cmluZyBtaWVzaWFjPSIiOwogICAgICAgc3RyaW5nIGR6aWVuPSIiOwogICAgICAgZm9yKGludCBpPTQ7IGk8ODsgaSsrKQogICAgICAgewogICAgICAgICAgIHJvays9d3lyYXpbaV07CiAgICAgICB9CiAgICAgICBmb3IoaW50IGk9OTsgaTwxMTsgaSsrKQogICAgICAgewogICAgICAgICAgIG1pZXNpYWMrPXd5cmF6W2ldOwogICAgICAgfQogICAgICAgZm9yKGludCBpPTEyOyBpPDE0OyBpKyspCiAgICAgICB7CiAgICAgICAgICAgZHppZW4rPXd5cmF6W2ldOwogICAgICAgfQoKCiAgICAgICBpbnQgaixrLGw7CiAgICAgICBpc3RyaW5nc3RyZWFtIGtvbndlcnQxKHJvayk7CiAgICAgICBpc3RyaW5nc3RyZWFtIGtvbndlcnQyKG1pZXNpYWMpOwogICAgICAgaXN0cmluZ3N0cmVhbSBrb253ZXJ0Myhkemllbik7CiAgICAgICBrb253ZXJ0MSA+PiBqOwogICAgICAga29ud2VydDIgPj4gazsKICAgICAgIGtvbndlcnQzID4+IGw7CgogICAgICAgaWYoaj49MTkwMCAmJiBqPD0yMDAwICYmIGs+PTEgJiYgazw9MTIgJiYgbD49MSAmJiBsPD0zMSlyZXR1cm4gdHJ1ZTsKICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwp9CgoKaW50IG1haW4oKQp7CiAgICBjaGFyIGltaWVbMTZdOwogICAgY2hhciBuYXp3aXNrb1szMF07CiAgICBjaGFyIGRhdGFbMTRdOwogICAgY2hhciB0ZWtzdFs0XTsKICAgIHdoaWxlKGNpbj4+aW1pZT4+bmF6d2lza28+PnRla3N0Pj5kYXRhKQogICAgewogICAgaWYoc3ByYXdkel9pbWllKGltaWUpIT10cnVlKWNvdXQ8PDA8PGVuZGw7CiAgICBlbHNlIGlmKHNwcmF3ZHpfaW1pZShpbWllKT09dHJ1ZSAmJiBzcHJhd2R6X25hendpc2tvKG5hendpc2tvKSE9dHJ1ZSljb3V0PDwxPDxlbmRsOwogICAgZWxzZSBpZihzcHJhd2R6X2ltaWUoaW1pZSk9PXRydWUgJiYgc3ByYXdkel9uYXp3aXNrbyhuYXp3aXNrbyk9PXRydWUgJiYgc3ByYXdkel9kYXRhKGRhdGEpIT10cnVlKWNvdXQ8PDI8PGVuZGw7CiAgICBlbHNlIGNvdXQ8PDM8PGVuZGw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=
SW1pZTogUm9tYW47IE5hendpc2tvOiBLb3dhbHNraTY7IERhdGEgdXIuOiAxOTAwLTAxLTMwCkltaWU6IEFuZHJ6ZWo7IE5hendpc2tvOiBLb3dhbDsgRGF0YSB1ci46IDE4OTktMTAtMTAKSW1pZTogcm9tYW47IE5hendpc2tvOiBOby13YWs7IERhdGEgdXIuOiAxMDk5LTExLTEyCkltaWU6IEFsaWNqYTsgTmF6d2lza286IE5vd2FrOyBEYXRhIHVyLjogMTk5MC0wMS0wMQ==
Imie: Roman; Nazwisko: Kowalski6; Data ur.: 1900-01-30
Imie: Andrzej; Nazwisko: Kowal; Data ur.: 1899-10-10
Imie: roman; Nazwisko: No-wak; Data ur.: 1099-11-12
Imie: Alicja; Nazwisko: Nowak; Data ur.: 1990-01-01