import java.util.*


/**
 * 有向グラフで　S -> T への路長 が3の倍数となるパスのうち，最短のものを求める
 *
 * グラフに状態を持たせた上で，そのグラフ上で，ゴールとするノードに特定の状態でたどり着くための最短パスを求める
 *
 * 説明
 * ・あるノードへのたどり着き方は S からの距離 %3 = 0, 1, 2 の３通りあると考える
 * ・グラフを３状態分作成する
 * ・例えばノード 1 -> 2 へのダイレクトパスがあるとすると，下記のような移動が可能になる
 *      1@状態0 -> 2@状態1
 *      1@状態1 -> 2@状態2
 *      1@状態2 -> 2@状態0
 *
 * このグラフ上で S@状態0 -> T@状態0 への最短パスを求めれば OK   うーむ賢い．．
 *
 */
fun main(args: Array<String>) {
    val (N, M) = readLine()!!.split(" ").map { it.toInt() }

    // グラフを構築する ３倍のグラフを作るには？？
    // ノードすべてを３回ついかすればOK ？？
    // 最短パスを求めるには -> BFS で順に訪問していく & 値を割り振るのが BEST
    // BFS 訪問可能なものをすべて訪問した & T が未訪問状態 -> 答えはない と言える

    // グラフの持ち方はどうするのが良いか？？
    // 訪問先候補は queue で管理， 訪問済み候補は dp (n x 3) で管理（訪問した先には距離を入れる)
    // queue に追加するのは dp の値がまだ入っていない要素，
    // queue が空になったら探索修了 dp[T][0] を出力

    // グラフ構造をどう管理するか？？
    // 各ノード毎に状態数を持ったクラスを作成?? -> 次のノードクラスのどのフィールドを参照するか の指定が面倒では
    // あれ，グラフは３倍する必要はないのでは？？ !!!!
    // 距離の値 & queue に追加するかどうかは 3状態を管理する 配列 で制御
    // 配列のどの部分に距離を入れるかは BFS なので，ループ何巡目かで管理？？

    // -> 方針が経ってから 25分以内に実装できなかった．．実装完了まで 50分ほど -> パターン化しないと時間がもったいない

    // ここのグラフ作成はもう少しスマートにできないか？？
    val to = hashMapOf<Int, MutableList<Int>>()

    for (i in 0 until M) {
        val (u, v) = readLine()!!.split(" ").map { it.toInt() }
        val list = to.getOrElse(u-1) { mutableListOf() }
        list.add(v-1)
        to[u-1] = list
    }

    val (S, T) = readLine()!!.split(" ").map { it.toInt() }


    // 3状態の距離を格納する配列を定義, 初期値は -1
    val dist = Array(N) { IntArray(3) { -1 } }
    dist[S-1][0] = 0

    // BFS を実行 offer poll
    val queue = ArrayDeque<List<Int>>()
    queue.offer(listOf(S-1))

    // BFS の階層を管理するために，queue の中身はリストでまとめておく必要がある？
    var state = 0
    var currentDist = 0

    while (queue.size != 0) {
        // 次のBFSを開始
        val group = queue.poll()
        state = (state + 1) % 3
        currentDist += 1

        val set = hashSetOf<Int>()
        for (s in group) {
            // 次のBFSループで見に行く先を格納, dist が -1 (未訪問）の場合のみ距離を割り当て，queueに格納
            val nextGroupCand = to.getOrElse(s) { mutableListOf() }

            for (v in nextGroupCand){
                if (dist[v][state] == -1){
                    dist[v][state] = currentDist
                    set.add(v)
                }
            }
        }

        // 次の訪問候補群が存在する場合は queue に追加
        if (set.size > 0) queue.offer(set.toList())
    }

    // 答えを出力
    if(dist[T-1][0] == -1 ){
        println(-1)
    } else {
        println(dist[T-1][0] / 3)
    }
}