package main import . "fmt" import . "os" import bf "bufio" func main() { rd:=bf.NewReader(Stdin) var n, m int Fscan(rd, &n, &m) edges := make([][]int, n+1) for i := 0; i < m; i++ { var u, v int Fscan(rd, &u, &v) edges[u] = append(edges[u], v) } var ans = -1 if d, found := find(n, edges, 1, n-1, n, 1); found { ans = d } if d, found := find(n, edges, 1, n, n-1, 1); found { if d < ans || ans < 0 { ans = d } } Println(ans) } func find(n int, edges [][]int, points ...int) (distance int, found bool) { for i, p := range points[1:] { d, f := dist(n, edges, points[i], p) if !f { return } distance += d } found = true return } func dist(n int, edges [][]int, from, to int) (distance int, found bool) { visited := make([]bool, n+1) points := []int{from} visited[from] = true for len(points) > 0 { distance++ next := []int{} for _, p := range points { for _, e := range edges[p] { if visited[e] { continue } if e == to { found = true return } visited[e] = true next = append(next, e) } } points = next } return }