CF1051F The Shortest Statement
Description
You are given a weighed undirected connected graph, consisting of $ n $ vertices and $ m $ edges.
You should answer $ q $ queries, the $ i $ -th query is to find the shortest distance between vertices $ u_i $ and $ v_i $ .
Input Format
The first line contains two integers $ n $ and $ m~(1 \le n, m \le 10^5, m - n \le 20) $ — the number of vertices and edges in the graph.
Next $ m $ lines contain the edges: the $ i $ -th edge is a triple of integers $ 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 $ u_i $ and $ v_i $ of weight $ d_i $ . It is guaranteed that graph contains no self-loops and multiple edges.
The next line contains a single integer $ q~(1 \le q \le 10^5) $ — the number of queries.
Each of the next $ q $ lines contains two integers $ u_i $ and $ v_i~(1 \le u_i, v_i \le n) $ — descriptions of the queries.
Pay attention to the restriction $ m - n ~ \le ~ 20 $ .
Output Format
Print $ q $ lines.
The $ i $ -th line should contain the answer to the $ i $ -th query — the shortest distance between vertices $ u_i $ and $ v_i $ .