import java.io.*; import java.util.StringTokenizer; public class boats { static int N, M, P, Q; static int[][] streams; static boolean [][] whereisA, whereisB; public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new FileReader("boats.in")); PrintWriter out = new PrintWriter(new FileWriter("boats.out")); int n = Integer.parseInt(in.readLine()); for (int i = 1; i <= n; i++) { StringTokenizer token = new StringTokenizer(in.readLine()); N = Integer.parseInt(token.nextToken()); M = Integer.parseInt(token.nextToken()); P = Integer.parseInt(token.nextToken()); Q = Integer.parseInt(token.nextToken()); // fill in streams streams = new int[N][N]; for (int j = 0; j < M; j++) { token = new StringTokenizer(in.readLine()); int from = Integer.parseInt(token.nextToken()); int to = Integer.parseInt(token.nextToken()); int time = Integer.parseInt(token.nextToken()); streams[from-1][to-1] = time; } // what are the possible locations for A and B at each time step whereisA = new boolean[2000][N]; whereisA[0][P-1] = true; fromHereA(P-1,0); whereisB = new boolean[2000][N]; whereisB[0][Q-1] = true; fromHereB(Q-1,0); // could they ever meet? int time = 0; int meetingTime = -1; while (time < 2000 && meetingTime == -1) { for(int k=0; k