from parse import compile
class Main:
expression = compile("{}.{}.{}.{}:{}")
op, ad = "", ""
connMap = {}
n , i = 0 ,0
def outrange(a: int, b: int, c: int, d: int, e: int) -> bool:
return (
(a < 0 or a > 255) or
(b < 0 or b > 255) or
(c < 0 or c > 255) or
(d < 0 or d > 255) or
(e < 0 or e > 65535)
)
def gudgeIp(address: str) -> list:
a, b, c, d, e = int(), int(), int(), int(), int()
matchResult = Main.expression.parse(address)
if (matchResult == None):
return []
checkString = ""
for index in range(5):
checkString += str(int(matchResult[index]))
if(index < 3):
checkString += '.'
if(index == 3):
checkString += ':'
a = int(matchResult[0])
b = int(matchResult[1])
c = int(matchResult[2])
d = int(matchResult[3])
e = int(matchResult[4])
if (Main.outrange(a, b, c, d, e) or checkString != address):
return []
return [a, b, c, d, e]
def reserveAdd(address: str) -> bool:
for item in Main.connMap:
if (item == address):
return False
return True
def solveServer() -> None:
gudgeInfo = Main.gudgeIp(Main.ad)
if (gudgeInfo == []):
print("ERR")
return
getIpStat = Main.reserveAdd(Main.ad)
if not getIpStat:
print("FAIL")
return
print("OK")
Main.connMap[Main.ad] = Main.i
def solveClient() -> None:
gudgeInfo = Main.gudgeIp(Main.ad)
if (gudgeInfo == []):
print("ERR")
return
getIpStat = Main.reserveAdd(Main.ad)
if getIpStat:
print("FAIL")
return
print(Main.connMap[Main.ad])
def main() -> None:
Main.n = int(input())
for k in range(1 ,Main.n + 1):
Main.i = k
Main.op ,Main.ad = input().split()
if (Main.op=="Server"):
Main.solveServer()
else:
Main.solveClient()
return
Main.main()