RT
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct Node
{
ll ad, id;
}ser[1010],serf[1010],cli[1010];
ll n,cnt1,cnt2,cnt3;
string ans[1010];
bool cmp(Node a, Node b)
{
if (a.ad == b.ad) return a.id < b.id;
return a.ad < b.ad;
}
ll sol (ll x)
{
if (x / 10 == 0) return 1;
if (x / 100 == 0) return 2;
if (x / 1000 == 0) return 3;
if (x / 10000 == 0) return 4;
if (x / 100000 == 0) return 5;
return 1000;
}
ll work (ll a, ll b, ll c, ll d, ll e)
{
ll an = 1;
for (ll i = 1; i <= 3; ++i)
an *= 10;
an += a;
for (ll i = 1; i <= 3; ++i)
an *= 10;
an += b;
for (ll i = 1; i <= 3; ++i)
an *= 10;
an += c;
for (ll i = 1; i <= 3; ++i)
an *= 10;
an += d;
for (ll i = 1; i <= 5; ++i)
an *= 10;
an += e;
return an;
}
ll find(ll ad)
{
ll l = 1, r = cnt3;
while (l < r)
{
ll mid = (l + r) >> 1;
if (serf[mid].ad < ad) l = mid + 1;
else r = mid;
}
if (serf[l].ad == ad)
return serf[l].id;
else return -1;
}
string sol1(ll x)
{
ll len = sol(x);
string an1 = "",an2 = "";
for (ll i = 1; i <= len; ++i)
{
an1 += char(x % 10 + '0');
x /= 10;
}
for (ll i = len - 1; i >= 0; --i)
an2 += an1[i];
return an2;
}
int main ()
{
ios::sync_with_stdio(false);
cin >> n;
for (ll i = 1; i <= n; ++i)
{
string op, s;
cin >> op >> s;
if (op == "Server")
{
ll len = s.size(),cnt11 = 0,cnt22 = 0;
for (ll j = 0; j < len; ++j)
if (s[j] == '.') cnt11 ++;
else if (s[j] == ':') cnt22 ++;
if (cnt11 != 3 || cnt22 != 1)
{
ans[i] = "ERR";
continue;
}
ll xb = 0, a = 0, b = 0, c = 0, d = 0, e = 0, lst = 0;
while (s[xb] != '.')
a = a * 10 + s[xb] - '0', ++xb;
if (sol (a) != xb - lst)
{
ans[i] = "ERR";
continue;
}
++xb;
lst = xb;
while (s[xb] != '.')
b = b * 10 + s[xb] - '0', ++xb;
if (sol (b) != xb - lst)
{
ans[i] = "ERR";
continue;
}
++xb;
lst = xb;
while (s[xb] != '.')
c = c * 10 + s[xb] - '0', ++xb;
if (sol (c) != xb - lst)
{
ans[i] = "ERR";
continue;
}
++xb;
lst = xb;
while (s[xb] != ':')
d = d * 10 + s[xb] - '0', ++xb;
if (sol (d) != xb - lst)
{
ans[i] = "ERR";
continue;
}
++xb;
lst = xb;
while (xb < len)
e = e * 10 + s[xb] - '0', ++xb;
if (sol (e) != xb - lst)
{
ans[i] = "ERR";
continue;
}
if(a < 0 || a > 255 || b < 0 || b > 255 || c < 0 || c > 255 || d < 0 || d > 255 || e < 0 || e > 65535)
{
ans[i] = "ERR";
continue;
}
ser[++cnt1].ad = work (a, b, c, d, e);
ser[cnt1].id = i;
// cout << ser[cnt1].ad << endl;
}else
{
ll len = s.size(),cnt11 = 0,cnt22 = 0;
for (ll j = 0; j < len; ++j)
if (s[j] == '.') cnt11 ++;
else if (s[j] == ':') cnt22 ++;
if (cnt11 != 3 || cnt22 != 1)
{
ans[i] = "ERR";
continue;
}
ll xb = 0, a = 0, b = 0, c = 0, d = 0, e = 0, lst = 0;
while (s[xb] != '.')
a = a * 10 + s[xb] - '0', ++xb;
if (sol (a) != xb - lst)
{
ans[i] = "ERR";
continue;
}
++xb;
lst = xb;
while (s[xb] != '.')
b = b * 10 + s[xb] - '0', ++xb;
if (sol (b) != xb - lst)
{
ans[i] = "ERR";
continue;
}
++xb;
lst = xb;
while (s[xb] != '.')
c = c * 10 + s[xb] - '0', ++xb;
if (sol (c) != xb - lst)
{
ans[i] = "ERR";
continue;
}
++xb;
lst = xb;
while (s[xb] != ':')
d = d * 10 + s[xb] - '0', ++xb;
if (sol (d) != xb - lst)
{
ans[i] = "ERR";
continue;
}
++xb;
lst = xb;
while (xb < len)
e = e * 10 + s[xb] - '0', ++xb;
if (sol (e) != xb - lst)
{
ans[i] = "ERR";
continue;
}
if(a < 0 || a > 255 || b < 0 || b > 255 || c < 0 || c > 255 || d < 0 || d > 255 || e < 0 || e > 65535)
{
ans[i] = "ERR";
continue;
}
cli[++cnt2].ad = work (a, b, c, d, e);
cli[cnt2].id = i;
}
}
sort(ser + 1, ser + 1 + cnt1, cmp);
serf[++cnt3] = ser[1], ans[ser[1].id] = "OK";
for (ll i = 2; i <= cnt1; ++i)
if (ser[i].ad != ser[i - 1].ad) serf[++cnt3] = ser[i], ans[ser[i].id] = "OK";
else ans[ser[i].id] = "FAIL";
for (ll i = 1; i <= cnt2; ++i)
{
ll an = find(cli[i].ad);
if (an == -1 || an > cli[i].id) ans[cli[i].id] = "FAIL";
else ans[cli[i].id] = sol1(an);
}
for (ll i = 1; i <= n; ++i)
cout << ans[i] << endl;
return 0;
}