import java.io.*;
import java.util.*;
import java.util.function.*;
class Ideone
{
public static void main
(String[] args
) {
Graph g = Graph.read();
g.dfs(0, r -> {
System.
out.
println("node: " + r.
node + ", depth: " + r.
depth); return false;
});
}
}
class Graph extends ArrayList<ArrayList<Integer>>
{
public Graph(int size)
{
super(size);
for (int i = 0; i < size; i++)
{
add(new ArrayList<>());
}
}
static Graph read()
{
Scanner in
= new Scanner
(System.
in); int size = in.nextInt();
int edge = in.nextInt();
Graph g = new Graph(size);
for (int i = 0; i < edge; i++)
{
int a = in.nextInt();
int b = in.nextInt();
g.get(a).add(b);
g.get(b).add(a);
}
return g;
}
class Reach
{
public int depth, node;
Reach(int d, int n) { depth = d; node = n; }
}
Reach dfs(int start, Function<Reach, Boolean> callback)
{
boolean[] visited = new boolean[size()];
visited[start] = true;
ArrayDeque<Reach> stack = new ArrayDeque<>();
stack.addLast(new Reach(0, start));
while (!stack.isEmpty())
{
Reach r = stack.pollLast();
if (callback.apply(r))
{
return r;
}
for (int t : get(r.node))
{
if (visited[t])
{
continue;
}
visited[t] = true;
stack.addLast(new Reach(r.depth + 1, t));
}
}
return null;
}
}
aW1wb3J0IGphdmEuaW8uKjsKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLio7CgpjbGFzcyBJZGVvbmUKewogICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKICAgIHsKICAgICAgICBHcmFwaCBnID0gR3JhcGgucmVhZCgpOwogICAgICAgIAogICAgICAgIGcuZGZzKDAsIHIgLT4gewogICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIm5vZGU6ICIgKyByLm5vZGUgKyAiLCBkZXB0aDogIiArIHIuZGVwdGgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CiAgICB9Cn0KCmNsYXNzIEdyYXBoIGV4dGVuZHMgQXJyYXlMaXN0PEFycmF5TGlzdDxJbnRlZ2VyPj4KewogICAgcHVibGljIEdyYXBoKGludCBzaXplKQogICAgewogICAgICAgIHN1cGVyKHNpemUpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgYWRkKG5ldyBBcnJheUxpc3Q8PigpKTsKICAgICAgICB9CiAgICB9CiAgICBzdGF0aWMgR3JhcGggcmVhZCgpCiAgICB7CiAgICAgICAgU2Nhbm5lciBpbiA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgaW50IHNpemUgPSBpbi5uZXh0SW50KCk7CiAgICAgICAgaW50IGVkZ2UgPSBpbi5uZXh0SW50KCk7CiAgICAgICAgR3JhcGggZyA9IG5ldyBHcmFwaChzaXplKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVkZ2U7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGludCBhID0gaW4ubmV4dEludCgpOwogICAgICAgICAgICBpbnQgYiA9IGluLm5leHRJbnQoKTsKICAgICAgICAgICAgZy5nZXQoYSkuYWRkKGIpOwogICAgICAgICAgICBnLmdldChiKS5hZGQoYSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBnOwogICAgfQogICAgCiAgICBjbGFzcyBSZWFjaAogICAgewogICAgICAgIHB1YmxpYyBpbnQgZGVwdGgsIG5vZGU7CiAgICAgICAgUmVhY2goaW50IGQsIGludCBuKSB7IGRlcHRoID0gZDsgbm9kZSA9IG47IH0KICAgIH0KICAgIAogICAgUmVhY2ggZGZzKGludCBzdGFydCwgRnVuY3Rpb248UmVhY2gsIEJvb2xlYW4+IGNhbGxiYWNrKQogICAgewogICAgICAgIGJvb2xlYW5bXSB2aXNpdGVkID0gbmV3IGJvb2xlYW5bc2l6ZSgpXTsKICAgICAgICB2aXNpdGVkW3N0YXJ0XSA9IHRydWU7CiAgICAgICAgQXJyYXlEZXF1ZTxSZWFjaD4gc3RhY2sgPSBuZXcgQXJyYXlEZXF1ZTw+KCk7CiAgICAgICAgc3RhY2suYWRkTGFzdChuZXcgUmVhY2goMCwgc3RhcnQpKTsKICAgICAgICB3aGlsZSAoIXN0YWNrLmlzRW1wdHkoKSkKICAgICAgICB7CiAgICAgICAgICAgIFJlYWNoIHIgPSBzdGFjay5wb2xsTGFzdCgpOwogICAgICAgICAgICBpZiAoY2FsbGJhY2suYXBwbHkocikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiByOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciAoaW50IHQgOiBnZXQoci5ub2RlKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKHZpc2l0ZWRbdF0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2aXNpdGVkW3RdID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHN0YWNrLmFkZExhc3QobmV3IFJlYWNoKHIuZGVwdGggKyAxLCB0KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K