wa点#19和#21
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define ll long long
using namespace std;
struct node{
string ip;
ll ni;
};
ll n;
string ip_address[10100];
node stk[10100];
ll top=0;
bool check(string s1){
//检查是否可以链接
for(int i=0;i<top;i++){
if(stk[i].ip==s1){
return 0;
}
}
return 1;
}
bool checktrue(string s2){
if(s2[0]=='.'||s2[0]==':'||s2[s2.length()-1]=='.'||s2[s2.length()-1]==':') return 0;
//检查是否为正确的ip
s2[s2.length()]=':';
ll fd[50];
int tmp=0;
int fjd=0;
int sdian=0,smh=0;
for(int i=0;i<s2.length()+1;i++){
if(s2[i]=='.'){
if(s2[i+1]=='.') return 0;
fd[fjd]=tmp;
fjd++;
sdian++;
tmp=0;
continue;
}else if(s2[i]==':'){
if(sdian!=3) return 0;
fd[fjd]=tmp;
fjd++;
smh++;
tmp=0;
continue;
//Server 192.156.0.12:123
}else if(s2[i]=='0'){
if((i==0||s2[i-1]=='.'||s2[i-1]==':')&&(s2[i+1]!='.'&&s2[i+1]!=':')){
//cout<<(s2[i+1]!='.'||s2[i+1]!=':');
return 0;
}
}
tmp*=10;
tmp+=s2[i]-'0';
if(tmp>65535) return 0;
}
if(!(sdian==3&&smh==2)){
return 0;
}
for(int i=0;i<4;i++){
if(fd[i]>255){
return 0;
}
}
if(fd[4]>65535){
return 0;
}
return 1;
}
int main(){
//freopen("network.in","r",stdin);
//freopen("network.out","w",stdout);
scanf("%lld",&n);
for(int i=1;i<=n;i++){
string s1;
cin>>s1;
string s2;
cin>>s2;
if(checktrue(s2)){
if(s1=="Server"){
if(check(s2)){
stk[top].ip=s2;
stk[top].ni=i;
top++;
printf("OK\n");
}else{
printf("FAIL\n");
}
}else if(s1=="Client"){
int flag=1;
for(int i=0;i<top;i++){
if(stk[i].ip==s2){
printf("%lld\n",stk[i].ni);
flag=0;
break;
}
}
if(flag)printf("FAIL\n");
}
}else{
printf("ERR\n");
}
}
//fclose(stdin);
//fclose(stdout);
return 0;
}