//连通图的并查集问题
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int n,repair[1002],d,pos[1002][2],f[1002],rank[1002];
int dis(int x,int y){
return ((pos[x][0]-pos[y][0])*(pos[x][0]-pos[y][0])+(pos[x][1]-pos[y][1])*(pos[x][1]-pos[y][1]));
}
int findf(int x){
if(x!=f[x])f[x]=findf(f[x]);
return f[x];
}
void Union(int x,int y){
x=findf(x);
y=findf(y);
if(x==y)return;
if(rank[x]>=rank[y]){
f[y]=x;
rank[x]+=rank[y];
}
else {
f[x]=y;
rank[y]+=rank[x];
}
}
int main(void){
scanf("%d%d",&n,&d);
int i;
for(i=1;i<=n;i++){
scanf("%d%d",&pos[i][0],&pos[i][1]);
f[i]=i;
rank[i]=1;
}
int x,y,count=0;
char c[5];
while(scanf("%s%d",&c,&x)!=EOF){
if(c[0]=='O'){
for(i=0;i<count;i++){
if(dis(repair[i],x)<=(d*d)){
Union(repair[i],x);
}
}
repair[count++]=x;
}
else{
scanf("%d",&y);
if(findf(x)==findf(y))printf("SUCCESS\n");
else printf("FAIL\n");
}
}
return 0;
}