#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
vector<int> G1[10005], G2[10005];
bool vis[10005], f[10005];
int dis[10005];
int n, m, s, t;
void dfs(int u) {
vis[u] = true;
for (int i = 0; i < G2[u].size(); i++) {
int v = G2[u][i];
if (!vis[v]) {
dfs(v);
}
}
}
queue<int> q;
void bfs(int s) {
memset(dis, -1, sizeof(dis));
dis[s] = 0;
q.push(s);
while (!q.empty()) {
int now = q.front();
q.pop();
for (int i = 0; i < G1[now].size(); i++) {
int v = G1[now][i];
if (f[v] && dis[v] == -1) {
dis[v] = dis[now] + 1;
q.push(v);
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
G1[u].push_back(v);
G2[v].push_back(u);
}
cin >> s >> t;
dfs(t);
for(int i=1;i<=n;i++){
f[i] = true;
}
for(int i=1;i<=n;i++){
for(int j=0;j<G1[i].size();j++){
int v = G1[i][j];
if(!vis[v]){
f[i] = false;
}
}
}
bfs(s);
cout << dis[t] << endl;
return 0;
}