#include <cmath>
#include <stdio.h>
#include <vector>

using std::vector;

typedef struct edge {
	int to;
	int len;
} EDGE;

int main() {
	while (1) {
		int t, f, begin, end;
		vector<EDGE> edges[10000];
		
		scanf("%d %d %d %d", &t, &f, &begin, &end);
		if (t == 0 && f == 0 && begin == 0 && end == 0) break;
		begin--;
		end--;
		
		for (int i = 0; i < t; i++) {
			int from, to;
			double len;
			
			scanf("%d %d %lf", &from, &to, &len);
			
			EDGE e;
			e.to = to-1;
			e.len = (int) ((-len) * 1000);
			edges[from-1].push_back(e);
		}
		
		
		long long int dist[10000];
		long long int MAX = 1ll << 62;
		
		for (int i = 0; i < t; i++){
			dist[i] = MAX;
		}
		
		dist[begin] = 0;
		
		for (int i = 1; i < t - 1; i++) {
			for (int j = 0; j < t; j++) {
				for (int k = 0; k < (int) edges[j].size(); k++) {
					EDGE e = edges[j][k];
					if (dist[e.to] == MAX || dist[j] + e.len < dist[e.to]) {
						dist[e.to] = dist[j] + e.len;
					}
				}
			}
		}
		
		if (dist[end] < 0) printf("TRUE\n");
		else printf("FALSE\n");
	}

	return 0;
}