#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
    int N;
    cin>>N;
    vector<int> X(N), Y(N);
    vector<string> U(N);
    for (int i=0; i<N; i++)
        cin>>X[i]>>Y[i]>>U[i];

    vector<int> UX, UY, RX, RY, DX, DY, LX, LY;
    for (int i=0; i<N; i++)
    {
        if (U[i]=="U")
            UX.push_back(X[i]),
            UY.push_back(Y[i]);
        if (U[i]=="D")
            DX.push_back(X[i]),
            DY.push_back(Y[i]);
        if (U[i]=="R")
            RX.push_back(X[i]),
            RY.push_back(Y[i]);
        if (U[i]=="L")
            LX.push_back(X[i]),
            LY.push_back(Y[i]);
    }

    int oo = 0x7fffffff;
    int ans = oo;

    auto f1 = [&](vector<int> A, vector<int> B, int coef)
    {
        int a = oo;

        sort(A.begin(), A.end());
        sort(B.begin(), B.end());

        int bi = 0;
        for (int ai=0; ai<(int)A.size(); ai++)
        {
            while (bi<(int)B.size() && B[bi]<A[ai])
                bi++;
            if (bi<(int)B.size())
                a = min(a, (B[bi]-A[ai])*coef);
        }
        return a;
    };

    {
        vector<vector<int>> T1(200001), T2(200001);
        for (int i=0; i<(int)UX.size(); i++)
            T1[UX[i]].push_back(UY[i]);
        for (int i=0; i<(int)DX.size(); i++)
            T2[DX[i]].push_back(DY[i]);
        for (int i=0; i<=200000; i++)
            ans = min(ans, f1(T1[i], T2[i], 5));
    }
    {
        vector<vector<int>> T1(200001), T2(200001);
        for (int i=0; i<(int)RX.size(); i++)
            T1[RY[i]].push_back(RX[i]);
        for (int i=0; i<(int)LX.size(); i++)
            T2[LY[i]].push_back(LX[i]);
        for (int i=0; i<=200000; i++)
            ans = min(ans, f1(T1[i], T2[i], 5));
    }

    {
        vector<vector<int>> T1(400001), T2(400001);
        for (int i=0; i<(int)RX.size(); i++)
            T1[RX[i]+RY[i]].push_back(RX[i]);
        for (int i=0; i<(int)UX.size(); i++)
            T2[UX[i]+UY[i]].push_back(UX[i]);
        for (int i=0; i<=400000; i++)
            ans = min(ans, f1(T1[i], T2[i], 10));
    }
    {
        vector<vector<int>> T1(400001), T2(400001);
        for (int i=0; i<(int)DX.size(); i++)
            T1[DX[i]+DY[i]].push_back(DX[i]);
        for (int i=0; i<(int)LX.size(); i++)
            T2[LX[i]+LY[i]].push_back(LX[i]);
        for (int i=0; i<=400000; i++)
            ans = min(ans, f1(T1[i], T2[i], 10));
    }
    {
        vector<vector<int>> T1(400001), T2(400001);
        for (int i=0; i<(int)UX.size(); i++)
            T1[UX[i]-UY[i]+200000].push_back(UX[i]);
        for (int i=0; i<(int)LX.size(); i++)
            T2[LX[i]-LY[i]+200000].push_back(LX[i]);
        for (int i=0; i<=400000; i++)
            ans = min(ans, f1(T1[i], T2[i], 10));
    }
    {
        vector<vector<int>> T1(400001), T2(400001);
        for (int i=0; i<(int)RX.size(); i++)
            T1[RX[i]-RY[i]+200000].push_back(RX[i]);
        for (int i=0; i<(int)DX.size(); i++)
            T2[DX[i]-DY[i]+200000].push_back(DX[i]);
        for (int i=0; i<=400000; i++)
            ans = min(ans, f1(T1[i], T2[i], 10));
    }

    if (ans<oo)
        cout<<ans<<endl;
    else
        cout<<"SAFE"<<endl;
}


Measured memory_bytes: 40072