#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;

typedef long long ll;
struct edge_t { int vertex; ll value; };
const ll inf = 1e18;

void bellman_ford(int n, const vector<vector<edge_t> > &sousede, vector<ll> &dist)
{
    for (int k = 0; k < n*2; k++) {
        /*printf("# ");
        for (int v = 0; v < n; v++) {
            printf(" %lf", dist[v] / 1000.0);
        }
        printf("\n");*/
        for (int v = 0; v < n; v++) {
            for (int i = 0; i < (int) sousede[v].size(); i++) {
                edge_t edge = sousede[v][i];
                int w = edge.vertex;
                dist[w] = min(dist[w], dist[v] + edge.value);
            }
        }
    }
}

int main()
{
    int m, n, s, f;
    while (scanf("%d%d%d%d", &m, &n, &s, &f) == 4 && m != 0) {
        s--;
        f--;
        vector<vector<edge_t> > sousede(n);
        for (int i = 0; i < m; i++) {
            int a, b;
            double v;
            scanf("%d%d%lf", &a, &b, &v);
            a--;
            b--;
            ll value = -round(v * 1000);
            sousede[a].push_back((edge_t) { b, value });
        }
        vector<ll> dist(n, inf);
        dist[s] = 0;
        bellman_ford(n, sousede, dist);
        ll val1 = dist[f];
        bellman_ford(n, sousede, dist);
        ll val2 = dist[f];
        printf("%s\n", val1 == val2 ? "FALSE" : "TRUE");
    }
    return 0;
}