program road;
const maxn=10450;
type node=^ha;
ha=record
v:longint;
next:node;
end;
var d,q:array[0..maxn]of longint;
f,ff:array[0..maxn]of node;
g,gg:array[0..maxn]of boolean;
i,j,k,n,m,x,y,s,t:longint;
head,tail:longint;
p:node;
procedure dfs;
var i:longint;
begin
fillchar(g,sizeof(g),false);
fillchar(gg,sizeof(gg),false);
fillchar(q,sizeof(q),0);
head:=0;tail:=1;
q[1]:=t;
g[t]:=true;gg[t]:=true;
repeat
inc(head);if head>maxn then head:=1;
p:=ff[q[head]];
while p<>nil do
begin
i:=p^.v;
if not g[i] then
begin
g[i]:=true;
gg[i]:=true;
inc(tail);if tail>maxn then tail:=1;
q[tail]:=i;
end;
p:=p^.next;
end;
until head>tail;
for i:=1 to n do
if not gg[i] then
begin
p:=ff[i];
while p<>nil do
begin
g[p^.v]:=false;
p:=p^.next;
end;
end;
end;
procedure spfa;
var i:longint;
begin
fillchar(q,sizeof(q),0);
fillchar(d,sizeof(d),$7f);
head:=0;tail:=1;q[1]:=s;
d[s]:=0;
repeat
inc(head);if head>maxn then head:=1;
i:=q[head];
p:=f[i];
while p<>nil do
begin
if (g[p^.v])and(d[p^.v]>d[i]+1)then
begin
d[p^.v]:=d[i]+1;
inc(tail);if tail>maxn then tail:=1;
q[tail]:=p^.v;
end;
p:=p^.next;
end;
until head>tail;
if d[t]=d[maxn] then writeln(-1)else writeln(d[t]);
end;
begin
readln(n,m);
for i:=1 to n do begin f[i]:=nil;ff[i]:=nil;end;
for i:=1 to m do
begin
readln(x,y);
if x<>y then
begin
new(p);
p^.v:=y;p^.next:=f[x];f[x]:=p;
new(p);
p^.v:=x;p^.next:=ff[y];ff[y]:=p;
end;
end;
readln(s,t);
dfs;
spfa;
end.
/**************************************************************
Problem: 2338
User: admin
Language: Pascal
Result: Wrong Answer
****************************************************************/