1 #include <cstdio>
2 #include <algorithm>
3 #include <cstring>
4 #include <iostream>
5 using namespace std;
6 int par[1005];
7 bool b[1005];//判断哪个电脑被修好了
8 struct
9 {
10 int x,y;
11 }a[1005];
12 void init(int n)
13 {
14 for(int i=1;i<=n;i++)
15 {
16 par[i]=i;
17 }
18 }
19 int find(int x)
20 {
21 if(par[x]==x)
22 {
23 return x;
24 }
25 else
26 {
27 return par[x]=find(par[x]);
28 }
29 }
30 void unite(int x,int y)
31 {
32 x=find(x);
33 y=find(y);
34 if(x!=y)
35 par[x]=y;
36 else
37 return ;
38 }
39 bool same(int x,int y)
40 {
41 return find(x)==find(y);
42 }
43 int main (void)
44 {
45 memset(b,false,sizeof(b));
46 int num;int maxx;
47 cin>>num>>maxx;
48 init(num);
49 for(int i=1;i<=num;i++)
50 {
51 scanf("%d %d",&a[i].x,&a[i].y);
52 }
53 char op;
54 int id;
55 while(~scanf(" %c",&op))
56 {
57 if(op=='O')
58 {
59 scanf("%d",&id);
60 b[id]=true;
61
62 for(int i=1;i<=num;i++)
63 {
64 if(b[i]==true)
65 {
66 int di=(a[id].x-a[i].x)*(a[id].x-a[i].x)+
67 (a[id].y-a[i].y)*(a[id].y-a[i].y);
68 if(di<=maxx*maxx)//如果比限制距离小,可以合并
69 {
70 unite(id,i);
71 }
72 }
73 }
74 }
75 if(op=='S')
76 {
77 int c,d;
78 scanf("%d %d",&c,&d);
79 if(find(d)==find(c))
80 printf("SUCCESS\n");
81 else
82 printf("FAIL\n");
83 }
84 }
85 return 0;
86 }