func_code_string: #include <bits/stdc++.h>   int S, T, n, m, l, vol[200020];   int dis[400040], pos[400040], q[400040 * 2];   int E, u[200020], v[200020], go[400040], to[400040];   void AE(int s, int t) {     to[++E] = t;     v[s] = u[s] ? go[v[s]] = E : u[s] = E;   }   int spfa(int maxq) {     register int i, j, k, top, tail;     memset(dis, 0x7f, sizeof(dis));     memset(pos, 0, sizeof(pos));     q[1] = S;     dis[S] = top = 0;     pos[S] = tail = 1;     while (++top <= tail) {       i = q[top];       if (dis[i] < maxq)         for (j = u[i]; j; j = go[j]) {           int tmp = vol[to[j]] ? 0 : dis[i] + 1;           if (dis[to[j]] > tmp) {             dis[to[j]] = tmp;             if (!pos[to[j]]) {               q[++tail] = to[j];               pos[to[j]] = 1;             }           }         }       pos[i] = 0;     }     return dis[T] < 0x7f7f7f7f;   }   int main() {     register int i, j, k;     scanf( %d%d%d , &n, &m, &l);     for (i = 1; i <= l; i++) {       scanf( %d , &k);       vol[k] = 1;     }     for (i = 1; i <= m; i++) {       scanf( %d%d , &j, &k);       AE(j, k);       AE(k, j);     }     scanf( %d%d , &S, &T);     int l = 1, r = n, m, ans = -1;     while (l <= r) {       m = l + r + 1 >> 1;       if (spfa(m)) {         ans = m;         r = m - 1;       } else         l = m + 1;     }     printf( %d n , ans < 0 ? -1 : ans);     return 0;   }   