#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
using namespace std;
const int maxn = 1001 + 20;
int parent[maxn];
bool open[maxn];
struct Node{
int x;
int y;
Node(int xx, int yy):x(xx), y(yy) { }
};
int GetParent(int a) {
if( parent[a] != a ) {
parent[a] = GetParent( parent[a] );
}
return parent[a];
}
void Merge(int a, int b) {
int pa = GetParent( a );
int pb = GetParent( b );
if( pa == pb ) {
return ;
}
parent[pb] = pa;
}
int main() {
int N, D;
vector<Node> v;
v.push_back( Node(0,0) );
while( scanf("%d%d", &N, &D) != EOF ) {
for(int i=1; i<=N; i++) {
parent[i] = i;
open[i] = false;
int x, y;
cin >> x >> y;
v.push_back( Node(x,y) );
}
char ch;
while( scanf("%c", &ch) != EOF ) {
int p, q;
if( ch == 'O' ) {
cin >> p;
open[p] = true;
for(int i=1; i<=N; i++) {
if( open[i] && i!=p ) {
int dx = v[p].x - v[i].x;
int dy = v[p].y - v[i].y;
int dis = dx*dx + dy*dy;
if( dis <= D*D ) {
Merge( i, p );
}
}
}
}
if( ch == 'S' ) {
cin >> p >> q;
if( GetParent(p) == GetParent(q) ) {
cout << "SUCCESS" << endl;
}
else {
cout << "FAIL" << endl;
}
}
}
}
return 0;
}