#include<bits/stdc++.h>
using namespace std;
const int N = 1005;
int n;
struct Server
{
int id;
string name;
};
Server servers[N];
int serversCnt;
bool isValid(string addr)
{
int n1=0, n2=0;
for(int i = 0; i < addr.size(); i++)
{
if(addr[i] == '.') n1++;
if(addr[i] == ':') n2++;
}
if(n1 != 3 || n2 != 1) return 0;
if(addr[0] == '0' && addr[1] != '.') return 0;
for(int i = 0; i < addr.size(); i++)
{
if(addr[i] == '.' || addr[i] == ':')
{
if(i== addr.size()-1) return 0;
if( i + 2 < addr.size() && addr[i + 1] == '0' && isdigit(addr[i + 2]) )
return 0;
}
}
int a, b, c,d, e;
int res = sscanf(addr.c_str(),"%d.%d.%d.%d:%d", &a,&b, &c, &d, &e);
if(res != 5) return 0;
if(a < 0 || a > 255) return 0;
if(b < 0 || b > 255) return 0;
if(c < 0 || c > 255) return 0;
if(d < 0 || d > 255) return 0;
if(e < 0 || e > 65535) return 0;
return 1;
}
int isOK(string addr)
{
if(isValid(addr))
{
for(int i = 1; i <= serversCnt; i++)
{
if(addr == servers[i].name)
{
return 2;
}
}
return 1;
}
return 3;
}
void handleServer(string addr,int id)
{
int res = isOK(addr);
if(res == 1)
{
servers[++serversCnt].id = id;
servers[serversCnt].name = addr;
cout << "OK" << endl;
}
else if(res == 2)
{
cout << "FAIL" << endl;
}
else{
cout << "ERR" << endl;
}
}
void handleClient(string addr)
{
if(isValid(addr))
{
for(int i = 1; i <= serversCnt; i++)
{
if(servers[i].name == addr)
{
cout << servers[i].id << endl;
return;
}
}
cout << "FAIL" << endl;
}
else cout << "ERR" << endl;
}
void handle(string op,string addr,int id)
{
if(op == "Server")
{
handleServer(addr,id);
}
else
handleClient(addr);
}
void initInput()
{
cin >> n;
for(int i = 1; i <= n; i++)
{
string op,addr;
cin >> op >> addr;
handle(op,addr,i);
}
}
int main()
{
initInput();
return 0;
}```