#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n;
map <string,int> mp;
string sss[1001];
bool kobebryant(string s)
{
string tm="";
for(int i=0;i<s.size();i++)
{
if(!(s[i]>='0'&&s[i]<='9'))
tm+=s[i];
}
if(tm!="...:")
return false;
int flg=0;
for(int i=0;i<s.size();i++)
{
if(s[i]>'0'&&s[i]<='9'&&flg==0)
flg=1;
if(!(s[i]>='0'&&s[i]<='9'))
flg=0;
if(s[i]=='0'&&s[i+1]=='0'&&flg==0)
return false;
}
int a[6],tmp=1,ans=0,t=0,flag=0;
for(int i=s.size()-1;i>=0;i--)
{
if(!(s[i]>='0'&&s[i]<='9'))
{
a[tmp]=ans;
ans=0;
if(flag==0)
return false;
tmp++;
flag=0;
t=0;
continue;
}
else
ans+=(s[i]-'0')*pow(10,t),t++,flag=1;
}
//cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<" "<<a[4]<<" "<<a[5]<<endl;
if(a[1]>65535||a[2]>255||a[3]>255||a[4]>255||a[5]>255)
return false;
return true;
}
void Merge1(int id,string s)
{
if(mp[s]!=0)
{
//sss[id]="FAIL";
cout<<"FAIL"<<endl;
return;
}
else
{
mp[s]=id;
//sss[id]="OK";
cout<<"OK"<<endl;
return;
}
}
void Merge2(int id,string s)
{
string ttt="";
int tt=0;
int sada;
if(mp[s]==0)
{
//sss[id]="FAIL";
cout<<"FAIL"<<endl;
return;
}
else
{
cout<<mp[s]<<endl;
//sada=mp[s];
//while(sada>0)
//{
// ttt[tt]=sada%10+'0';
// sada/=10;
// tt++;
//}
//for(int i=tt-1;i>=0;i--)
// sss[id]+=ttt[i];
return;
}
}
signed main()
{
IOS
cin>>n;
for(int i=1;i<=n;i++)
{
string id,s;
cin>>id>>s;
if(!kobebryant(s))
{
//sss[i]="ERR";
cout<<"ERR"<<endl;
continue;
}
if(id=="Server")
Merge1(i,s);
else
Merge2(i,s);
}
//cout<<endl;
//for(int i=1;i<=n;i++)
// cout<<sss[i]<<endl;
}
求hack数据或调代码qwq