#pragma GCC optimize ("O3")
#pragma GCC target ("sse4")
 
#include <bits/stdc++.h>
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef complex<ld> cd;
 
typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef pair<ld,ld> pd;
 
typedef vector<int> vi;
typedef vector<ld> vd;
typedef vector<ll> vl;
typedef vector<pi> vpi;
typedef vector<pl> vpl;
typedef vector<cd> vcd;
 
#define FOR(i, a, b) for (int i=a; i<(b); i++)
#define F0R(i, a) for (int i=0; i<(a); i++)
#define FORd(i,a,b) for (int i = (b)-1; i >= a; i--)
#define F0Rd(i,a) for (int i = (a)-1; i >= 0; i--)
#define trav(a,x) for (auto& a : x)
#define uid(a, b) uniform_int_distribution<int>(a, b)(rng)
 
#define sz(x) (int)(x).size()
#define mp make_pair
#define pb push_back
#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert

template<class T> bool ckmin(T& a, const T& b) { return b < a ? a = b, 1 : 0; }
template<class T> bool ckmax(T& a, const T& b) { return a < b ? a = b, 1 : 0; }
 
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
 
const int MOD = 1000000007;
const char nl = '\n';
const int MX = 100001; //check the limits, dummy

ll solve(map<int, vi> A, map<int, vi> B) {
    ll ans = 1e9;
    trav(a, A) {
        if (B.count(a.f)) {
            vi X = a.s;
            vi Y = B[a.f];
            int p1 = 0, p2 = 0;
            while (p1 < sz(X) && p2 < sz(Y)) {
                if (X[p1] < Y[p2]) {
                    ckmin(ans, (ll) Y[p2] - X[p1]);
                    p1++;
                } else {
                    p2++;
                }
            }
        }
    }
    return ans * 10;
}

ll solveFixed(map<int, vi> A, map<int, vi> B) {
    ll ans = 1e9;
    trav(a, A) {
        if (B.count(a.f)) {
            vi X = a.s;
            vi Y = B[a.f];
            int p1 = 0, p2 = 0;
            while (p1 < sz(X) && p2 < sz(Y)) {
                if (X[p1] < Y[p2]) {
                    ckmin(ans, (ll) Y[p2] - X[p1]);
                    p1++;
                } else p2++;
            }
        }
    }
    return ans * 5;
}

int main() {
	ios_base::sync_with_stdio(0); cin.tie(0);    
	
    int N; cin >> N;
/*    map<int, vi> uf, df, rf, lf; //u: x -> y
    map<int, vi> us, ds, rs, ls;
    map<int, vi> ud, dd, rd, ld;*/
    map<int, vi> maps[12];
    F0R(i, N) {
        int X, Y; cin >> X >> Y;
        char C; cin >> C;
        if (C == 'U') {
            maps[0][X].pb(Y);
            maps[4][X+Y].pb(X);
            maps[8][X-Y].pb(X);
        } else if (C == 'D') {
            maps[1][X].pb(Y);
            maps[5][X+Y].pb(X);
            maps[9][X-Y].pb(X);
        } else if (C == 'R') {
            maps[2][Y].pb(X);
            maps[6][X+Y].pb(X);
            maps[10][X-Y].pb(X);
        } else {
            maps[3][Y].pb(X);
            maps[7][X+Y].pb(X);
            maps[11][X-Y].pb(X);
        }
    }
    F0R(i, 12) {
        for (auto it = maps[i].begin(); it != maps[i].end(); it++) {
            sort(all(it->s));
        }
    }

    ll ans = 1e9;
    ckmin(ans, solveFixed(maps[0], maps[1]));
    ckmin(ans, solveFixed(maps[2], maps[3]));
    ckmin(ans, solve(maps[6], maps[4]));
    ckmin(ans, solve(maps[5], maps[7]));
    ckmin(ans, solve(maps[8], maps[11]));
    ckmin(ans, solve(maps[10], maps[9]));

    if (ans >= 1e8) {
        cout << "SAFE" << nl;
    } else cout << ans << nl;
	
	return 0;
}
 
// read the question correctly (ll vs int)
// template by bqi343



Measured memory_bytes: 90236