#include <bits/stdc++.h>
using namespace std;
inline int read() {
  int x = 0, c = getchar(), f = 0;
  for (; c > '9' || c < '0'; f = c == '-', c = getchar())
    ;
  for (; c >= '0' && c <= '9'; x = (x << 1) + (x << 3) + c - '0', c = getchar())
    ;
  return f ? -x : x;
}
inline void write(int x) {
  if (x < 0) putchar('-'), x = -x;
  if (x >= 10) write(x / 10);
  putchar(x % 10 + 48);
}
const int N = 100 + 10, oo = 1e9;
int n, m, q, a, b, f[N], ans[N], dis[N][N], st[N], en[N], vis[N];
bool must[N][N];
int dfs(int x, int y, int Time) {
  if (x == y) return ans[x];
  if (vis[x] == Time) return f[x];
  vis[x] = Time;
  f[x] = 0;
  for (int i = (int)1, _y = n; i <= _y; i++)
    if (dis[x][i] == 1 && dis[i][y] + 1 == dis[x][y])
      f[x] = max(f[x], dfs(i, y, Time));
  return f[x] = min(f[x], ans[x]);
}
int main() {
  n = read(), m = read(), a = read(), b = read();
  for (int i = (int)1, _y = n; i <= _y; i++)
    for (int j = (int)i + 1, _y = n; j <= _y; j++) dis[i][j] = dis[j][i] = oo;
  for (int i = (int)1, _y = m; i <= _y; i++) {
    int u = read(), v = read();
    dis[u][v] = 1;
  }
  for (int k = (int)1, _y = n; k <= _y; k++)
    for (int i = (int)1, _y = n; i <= _y; i++)
      if (i != k)
        for (int j = (int)1, _y = n; j <= _y; j++)
          if (i != j && j != k && dis[i][j] > dis[i][k] + dis[k][j])
            dis[i][j] = dis[i][k] + dis[k][j];
  q = read();
  for (int i = (int)1, _y = q; i <= _y; i++) {
    st[i] = read(), en[i] = read();
    if (dis[st[i]][en[i]] == oo) continue;
    memset(vis, 0, sizeof vis);
    for (int j = (int)1, _y = n; j <= _y; j++)
      if (dis[st[i]][j] + dis[j][en[i]] == dis[st[i]][en[i]])
        vis[dis[st[i]][j]]++;
    for (int j = (int)1, _y = n; j <= _y; j++)
      if (dis[st[i]][j] + dis[j][en[i]] == dis[st[i]][en[i]] &&
          vis[dis[st[i]][j]] == 1)
        must[i][j] = 1;
  }
  for (int i = (int)1, _y = n; i <= _y; i++) ans[i] = oo, vis[i] = 0;
  ans[b] = 0;
  for (int Time = (int)1, _y = n; Time <= _y; Time++) {
    memset(vis, 0, sizeof vis);
    for (int i = (int)1, _y = q; i <= _y; i++)
      if (dis[st[i]][en[i]] != oo)
        for (int j = (int)1, _y = n; j <= _y; j++)
          if (must[i][j]) ans[j] = min(ans[j], dfs(j, en[i], i) + 1);
  }
  printf("%d\n", ans[a] == oo ? -1 : ans[a]);
}
