import
java.util.*;
class
Main {
static
void
getEdges(
int
s, List<Integer> edges,
int
[] p)
{
if
(s == -
1
) {
return
;
}
getEdges(p[s], edges, p);
edges.add(s);
}
static
void
distHelper(List<List<Integer> > graph,
int
[] d,
int
v1,
int
v2,
int
n)
{
boolean
[] visited =
new
boolean
[n];
Queue<
int
[]> q =
new
LinkedList<>();
q.offer(
new
int
[] {
0
,
0
});
visited[
0
] =
true
;
while
(!q.isEmpty()) {
int
[] a = q.poll();
for
(
int
i : graph.get(a[
0
])) {
if
((i == v1 && a[
0
] == v2)
|| (i == v2 && a[
0
] == v1)) {
continue
;
}
if
(!visited[i]) {
d[i] =
1
+ a[
1
];
visited[i] =
true
;
q.offer(
new
int
[] { i, d[i] });
}
}
}
}
static
void
dist(List<List<Integer> > graph,
int
[] d,
int
[] p,
int
n)
{
boolean
[] visited =
new
boolean
[n];
Queue<
int
[]> q =
new
LinkedList<>();
q.offer(
new
int
[] {
0
,
0
});
visited[
0
] =
true
;
while
(!q.isEmpty()) {
int
[] a = q.poll();
for
(
int
i : graph.get(a[
0
])) {
if
(!visited[i]) {
p[i] = a[
0
];
d[i] =
1
+ a[
1
];
visited[i] =
true
;
q.offer(
new
int
[] { i, d[i] });
}
}
}
}
static
void
findDifference(
int
n,
int
m,
int
[][] arr)
{
List<List<Integer> > graph =
new
ArrayList<>();
for
(
int
i =
0
; i < n; i++) {
graph.add(
new
ArrayList<>());
}
for
(
int
i =
0
; i < m; i++) {
int
a = arr[i][
0
] -
1
;
int
b = arr[i][
1
] -
1
;
graph.get(a).add(b);
graph.get(b).add(a);
}
int
[] p =
new
int
[n];
Arrays.fill(p, -
1
);
int
[] d =
new
int
[n];
Arrays.fill(d, Integer.MAX_VALUE);
dist(graph, d, p, n);
List<Integer> distances =
new
ArrayList<>();
distances.add(d[n -
1
]);
List<Integer> edges =
new
ArrayList<>();
getEdges(n -
1
, edges, p);
for
(
int
i =
0
; i +
1
< edges.size(); i++) {
distHelper(graph, d, edges.get(i),
edges.get(i +
1
), n);
distances.add(d[n -
1
]);
}
Collections.sort(distances);
if
(distances.size() ==
1
) {
System.out.println(
0
);
}
else
{
System.out.println(distances.get(
1
)
- distances.get(
0
));
}
}
public
static
void
main(String[] args)
{
int
n =
6
, m =
8
;
int
arr[][]
= { {
1
,
2
}, {
1
,
3
}, {
2
,
6
}, {
2
,
3
},
{
2
,
4
}, {
3
,
4
}, {
3
,
5
}, {
4
,
6
} };
findDifference(n, m, arr);
}
}