#include<bits/stdc++.h>
using namespace std;
const int MAXN=1005;
struct Computer
{
char a[10];//存储计算机类型
char b[30];//存储地址串
};
Computer computers[MAXN];
int n;
bool panduan(const string& addr)//判断地址串是否符合规范
{
int a,b,c,d,e;
string tmp;
int pos=addr.find(':');
if(pos==string::npos)//如果没有冒号,地址不合法
return false;
string ip=addr.substr(0,pos);
string port=addr.substr(pos+1);
istringstream iss(ip);//分割字符串
char dot;
if(!(iss>>a>>dot>>b>>dot>>c>>dot>>d)||dot!='.')//检查IP格式
return false;
if(a<0||a>255||b<0||b>255||c<0||c>255||d<0||d>255)//检查IP每段的范围
return false;
if(port.find_first_not_of("0123456789")!=string::npos)//检查端口是否为纯数字
return false;
e=stoi(port);
if(e<0||e>65535)//检查端口范围
return false;
string ans=to_string(a)+"."+to_string(b)+"."+to_string(c)+"."+to_string(d)+":"+to_string(e);//重构地址串,检查是否与原地址串完全一致(避免前导零等问题)
return ans==addr;
}
int Find(const char* addr,int cur)//查找是否有相同地址的服务器
{
for(int i=1;i<cur;i++)
if(strcmp(computers[i].a,"Server")==0&&strcmp(computers[i].b,addr)==0)
return i;
return 0;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>computers[i].a>>computers[i].b;
if(!panduan(computers[i].b))
{
cout<<"ERR"<<endl;
continue;
}
if(strcmp(computers[i].a,"Server")==0)
if(Find(computers[i].b,i))
cout<<"FAIL"<<endl;//如果已存在相同地址的服务器,输出FAIL
else
cout<<"OK"<<endl;
else//客户机
{
int server=Find(computers[i].b,i);
if(server)//如果找到对应的服务器,输出服务器编号
cout<<server<<endl;
else//否则输出FAIL
cout<<"FAIL"<<endl;
}
}
return 0;
}
码风有点怪,见谅