#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool dobrylogin(string s)
{
int k, dl = s.length();
if (dl < 3 or dl > 12)
return false;
for (int i = 0; i < dl; ++i)
{
k = (int)s[i];
if (!((k >= 97 and k <= 122) or (k >= 65 and k <= 90) or (k >= 48 and k <= 57)))
return false;
}
return true;
}
bool dobrehaslo(string s)
{
int k, dl = s.length();
if (dl < 5 or dl > 15)
return false;
bool duza, mala, cyfra, specjalny;
duza = mala = cyfra = specjalny = false;
for (int i = 0; i < dl; ++i)
{
k = (int)s[i];
if (k >= 97 and k <= 122)
{
mala = true;
continue;
}
if (k >= 65 and k <= 90)
{
duza = true;
continue;
}
if (k >= 48 and k <= 57)
{
cyfra = true;
continue;
}
specjalny = true;
}
if (mala and duza and cyfra and specjalny)
return true;
else
return false;
}
int main()
{
string typ, l, h;
int x, k;
vector <string> login;
vector <string> haslo;
bool powtorka, istnieje;
cin >> typ >> x;
while (!cin.eof())
{
if (typ[0] == 'r') //rejestracja
while (x)
{
cin >> l >> h;
powtorka = false;
if (dobrylogin(l) and dobrehaslo(h)) //warunek 1: poprawny login i hasło
{
for (int i = 0; i < login.size(); ++i) //warunek 2: login się nie powtarza
if (l == login[i])
{
cout << "Login zajety" << endl;
powtorka = true;
break;
}
if (!powtorka) //jeśli się nie powtarza: zarejestruj
{
login.push_back(l);
haslo.push_back(h);
cout << "Zarejestrowano" << endl;
}
}
else //jeżeli złe niepoprawny format hasła lub loginu: błąd
cout << "Blad" << endl;
x--;
}
else //logowanie
while (x)
{
cin >> l >> h;
istnieje = false;
for (int i = 0; i < login.size(); ++i)
if (l == login[i])
{
istnieje = true;
k = i;
break;
}
if (istnieje)
{
if (h == haslo[k])
cout << "Zalogowano" << endl;
else
cout << "Zle haslo" << endl;
}
else
cout << "Konto nie istnieje" << endl;
x--;
}
cin >> typ >> x;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKYm9vbCBkb2JyeWxvZ2luKHN0cmluZyBzKQp7CiAgICBpbnQgaywgZGwgPSBzLmxlbmd0aCgpOwoKICAgIGlmIChkbCA8IDMgb3IgZGwgPiAxMikKICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkbDsgKytpKQogICAgewogICAgICAgIGsgPSAoaW50KXNbaV07CiAgICAgICAgaWYgKCEoKGsgPj0gOTcgYW5kIGsgPD0gMTIyKSBvciAoayA+PSA2NSBhbmQgayA8PSA5MCkgb3IgKGsgPj0gNDggYW5kIGsgPD0gNTcpKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIGRvYnJlaGFzbG8oc3RyaW5nIHMpCnsKICAgIGludCBrLCBkbCA9IHMubGVuZ3RoKCk7CgogICAgaWYgKGRsIDwgNSBvciBkbCA+IDE1KQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICBib29sIGR1emEsIG1hbGEsIGN5ZnJhLCBzcGVjamFsbnk7CiAgICBkdXphID0gbWFsYSA9IGN5ZnJhID0gc3BlY2phbG55ID0gZmFsc2U7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkbDsgKytpKQogICAgewogICAgICAgIGsgPSAoaW50KXNbaV07CiAgICAgICAgaWYgKGsgPj0gOTcgYW5kIGsgPD0gMTIyKQogICAgICAgIHsKICAgICAgICAgICAgbWFsYSA9IHRydWU7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoayA+PSA2NSBhbmQgayA8PSA5MCkKICAgICAgICB7CiAgICAgICAgICAgIGR1emEgPSB0cnVlOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGsgPj0gNDggYW5kIGsgPD0gNTcpCiAgICAgICAgewogICAgICAgICAgICBjeWZyYSA9IHRydWU7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBzcGVjamFsbnkgPSB0cnVlOwogICAgfQoKICAgIGlmIChtYWxhIGFuZCBkdXphIGFuZCBjeWZyYSBhbmQgc3BlY2phbG55KQogICAgICAgIHJldHVybiB0cnVlOwogICAgZWxzZQogICAgICAgIHJldHVybiBmYWxzZTsKfQoKaW50IG1haW4oKQp7CiAgICBzdHJpbmcgdHlwLCBsLCBoOwogICAgaW50IHgsIGs7CiAgICB2ZWN0b3IgPHN0cmluZz4gbG9naW47CiAgICB2ZWN0b3IgPHN0cmluZz4gaGFzbG87CiAgICBib29sIHBvd3RvcmthLCBpc3RuaWVqZTsKCiAgICBjaW4gPj4gdHlwID4+IHg7CiAgICB3aGlsZSAoIWNpbi5lb2YoKSkKICAgIHsKICAgICAgICBpZiAodHlwWzBdID09ICdyJykgLy9yZWplc3RyYWNqYQogICAgICAgICAgICB3aGlsZSAoeCkKICAgICAgICAgICAgewogICAgICAgICAgICBjaW4gPj4gbCA+PiBoOwogICAgICAgICAgICBwb3d0b3JrYSA9IGZhbHNlOwogICAgICAgICAgICBpZiAoZG9icnlsb2dpbihsKSBhbmQgZG9icmVoYXNsbyhoKSkgICAgLy93YXJ1bmVrIDE6IHBvcHJhd255IGxvZ2luIGkgaGFzxYJvCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9naW4uc2l6ZSgpOyArK2kpICAvL3dhcnVuZWsgMjogbG9naW4gc2nEmSBuaWUgcG93dGFyemEKICAgICAgICAgICAgICAgICAgICBpZiAobCA9PSBsb2dpbltpXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIkxvZ2luIHphamV0eSIgPDwgZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgcG93dG9ya2EgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoIXBvd3RvcmthKSAgICAgIC8vamXFm2xpIHNpxJkgbmllIHBvd3RhcnphOiB6YXJlamVzdHJ1agogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGxvZ2luLnB1c2hfYmFjayhsKTsKICAgICAgICAgICAgICAgICAgICBoYXNsby5wdXNoX2JhY2soaCk7CiAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiWmFyZWplc3Ryb3dhbm8iIDw8IGVuZGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSAgICAgICAgLy9qZcW8ZWxpIHrFgmUgbmllcG9wcmF3bnkgZm9ybWF0IGhhc8WCYSBsdWIgbG9naW51OiBixYLEhWQKICAgICAgICAgICAgICAgIGNvdXQgPDwgIkJsYWQiIDw8IGVuZGw7CiAgICAgICAgICAgIHgtLTsKICAgICAgICAgICAgfQogICAgICAgIGVsc2UgICAgICAgIC8vbG9nb3dhbmllCiAgICAgICAgICAgIHdoaWxlICh4KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjaW4gPj4gbCA+PiBoOwogICAgICAgICAgICAgICAgaXN0bmllamUgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9naW4uc2l6ZSgpOyArK2kpCiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPT0gbG9naW5baV0pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpc3RuaWVqZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGsgPSBpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaXN0bmllamUpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGggPT0gaGFzbG9ba10pCiAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgIlphbG9nb3dhbm8iIDw8IGVuZGw7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBjb3V0IDw8ICJabGUgaGFzbG8iIDw8IGVuZGw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgY291dCA8PCAiS29udG8gbmllIGlzdG5pZWplIiA8PCBlbmRsOwoKICAgICAgICAgICAgICAgIHgtLTsKICAgICAgICAgICAgfQogICAgICAgIGNpbiA+PiB0eXAgPj4geDsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==
cmVnaXN0ZXIgMwpiYWp0ZWsxMyBIYXNsbzEyM0AKQklURUsgMTIzNDU2Nzg5CmJhanRlazEzIGJhanRlSzU1JQpsb2dpbiA1CmJhanRlazEzIGJhanRlSzU1JQpiYWp0ZWsxMyBIYXNsbzEyM0AKQklURUsgMTIzNDU2Nzg5CmJhanRvY2p1c3ogaGFzZWxrbzQ5CmJpdGFyaXVzeiAxMjNoYVNsbyFAIwpyZWdpc3RlciAxCkJJVEVLIERvYnJlaGFzbG8xIQpsb2dpbiAxCkJJVEVLIERvYnJlaGFzbG8xIQ==
register 3
bajtek13 Haslo123@
BITEK 123456789
bajtek13 bajteK55%
login 5
bajtek13 bajteK55%
bajtek13 Haslo123@
BITEK 123456789
bajtocjusz haselko49
bitariusz 123haSlo!@#
register 1
BITEK Dobrehaslo1!
login 1
BITEK Dobrehaslo1!