#include<stdio.h>
#include<math.h>
#define N 1001

int par[N];
int rank[N];

struct state{
  int x;
  int y;
  int check;
};
//Union Find Tree?????????????????????
//????????¶?????§??????????????????????????§???
//?????¨??????????´???????????????????
void init(int n){
	int i;
	for(i=0;i<n;i++){
		par[i] = i;
		rank[i] = 0;
	}
}


//x?????????????´?????±??????????????????£??¨????????????
int find(int x){
	if(par[x]==x){
		return x;
	}else {
		return par[x] = find(par[x]);
	}
}


//x,y????±?????????????????????¨??????
void unite(int x,int y){
	x =find(x);
	y =find(y);
	if(x==y){
		return ;
	}
	if(rank[x] < rank[y]){
		par[x] = y;
	}else {
		par[y] = x;
		if(rank[x] == rank[y])rank[x]++;
	}
}


//x,y????±?????????????????????????????????????
int same(int x,int y){
	return find(x)==find(y);
}

//2??????????????¢????±???????
double distance(int x1,int x2,int y1,int y2){
  return ((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2));
}

int main(){
  //???????????????????????\??????????????????????????????????????¢d??\?????????????????\???????????¨?????????
  int n,d;
  int i,count;
  int n1,n2;
  struct state s[N];  
  char c;
  
  scanf("%d%d",&n,&d);

  init(n);

  for(i=1;i<=n;i++){
    scanf("%d%d",&s[i].x,&s[i].y);
    s[i].check=0;
  }
  count=0;
  while(scanf("%c",&c)!=EOF){
    if(c=='O'){
      scanf("%d",&n1);
      s[n1].check=1;//??????????????°
      for(i=1;i<=n;i++){
	if(s[i].check==1&&n1!=i&&distance(s[i].x,s[n1].x,s[i].y,s[n1].y)<=d*d){
	  unite(i,n1);
	}
      
      }
  }else if(c=='S'){
      scanf("%d%d",&n1,&n2);
      if(same(n1,n2))printf("SUCCESS\n");
      else printf("FAIL\n");
    }
  }
  
  return 0;
}