#include <bits/stdc++.h>
using namespace std;
bool debug = false;
int n, m, k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
long long ln, lk, lm;
int dis[105][105];
int S, T, ans[105], cnt, h[105], f[105];
int b[105][105], must[105][105];
vector<pair<int, int>> bus;
int dfs(int x, int t) {
  if (h[x] == cnt) return f[x];
  h[x] = cnt;
  int aa = -1;
  for (int i = 1; i <= n; i++) {
    if (dis[x][i] == 1 && dis[x][i] + dis[i][t] == dis[x][t]) {
      aa = max(aa, dfs(i, t));
    }
  }
  if (aa < 0) aa = dis[0][0];
  return f[x] = min(aa, ans[x] + 1);
}
int main() {
  scanf("%d%d%d%d", &n, &m, &S, &T);
  for (int(i) = 0; (i) < (int)(105); (i)++)
    for (int(j) = 0; (j) < (int)(105); (j)++) {
      dis[i][j] = 1e9;
      ans[i] = 1e9;
    }
  for (int(i) = 0; (i) < (int)(n); (i)++) dis[i + 1][i + 1] = 0;
  for (int i = 0, u, v; i < m; i++) {
    scanf("%d%d", &u, &v);
    dis[u][v] = 1;
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      for (int k = 1; k <= n; k++) {
        dis[j][k] = min(dis[j][k], dis[j][i] + dis[i][k]);
      }
    }
  }
  scanf("%d", &k);
  for (int i = 1, s, t; i <= k; i++) {
    scanf("%d%d", &s, &t);
    for (int j = 1; j <= n; j++) {
      if (dis[s][j] < 1e9 && dis[s][j] + dis[j][t] == dis[s][t]) {
        b[i][dis[s][j]]++;
      }
    }
    for (int j = 1; j <= n; j++) {
      if (dis[s][j] < 1e9 && dis[s][j] + dis[j][t] == dis[s][t]) {
        if (b[i][dis[s][j]] == 1) {
          must[i][j] = 1;
        }
      }
    }
    bus.push_back({s, t});
  }
  ans[T] = 0;
  while (1) {
    bool bl = 0;
    for (int i = 1; i <= k; i++) {
      for (int j = 1; j <= n; j++)
        if (must[i][j]) {
          cnt++;
          int A = dfs(j, bus[i - 1].second);
          if (A < ans[j]) {
            ans[j] = A;
            bl = 1;
          }
        }
    }
    if (!bl) break;
  }
  printf("%d\n", ans[S] >= 1e9 ? -1 : ans[S]);
  return 0;
}
