CF2122D Traffic Lights
Description
You are given a simple undirected connected graph of $ n $ vertices and $ m $ edges.
There is a token in vertex $ 1 $ . We consider the initial time to be at $ 0 $ seconds. After $ t $ seconds, if the token is in vertex $ u $ , you must do exactly one of the following:
- wait one second,
- move the token through the $ (t \bmod \mathrm{deg}(u) + 1) $ $ ^{\text{∗}} $ -th edge of $ u $ , which takes one second.
The order of edges of a vertex is the order that they appear in the input.
Calculate the minimum time required to move the token from vertex $ 1 $ to vertex $ n $ , and the minimum time spent waiting that can be achieved while minimizing the total time.
$ ^{\text{∗}} $ $ x \bmod y $ denotes the remainder from dividing $ x $ by $ y $ .
Input Format
Each test contains multiple test cases. The first line contains the number of test cases $ t $ ( $ 1 \le t \le 1000 $ ). The description of the test cases follows.
The first line of each test case contains two integers $ n $ , $ m $ ( $ 2 \leq n \leq 5000 $ , $ n - 1 \leq m \leq \frac{n(n - 1)}{2} $ ) — the number of vertices and edges in the graph, respectively.
Then $ m $ lines follow, the $ i $ -th line containing two integers $ u_i $ and $ v_i $ ( $ 1 \leq u_i, v_i \leq n $ ) — the vertices of the $ i $ -th edge.
It is guaranteed that the graph is connected and simple.
It is guaranteed that the sum of $ n $ over all test cases does not exceed $ 5000 $ , and the sum of $ m $ over all test cases does not exceed $ 5\cdot 10^5 $ .
Output Format
For each test case, output a single line containing two integers — the minimum total time and the minimum waiting time that minimizes the total time, respectively.
Explanation/Hint
In the first test case, an optimal strategy is to do the following:
- at time $ 0 $ , wait one second,
- at time $ 1 $ , move the token from vertex $ 1 $ to vertex $ 5 $ ,
- at time $ 2 $ , wait one second,
- at time $ 3 $ , move the token from vertex $ 5 $ to vertex $ 6 $ .
In the second test case, an optimal strategy is to do the following:
- at time $ 0 $ , move the token from vertex $ 1 $ to vertex $ 2 $ ,
- at time $ 1 $ , move the token from vertex $ 2 $ to vertex $ 1 $ ,
- at time $ 2 $ , move the token from vertex $ 1 $ to vertex $ 4 $ .