water
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <vector> using namespace std; const int M = 1007; int f[M],rnk[M],flg[M]; double x[M],y[M],d; int n; vector<int> g[M]; void init(int n) { for (int i = 0; i <= n; i++) { f[i] = i; rnk[i] = 0; flg[i] = 0;} } int find(int x) { return x == f[x] ? x : f[x] = find(f[x]); } void join(int x, int y){ x = find(x), y = find(y); if(x != y){ if(rnk[x] > rnk[y]) f[y] = x; else{ f[x] = y; if(rnk[x] == rnk[y]) rnk[y]++; } } } void solve(int x){ for(int i=0;i<g[x].size();i++){ if(flg[g[x][i]]) join(x,g[x][i]); } } int main(){ freopen("1.in","r",stdin); freopen("1.out","w",stdout); scanf("%d%lf",&n,&d); for(int i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]); init(n+3); for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++){ if(sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]))<=d){ g[i].push_back(j);g[j].push_back(i); } } char op[2];int x,y; while(~scanf("%s",op)){ if(op[0]=='O'){ scanf("%d",&x);flg[x]=1; solve(x); } else{ scanf("%d%d",&x,&y); if(find(x)==find(y)) printf("SUCCESS\n"); else printf("FAIL\n"); } } return 0; }