import java.awt.Point;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.reflect.Array;
import java.math.BigInteger;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;
class TestClass {
static int[] dist ;
static int[] vis;
static ArrayList<Integer>[] resu;
static int[][] graph;
static int max;
static int max2;
static int[][] dp;
static int[][] s;
public static int mindist(){
for(int i=0;i<dist.length;i++){
if(dist[i]<min && vis[i]!=1){
min = dist[i];
index = i;
}
}
return index;
}
public static int ss(){
for(int i=0;i<dist.length;i++){
if(vis[i]!=1 && dist[i]<min){
min = dist[i];
index =i;
}
}
return index;
}
public static void find(int current , ArrayList<Point>[] paths , int block1 , int block2){
vis[current]=1;
for(int i=0;i<paths[current].size();i++){
int next = paths[current].get(i).x;
if(vis[next]!=1){
if(block1== current && block2==next) continue;
if(block1 == next && block2 == current) continue;
if(dist[next]> dist[current] + paths[current].get(i).y)
dist[next]= dist[current] + paths[current].get(i).y;
}
}
int index = ss();
if(index
!=Integer.
MAX_VALUE) find
(index,paths,block1,block2
);
}
int n =in.nextInt();
int m =in.nextInt();
@SuppressWarnings("unchecked")
for(int i=0;i<n;i++) paths[i] = new ArrayList<Point>();
for(int i=0;i<m;i++){
int xx =in.nextInt();
int yy =in.nextInt();
int d = in.nextInt();
paths
[xx
].
add(new Point(yy,d
)); paths
[yy
].
add(new Point(xx,d
));}
int s = in.nextInt();
int d =in.nextInt();
int q = in.nextInt();
for(int i=0;i<q;i++){
int xx = in.nextInt();
int yy = in.nextInt();
vis = new int[n];
dist = new int[n];
dist[s]=0;
find(s, paths, xx, yy);
else
System.
out.
println("Infinity");
}
}
}
aW1wb3J0IGphdmEuYXd0LlBvaW50OwppbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwppbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwppbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwppbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CmltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQXJyYXk7CmltcG9ydCBqYXZhLm1hdGguQmlnSW50ZWdlcjsKaW1wb3J0IGphdmEudGV4dC5Db2xsYXRvcjsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwppbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOwppbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CmltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwppbXBvcnQgamF2YS51dGlsLlF1ZXVlOwppbXBvcnQgamF2YS51dGlsLlNjYW5uZXI7CmltcG9ydCBqYXZhLnV0aWwuU3RhY2s7CmltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOwogCiAKIAogCiBjbGFzcyBUZXN0Q2xhc3MgewogCnN0YXRpYyBpbnRbXSBkaXN0IDsJCnN0YXRpYyBpbnRbXSB2aXM7CnN0YXRpYyBBcnJheUxpc3Q8SW50ZWdlcj5bXSByZXN1OwpzdGF0aWMgaW50W11bXSBncmFwaDsKc3RhdGljIGludCBtYXg7CnN0YXRpYyBpbnQgbWF4MjsKc3RhdGljIGludFtdW10gZHA7CnN0YXRpYyBpbnRbXVtdIHM7CiAKCgpwdWJsaWMgc3RhdGljIGludCBtaW5kaXN0KCl7CgkgICBpbnQgbWluID0gSW50ZWdlci5NQVhfVkFMVUU7CgkgICBpbnQgaW5kZXg9SW50ZWdlci5NQVhfVkFMVUU7CgkKCSAgIGZvcihpbnQgaT0wO2k8ZGlzdC5sZW5ndGg7aSsrKXsKCQkgICAKCQkgICBpZihkaXN0W2ldPG1pbiAmJiB2aXNbaV0hPTEpewoJCQkgICAKCQkJICAgICBtaW4gPSBkaXN0W2ldOwoJCQkgICAgIGluZGV4ID0gaTsKCQkgICB9CgkgICB9CgkgICByZXR1cm4gaW5kZXg7CgkKfQpwdWJsaWMgc3RhdGljIGludCBzcygpewoJaW50IGluZGV4ID1JbnRlZ2VyLk1BWF9WQUxVRTsKCWludCBtaW4gPSBJbnRlZ2VyLk1BWF9WQUxVRTsKCQoJZm9yKGludCBpPTA7aTxkaXN0Lmxlbmd0aDtpKyspewoJCQoJCSAgaWYodmlzW2ldIT0xICYmIGRpc3RbaV08bWluKXsKCQkJICAKCQkJICAgIG1pbiA9IGRpc3RbaV07CgkJCSAgICBpbmRleCA9aTsKCQkgIH0KCQkKCX0KCQoJcmV0dXJuIGluZGV4OwoJCn0KCnB1YmxpYyBzdGF0aWMgdm9pZCBmaW5kKGludCBjdXJyZW50ICwgQXJyYXlMaXN0PFBvaW50PltdIHBhdGhzICwgaW50IGJsb2NrMSAsIGludCBibG9jazIpewoJCgl2aXNbY3VycmVudF09MTsKCQoJZm9yKGludCBpPTA7aTxwYXRoc1tjdXJyZW50XS5zaXplKCk7aSsrKXsKCQkKCQkgICAgaW50IG5leHQgPSBwYXRoc1tjdXJyZW50XS5nZXQoaSkueDsKCQkgICAgCgkJIGlmKHZpc1tuZXh0XSE9MSl7CgkJCSAKCQkJaWYoYmxvY2sxPT0gY3VycmVudCAmJiBibG9jazI9PW5leHQpIGNvbnRpbnVlOwoJCQlpZihibG9jazEgPT0gbmV4dCAmJiBibG9jazIgPT0gY3VycmVudCkgY29udGludWU7CgkJCQoJCQlpZihkaXN0W25leHRdPiBkaXN0W2N1cnJlbnRdICsgcGF0aHNbY3VycmVudF0uZ2V0KGkpLnkpCgkJCQlkaXN0W25leHRdPSBkaXN0W2N1cnJlbnRdICsgcGF0aHNbY3VycmVudF0uZ2V0KGkpLnk7CgkgICAgCgkJCQoJCSB9CgkJIAoJCSAKCQkKCX0KCWludCBpbmRleCA9IHNzKCk7CglpZihpbmRleCE9SW50ZWdlci5NQVhfVkFMVUUpIGZpbmQoaW5kZXgscGF0aHMsYmxvY2sxLGJsb2NrMik7CgkKfQoKcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSApIHRocm93cyBJT0V4Y2VwdGlvbiAgewogCgogCiBTY2FubmVyIGluID0gbmV3IFNjYW5uZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKFN5c3RlbS5pbikpOwoKaW50IG4gPWluLm5leHRJbnQoKTsKaW50IG0gPWluLm5leHRJbnQoKTsKICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQpBcnJheUxpc3Q8UG9pbnQ+W10gcGF0aHMgPSBuZXcgQXJyYXlMaXN0W25dOwpmb3IoaW50IGk9MDtpPG47aSsrKSBwYXRoc1tpXSA9IG5ldyBBcnJheUxpc3Q8UG9pbnQ+KCk7Cgpmb3IoaW50IGk9MDtpPG07aSsrKXsKCWludCB4eCA9aW4ubmV4dEludCgpOwoJaW50IHl5ID1pbi5uZXh0SW50KCk7CglpbnQgZCA9IGluLm5leHRJbnQoKTsKCXBhdGhzW3h4XS5hZGQobmV3IFBvaW50KHl5LGQpKTsKCXBhdGhzW3l5XS5hZGQobmV3IFBvaW50KHh4LGQpKTsKfQppbnQgcyA9IGluLm5leHRJbnQoKTsKaW50IGQgPWluLm5leHRJbnQoKTsKaW50IHEgPSBpbi5uZXh0SW50KCk7Cgpmb3IoaW50IGk9MDtpPHE7aSsrKXsKCWludCB4eCA9IGluLm5leHRJbnQoKTsKCWludCB5eSA9IGluLm5leHRJbnQoKTsKCXZpcyA9IG5ldyBpbnRbbl07CglkaXN0ID0gbmV3IGludFtuXTsKCUFycmF5cy5maWxsKGRpc3QsIEludGVnZXIuTUFYX1ZBTFVFKTsKCWRpc3Rbc109MDsKCWZpbmQocywgcGF0aHMsIHh4LCB5eSk7CglpZihkaXN0W2RdIT1JbnRlZ2VyLk1BWF9WQUxVRSkKCVN5c3RlbS5vdXQucHJpbnRsbihkaXN0W2RdKTsKCWVsc2UKCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluZmluaXR5Iik7CgkKfQoKCgoKfQp9CiAKIA==
NiA5IAowIDEgMSAKMSAyIDEgCjIgMyAxIAozIDQgMSAKNCA1IDEgCjIgNCA1IAozIDUgOCAKMSAzIDMgCjAgMiA0IAowIDUgCjkgCjAgMSAKMSAyIAoyIDMgCjMgNCAKNCA1IAoyIDQgCjMgNSAKMSAzIAowIDI=
6 9
0 1 1
1 2 1
2 3 1
3 4 1
4 5 1
2 4 5
3 5 8
1 3 3
0 2 4
0 5
9
0 1
1 2
2 3
3 4
4 5
2 4
3 5
1 3
0 2