#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
using namespace std;
int flag[1002];
int b[1002];//判断是否出现过
int n,d;
struct com
{
int xi;
int yi;
} a[10002];
void init()
{
int i;
for(int i=0; i<=n; i++)
{
flag[i]=i;
b[i]=0;
}
}
int node(com a,com b)
{
int t1=(a.xi-b.xi)*(a.xi-b.xi)+(a.yi-b.yi)*(a.yi-b.yi);
int t2=d*d;
if(t1<=t2)
return 1;
else
return 0;
}
int getf(int n)
{
if(flag[n]==n)
return n;
else
{
flag[n]=getf(flag[n]);
return flag[n];
}
}
void merge(int n,int v)
{
int t1=getf(n);
int t2=getf(v);
if(t1!=t2)
{
flag[t2]=t1;
}
}
int main()
{
while(~scanf("%d%d",&n,&d))
{
init();
for(int i=1; i<=n; i++)
{
scanf("%d%d",&a[i].xi,&a[i].yi);
}
char p[2];
while(~scanf("%s",p))
{
int q;//第q台机器
if(p[0]=='O')
{
scanf("%d",&q);
b[q]=1;//标记
for(int i=1; i<=n; i++) //合并机器
{
if(b[i]&&node(a[q],a[i]))
{
merge(flag[q],flag[i]);
}
}
}
else
{
int x,y;
scanf("%d%d",&x,&y);
if(getf(x)==getf(y))
printf("SUCCESS\n");
else
printf("FAIL\n");
}
}
}
}
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
using namespace std;
int flag[1002];
int b[1002];//判断是否出现过
int n,d;
struct com
{
int xi;
int yi;
} a[10002];
void init()
{
int i;
for(int i=0; i<=n; i++)
{
flag[i]=i;
b[i]=0;
}
}
int node(com a,com b)
{
int t1=(a.xi-b.xi)*(a.xi-b.xi)+(a.yi-b.yi)*(a.yi-b.yi);
int t2=d*d;
if(t1<=t2)
return 1;
else
return 0;
}
int getf(int n)
{
if(flag[n]==n)
return n;
else
{
flag[n]=getf(flag[n]);
return flag[n];
}
}
void merge(int n,int v)
{
int t1=getf(n);
int t2=getf(v);
if(t1!=t2)
{
flag[t2]=t1;
}
}
int main()
{
while(~scanf("%d%d",&n,&d))
{
init();
for(int i=1; i<=n; i++)
{
scanf("%d%d",&a[i].xi,&a[i].yi);
}
char p[2];
while(~scanf("%s",p))
{
int q;//第q台机器
if(p[0]=='O')
{
scanf("%d",&q);
b[q]=1;//标记
for(int i=1; i<=n; i++) //合并机器
{
if(b[i]&&node(a[q],a[i]))
{
merge(flag[q],flag[i]);
}
}
}
else
{
int x,y;
scanf("%d%d",&x,&y);
if(getf(x)==getf(y))
printf("SUCCESS\n");
else
printf("FAIL\n");
}
}
}
}