#include <iostream>
#include <string>
#include <set>
using namespace std;
class Person {
public:
Person(string name, string password) : name(name), password(password) { }
bool operator < (const Person& next) const //don't forget const
{ return name < next.name; }
bool operator == (const Person& next) const
{ return name == next.name; }
const string getPassward() const { return password; }
private:
string name;
string password;
};
int main()
{
int n;
while (cin >> n) {
set<Person> regPerson;
set<Person> logedPerson;
while (n--) {
string operation;
cin >> operation;
if (operation == "register") {
string name, password;
cin >> name >> password;
Person p(name, password);
if (regPerson.empty()) {
regPerson.insert(p);
cout << "success: new user added\n";
continue;
}
set<Person>::iterator it = regPerson.find(p);
if (it == regPerson.end()) {
cout << "success: new user added\n";
regPerson.insert(p);
} else {
cout << "fail: user already exists\n";
}
} else if (operation == "login") {
string name, password;
cin >> name >> password;
Person p(name, password);
set<Person>::iterator it = regPerson.find(p);
if (logedPerson.empty()) {
if (it == regPerson.end()) {
cout << "fail: no such user\n";
} else {
if (p.getPassward() != it->getPassward()) {
cout << "fail: incorrect password\n";
} else {
cout << "success: user logged in\n";
logedPerson.insert(p);
}
}
continue;
}
if (it == regPerson.end()) {
cout << "fail: no such user\n";
} else {
if (p.getPassward() != it->getPassward()) {
cout << "fail: incorrect password\n";
} else {
if (logedPerson.find(p) != logedPerson.end()) {
cout << "fail: already logged in\n";
} else {
cout << "success: user logged in\n";
logedPerson.insert(p);
}
}
}
} else if (operation == "logout") {
string name;
cin >> name;
Person p(name, "");
set<Person>::iterator it = regPerson.find(p);
if (it == regPerson.end()) {
cout << "fail: no such user\n";
} else {
set<Person>::iterator it = logedPerson.find(p);
if (it == logedPerson.end()) {
cout << "fail: already logged out\n";
} else {
cout << "success: user logged out\n";
logedPerson.erase(it);
}
}
}
}
}
return 0;
}