package main
import (
"bufio"
"io"
"os"
"strconv"
)
func main() {
data, _ := io.ReadAll(os.Stdin)
p := 0
nextInt := func() int {
for p < len(data) && (data[p] < '0' || data[p] > '9') {
p++
}
x := 0
for p < len(data) && data[p] >= '0' && data[p] <= '9' {
x = x*10 + int(data[p]-'0')
p++
}
return x
}
n := nextInt()
m := nextInt()
head := make([]int, n+1)
outdeg := make([]int, n+1)
rem := make([]int, n+1)
dist := make([]int, n+1)
done := make([]bool, n+1)
const inf = int(1 << 30)
for i := 0; i <= n; i++ {
head[i] = -1
dist[i] = inf
}
to := make([]int, m)
nxt := make([]int, m)
for i := 0; i < m; i++ {
u := nextInt()
v := nextInt()
outdeg[u]++
to[i] = u
nxt[i] = head[v]
head[v] = i
}
s := nextInt()
t := nextInt()
copy(rem, outdeg)
capQ := m + n + 5
dq := make([]int, capQ)
l, r, size := 0, 1, 1
dq[0] = t
dist[t] = 0
for size > 0 {
v := dq[l]
l++
if l == capQ {
l = 0
}
size--
if done[v] {
continue
}
done[v] = true
d := dist[v]
for e := head[v]; e != -1; e = nxt[e] {
u := to[e]
if done[u] {
continue
}
rem[u]--
if rem[u] == 0 && outdeg[u] > 0 && d < dist[u] {
dist[u] = d
l--
if l < 0 {
l = capQ - 1
}
dq[l] = u
size++
}
if outdeg[u] > 1 {
nd := d + 1
if nd < dist[u] {
dist[u] = nd
dq[r] = u
r++
if r == capQ {
r = 0
}
size++
}
}
}
}
w := bufio.NewWriterSize(os.Stdout, 1<<20)
if dist[s] >= inf {
w.WriteString("-1\n")
} else {
w.WriteString(strconv.Itoa(dist[s]))
w.WriteByte('\n')
}
w.Flush()
}