CF BUDDY
← Problems·

1051F · The Shortest Statement

2400 · graphs, shortest paths, trees

Problem: You are given a weighed undirected connected graph, consisting of nn vertices and mm edges.

You should answer qq queries, the ii-th query is to find the shortest distance between vertices uiu_i and viv_i.

Input Format: The first line contains two integers nn and m (1n,m105,mn20)m~(1 \le n, m \le 10^5, m - n \le 20) — the number of vertices and edges in the graph.

Next mm lines contain the edges: the ii-th edge is a triple of integers vi,ui,di (1ui,vin,1di109,uivi)v_i, u_i, d_i~(1 \le u_i, v_i \le n, 1 \le d_i \le 10^9, u_i \neq v_i). This triple means that there is an edge between vertices uiu_i and viv_i of weight did_i. It is guaranteed that graph contains no self-loops and multiple edges.

The next line contains a single integer q (1q105)q~(1 \le q \le 10^5) — the number of queries.

Each of the next qq lines contains two integers uiu_i and vi (1ui,vin)v_i~(1 \le u_i, v_i \le n) — descriptions of the queries.

Pay attention to the restriction mn  20m - n ~ \le ~ 20.

Output Format: Print qq lines.

The ii-th line should contain the answer to the ii-th query — the shortest distance between vertices uiu_i and viv_i.

Sample Cases

Case 1

Input

3 3
1 2 3
2 3 1
3 1 5
3
1 2
1 3
2 3

Output

3
4
1

Case 2

Input

8 13
1 2 4
2 3 6
3 4 1
4 5 12
5 6 3
6 7 8
7 8 7
1 4 1
1 8 3
2 6 9
2 7 1
4 6 3
6 8 2
8
1 5
1 7
2 3
2 8
3 7
3 4
6 8
7 8

Output

7
5
6
7
7
1
2
7

Similar problems

00:00:00
Loading editor…
Welcome! I'm your coding tutor for this problem. Use the chips below to reveal stored hints or get AI feedback on your code. I'll guide you step by step — never giving away the solution.

Sign in to unlock AI tutor feedback