#include <bits/stdc++.h>
using namespace std;
int dis[105][105];
int n, m, S, T;
int tot[105], wz[105];
int q;
int p[105];
int st[105], en[105];
bool ok[105][105];
int ans[105];
int bz[105], totnum;
int f[105];
int dfs(int w, int to) {
  if (bz[w] == totnum) return f[w];
  bz[w] = totnum;
  int ret = -1;
  for (int i = 1; i <= n; i++) {
    if (dis[w][i] == 1 && dis[w][i] + dis[i][to] == dis[w][to])
      ret = max(ret, dfs(i, to));
  }
  if (ret < 0) ret = 1e9;
  f[w] = min(ans[w] + 1, ret);
  return f[w];
}
int main() {
  scanf("%d%d%d%d", &n, &m, &S, &T);
  memset(dis, 63, sizeof(dis));
  for (int i = 1; i <= n; i++) dis[i][i] = 0;
  for (int i = 1; i <= m; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    dis[x][y] = 1;
  }
  for (int k = 1; k <= n; k++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
        dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]);
  scanf("%d", &q);
  for (int k = 1; k <= q; k++) {
    int x, y;
    scanf("%d%d", &x, &y);
    st[k] = x;
    en[k] = y;
    if (dis[x][y] > 1e8) continue;
    memset(tot, 0, sizeof(tot));
    for (int i = 1; i <= n; i++) {
      if (dis[x][i] + dis[i][y] != dis[x][y]) continue;
      tot[dis[x][i]]++;
      wz[dis[x][i]] = i;
    }
    for (int i = 0; i <= n; i++) {
      if (tot[i] != 1) continue;
      ok[k][wz[i]] = 1;
    }
  }
  memset(ans, 63, sizeof(ans));
  ans[T] = 0;
  while (1) {
    bool chg = 0;
    for (int k = 1; k <= q; k++) {
      for (int i = 1; i <= n; i++) {
        if (!ok[k][i]) continue;
        ++totnum;
        int mn = dfs(i, en[k]);
        if (ans[i] > mn) {
          ans[i] = mn;
          chg = 1;
        }
      }
    }
    if (!chg) break;
  }
  if (ans[S] > 1e7) ans[S] = -1;
  printf("%d", ans[S]);
  return 0;
}
