#include<bits/stdc++.h>
#define ERR printf("ERR\n");
#define OK printf("OK\n")
#define FAIL printf("FAIL\n")
#define False return false
#define True return true
using namespace std;
int n; char tag[5] = {"...:"};
string s;
map<string, int> f;
bool number(char ch) {return ch >= '0' && ch <= '9';}
bool check_RIGHT(int len) {
int i, t = 0;
for (i = 0; i < len; ++i) {
if(s[i] == tag[t]) ++t;
if(t == 4) break;
}
if(t != 4) True;
for (++i; i < len; ++i)
if(!number(s[i])) True;
False;
}
int longe(int x) {
int k = 0;
if(x == 0) return 1;
while(x) ++k, x /= 10;
return k;
}
bool check_FRONT(int len) {
int x = 0, p = 0, i, t = 0;
s[len] = ':';
for (i = 0; i <= len; ++i) {
if(number(s[i])) x = x * 10 + s[i] - '0', ++p;
else {
if(longe(x) == p) {
if(!(t < 4 && x <= 255 || t == 4 && x <= 65535)) True;
} else True;
x = p = 0;
++t;
}
if(x > 65535) True;
}
False;
}
void run(int id) {
cin >> s;
int k, len;
if(s == "Server") k = 1; else k = 0;
cin >> s; len = s.size();
if(check_FRONT(len)){ERR; return;}
if(k)
if(!f[s]){f[s] = id; OK; return;}
else {FAIL; return;}
if(!f[s]) {FAIL; return;}
printf("%d\n", f[s]);
}
int main () {
freopen("network.in", "r", stdin);
freopen("network.out", "w", stdout);
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
run(i);
}