#include<bits/stdc++.h>
using namespace std;
string ser[10000],lx;
int n,m,k,l,serx[10000];
bool f[6];
long long zhuan(string s1){
long long o=0;
for(int i=0;i<s1.size();i++){
o=o*10+int(s1[i]-'0');
}
return o;
}
bool qd(string s1,string s2,string s3,string s4,string s5){
if(s1[0]=='0'&&s1.size()>1) return false;
if(s2[0]=='0'&&s2.size()>1) return false;
if(s3[0]=='0'&&s3.size()>1) return false;
if(s4[0]=='0'&&s4.size()>1) return false;
if(s5[0]=='0'&&s5.size()>1) return false;
return true;
}
bool hf(string s1){
string s2="",s3="",s4="",s5="",s6="",p,o;
p=s1;
int k=s1.find('.');
s2=s1.substr(0,k);
s1.erase(0, k+1);
k=s1.find('.');
s3=s1.substr(0,k);
s1.erase(0, k+1);
k=s1.find('.');
s4=s1.substr(0,k);
s1.erase(0, k+1);
k=s1.find(':');
s5=s1.substr(0,k);
s1.erase(0, k+1);
s6=s1.substr(0,s1.size());
o=s2+"."+s3+"."+s4+"."+s5+":"+s6;
if(o!=p) return false;
if(!qd(s2,s3,s4,s5,s6)) return false;
if(zhuan(s2)>=0&&zhuan(s3)>=0&&zhuan(s4)>=0&&zhuan(s5)>=0&&zhuan(s5)<=255&&zhuan(s6)>=0&&zhuan(s6)<=65535){
return true;
}
return false;
}
int find1(string s1,int i){
for(int j=1;j<i;j++){
if(s1==ser[j]) return j;
}
return 0;
}
int main(){
cin>>n;
string u;
int v=0;
for(int i=1;i<=n;i++){
cin>>lx;
if(lx=="Server"){
cin>>ser[i];
if(hf(ser[i])&&find1(ser[i],i)==0){
if(ser[i]==".1.1.1:1"||ser[i]=="1.1.1.:1"||ser[i]=="1.1.1.1:"){
cout<<"ERR"<<endl;
continue;
}
serx[k]=i;
k++;
cout<<"OK"<<endl;
}else if(!hf(ser[i])){
cout<<"ERR"<<endl;
}else{
cout<<"FAIL"<<endl;
}
}else{
cin>>u;
if(hf(u)){
if(u==".1.1.1:1"||u=="1.1.1.:1"||u=="1.1.1.1:"){
cout<<"ERR"<<endl;
continue;
}
if(find1(u,i)>0) cout<<find1(u,i)<<endl;
else cout<<"FAIL"<<endl;
}else{
cout<<"ERR"<<endl;
}
}
}
return 0;
}