func_code_string: #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]);   }   