#include <iostream>
#include <string>
using namespace std;
int n,count1=1,count2=1,m,wjx,c1,c2;
string s,t;
bool w;
long long tmp[6],num;
struct node{
long long a1,a2,a3,a4,a5;
int x;
};
node sa[1005];
node ca[1005];
int f(int a,long long b){
for(int i = 1;i<a;i++)b*=10;
return b;
}
bool check(bool yes,string t,int ii){
num=0;
m=0;
wjx=1;
c1=0;
c2=0;
if(t.length()<9 || t.length()>21)return 1;
for(int i = 0;i<=t.length();i++){
if(t[i]=='.' || t[i]==':'){
if(t[i]=='.'){
c1++;
if(c1>3)return 1;
}
if(t[i]==':'){
c2++;
if(c2>1 || (c2==1 && c1<3))return 1;
}
if((t[m]=='0' && t[m+1]>='0' && t[m+1]<='9') || (t[i]=='.' && t[i+1]==':') || (t[i]=='.' && t[i+1]=='.') || (t[i]==':' && t[i+1]==':') || (t[i]==':' && t[i+1]=='.') || !(t[i+1]>='0' && t[i+1]<='9'))return 1;
num=0;
for(int j = m;j<=i-1;j++)num+=f((i-j),t[j]-'0');
if(num<0 || num>255)return 1;
m=i+1;
tmp[wjx]=num;
wjx++;
}
if(i==t.length()){
if(t[m]=='0' && t[m+1]>='0' && t[m+1]<='9')return 1;
num=0;
for(int j = m;j<=i-1;j++)num+=f((i-j),t[j]-'0');
if(num<0 || num>65535)return 1;
tmp[wjx]=num;
wjx++;
}
}
if(yes){
sa[count1].a1=tmp[1];
sa[count1].a2=tmp[2];
sa[count1].a3=tmp[3];
sa[count1].a4=tmp[4];
sa[count1].a5=tmp[5];
sa[count1].x=ii;
count1++;
}
else{
ca[count2].a1=tmp[1];
ca[count2].a2=tmp[2];
ca[count2].a3=tmp[3];
ca[count2].a4=tmp[4];
ca[count2].a5=tmp[5];
ca[count2].x=ii;
count2++;
}
return 0;
}
int main(){
cin>>n;
for(int kk = 1;kk<=n;kk++){
cin>>s;
cin>>t;
if(check((s=="Server"),t,kk)){
cout<<"ERR"<<endl;
}
else{
w=false;
if(s=="Server"){
for(int i = 1;i<count1-1;i++){
if(sa[i].a1==sa[count1-1].a1&&sa[i].a2==sa[count1-1].a2&&sa[i].a3==sa[count1-1].a3&&sa[i].a4==sa[count1-1].a4&&sa[i].a5==sa[count1-1].a5){
cout<<"FAIL"<<endl;
w=true;
break;
}
}
if(!w){
cout<<"OK"<<endl;
}
}
else{
for(int i = 1;i<count1;i++){
if(sa[i].a1==ca[count2-1].a1&&sa[i].a2==ca[count2-1].a2&&sa[i].a3==ca[count2-1].a3&&sa[i].a4==ca[count2-1].a4&&sa[i].a5==ca[count2-1].a5){
w=true;
cout<<sa[i].x<<endl;
break;
}
}
if(!w){
cout<<"FAIL"<<endl;
}
}
}
}
return 0;
}