#include <bits/stdc++.h>
using namespace std;
int n, m, a, b;
int d[111][111];
int ans[111];
int k;
int s[111];
int t[111];
bool g[111][111];
int r[111];
int main() {
  cin >> n >> m >> a >> b;
  a--, b--;
  for (int i = (0); i < (n); i++)
    for (int j = (0); j < (n); j++) {
      if (i == j)
        d[i][j] = 0;
      else
        d[i][j] = -1;
    }
  for (int i = (0); i < (m); i++) {
    int x, y;
    scanf("%d %d", &x, &y);
    x--, y--;
    d[x][y] = 1;
  }
  for (int k = (0); k < (n); k++)
    for (int i = (0); i < (n); i++)
      for (int j = (0); j < (n); j++)
        if (d[i][k] != -1 && d[k][j] != -1)
          if (d[i][j] == -1 || d[i][j] > d[i][k] + d[k][j])
            d[i][j] = d[i][k] + d[k][j];
  cin >> k;
  for (int i = (0); i < (k); i++) cin >> s[i] >> t[i], s[i]--, t[i]--;
  for (int i = (0); i < (n); i++)
    for (int j = (0); j < (k); j++)
      if (d[s[j]][t[j]] != -1 && d[s[j]][i] != -1 && d[i][t[j]] != -1 &&
          d[s[j]][i] + d[i][t[j]] == d[s[j]][t[j]]) {
        int good = 0;
        for (int ii = (0); ii < (n); ii++)
          if (d[s[j]][ii] == d[s[j]][i] &&
              d[s[j]][ii] + d[ii][t[j]] == d[s[j]][t[j]])
            good++;
        g[i][j] = (good == 1);
      }
  memset(ans, -1, sizeof ans);
  ans[b] = 0;
  bool change = 1;
  while (change) {
    change = 0;
    for (int i = (0); i < (n); i++)
      for (int j = (0); j < (k); j++)
        if (g[i][j]) {
          vector<pair<int, int> > v;
          for (int z = (0); z < (n); z++)
            if (d[s[j]][i] <= d[s[j]][z] && d[s[j]][z] != -1 &&
                d[z][t[j]] != -1 && d[s[j]][z] + d[z][t[j]] == d[s[j]][t[j]])
              v.push_back(pair<int, int>(d[z][t[j]], z));
          sort((v).begin(), (v).end());
          for (int z = (0); z < (v.size()); z++) {
            int ver = v[z].second;
            r[ver] = ans[ver];
            if (r[ver] == -1) r[ver] = 1e9;
            if (z == 0) continue;
            int w = 0;
            for (int q = (0); q < (n); q++)
              if (d[ver][q] == 1 && d[q][t[j]] == d[ver][t[j]] - 1)
                w = max(w, r[q]);
            r[ver] = min(r[ver], w);
          }
          if (r[i] != 1e9)
            if (ans[i] == -1 || ans[i] > r[i] + 1) {
              ans[i] = r[i] + 1;
              change = 1;
            }
        }
  }
  cout << ans[a] << endl;
  return 0;
}
