#include <iostream>
#include <climits>
#include <limits>
#include <vector>
#include <queue>
#include <stack>
using namespace std;

vector<vector<int>> G;
vector<vector<double>> E;

bool path(int from, int Fn)
{
  int N = G.size();
  vector<char> vis(N);
  stack<int> S;
  S.push(from);
  vis[from] = true;

  while (!S.empty()) {
    int vert = S.top();
    S.pop();
    if (vert == Fn)
      return true;

    for (int i = 0; i < G[vert].size(); ++i) {
      if (!vis[G[vert][i]]) {
        S.push(G[vert][i]);
        vis[G[vert][i]] = true;
      }
    }
  }
  return false;
}

bool loop(int Fu, int Fn)
{
  int N = G.size();
  double MX = numeric_limits<double>::max();
  vector<double> V(N, MX);
  V[Fu] = 0;
  queue<int> Q;
  queue<int> S;
  Q.push(Fu);
  S.push(0);

  while (!Q.empty()) {
    int vert = Q.front();
    int step = S.front();
    //cout << "current: " << vert << " value: " << V[vert] << " step: " << step << "\n";
    Q.pop();
    S.pop();
    if (step > 2*N + 1) {
      return false;
    }
    else if (step > 2*N) {
      if (path(vert, Fn))
        return true;
    }

    for (int i = 0; i < G[vert].size(); ++i) {
      int neig = G[vert][i];
      double edge = E[vert][i];
      //cout << "neig: " << neig << " value: " << V[neig] << " newvalue: " << V[vert] + edge << " edge: " << edge << " step: " << step + 1 << "\n";
      if (V[neig] > V[vert] + edge) {
        //cout << " updating " << neig << "\n";
        V[neig] = V[vert] + edge;
        Q.push(neig);
        S.push(step + 1);
      }
    }
  }
  return false;
}

int main()
{
  int T,F,Fu,Fn;
  cin >> T >> F >> Fu >> Fn;
  while ( T!= 0 || F != 0 || Fu != 0 || Fn != 0) {
    G = vector<vector<int>>(F);
    E = vector<vector<double>>(F);

    for (int i = 0; i < T; ++i) {
      int f, t;
      double v;
      cin >> f >> t >> v;
      G[f-1].push_back(t-1);
      //G[t-1].push_back(f-1);
      E[f-1].push_back(-v);
      //E[t-1].push_back(v);
      //cout << "from: " << f - 1 << " to: " << t - 1<< " val: " << -v << "\n";
    }

    if (loop(Fu - 1, Fn - 1))
      cout << "TRUE\n";
    else
      cout << "FALSE\n";

    cin >> T >> F >> Fu >> Fn;
  }
  return 0;
}