Q10342: Always Late
Ajmat: 你注意到 team 13 的其中一個成員幾乎每次比賽都遲到了嗎?
Nejhum:   你是指 Mahbub, Moazzem 和 Yeamin 那隊嗎? 他們出了什麼問題?
Ajmat: 他們都住在離 BUET 很遠的地方,而且他們總是避開到 BUET 的最短路徑。
Nejhum: 他們瘋了嗎? 為什麼要這樣做? 一個學 Computer Science 的人不會做這種事。
Ajmat: 他們 總是 避開最短路徑。他們相信他們總是會在他們到 BUET 的最短路徑上面對最糟糕的交通堵塞。
Nejhum: 這聽起來很瘋狂!
Ajmat: 他們比你想像中還要瘋狂。他們總是試著用比除了最短路徑之外的所有路徑短或一樣的路徑去 BUET。為了這個,他們有的時候還會走過同一個十字路口超過一次。
Nejhum: 但是他們不是用最長的路徑。為什麼他們幾乎每天遲到?
Ajmat: 因為他們花了很多時間去找一條符合他們標準的路徑。或許他們不知道如何找第二短的路徑。
Nejhum: 我想我們應該在今天的比賽解決這個 真的 問題,而不是解決想像中的問題。
Ajmat: Let's try.
Input
每組測資的第一行包含兩個整數: n 是交叉點的數量,r 是雙向路的數量,交叉點的是 0,1,...,n-1。接下來的 r 行,每行都有 3 個數字: 兩個交叉點,和這條路的長度。接下來有一個整數 q,表示問題的數量,接下來 q 行每行包含兩個交叉點號碼。再 q 個問題之後會有一空白行。兩個交叉點之間最多只會有一條路。一條路總是連接兩個不同的交叉點。路的長度在 1~100 之間。

輸入以 EOF 結束。

Output
對每組輸出,輸出測資號碼,接下來 q 行,每個問題一行,包含對應的兩點第二短的路徑長。對無解的問題輸出一個 '?'。
Sample Input Sample Output
4 3
0 1 12
0 2 20
1 2 15
3
0 1
0 2
0 3

4 3
0 1 11
0 2 20
1 2 15
3
0 1
0 2
0 3
Set #1
35
27
?
Set #2
33
26
?
Translated by DarkKnight