#include<iostream> #include<cstring> #include<cstdio> using namespace std; struct cell{ bool set; int x;int y; }a[1010]; bool vis[1010][1010]; int root[1010]; int n,d; bool dis(cell a,cell b){ if((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)<=d*d) return 1; else return 0; } int find(int c){ if(c!=root[c]) root[c]=find(root[c]); return root[c]; } void check(int a,int b){ int ra=find(a); int rb=find(b); root[ra]=rb; } int main(){ int i,j; char ope[5]; int com; int from,to; while(scanf("%d%d",&n,&d)!=EOF){ for(i=1;i<=n;i++){ root[i]=i; a[i].set=0; } memset(vis,0,sizeof(vis)); for(i=1;i<=n;i++) scanf("%d%d",&a[i].x,&a[i].y); for(i=1;i<=n;i++) for(j=1;j<=n;j++) vis[i][j]=vis[j][i]=dis(a[i],a[j]); while(scanf("%s",ope)!=EOF){ //我真的很菜,scanf("%c")不能用在这里 if(ope[0]=='O'){ scanf("%d",&com); a[com].set=1; for(i=1;i<=n;i++){ if(i==com) continue; if(vis[i][com]&&a[i].set) check(i,com); } } if(ope[0]=='S'){ scanf("%d%d",&from,&to); if(find(from)==find(to)) printf("SUCCESS\n"); else printf("FAIL\n"); } } } return 0; }