func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> adj[200010], adjr[200010];   int dist[200010], n, m, nop[200010], minp, maxp;   void BFS(int scr) {     queue<int> q;     q.push(scr);     dist[scr] = 1;     nop[scr] = 0;     while (!q.empty()) {       int u = q.front();       q.pop();       for (long long i = 0; i < adj[u].size(); i++) {         if (dist[adj[u][i]] == dist[u] + 1) nop[adj[u][i]]++;         if (!dist[adj[u][i]]) {           dist[adj[u][i]] = dist[u] + 1;           q.push(adj[u][i]);           nop[adj[u][i]] = 1;         }       }     }   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     ;     int t = 1;     while (t--) {       cin >> n >> m;       for (long long i = 0; i < m; i++) {         int a, b;         cin >> a >> b;         adj[b].push_back(a);         adjr[a].push_back(b);       }       int k;       cin >> k;       int path[k + 1];       for (long long i = 1; i <= k; i++) cin >> path[i];       BFS(path[k]);       for (long long i = 1; i <= k - 1; i++) {         minp += dist[path[i]] < dist[path[i + 1]] + 1;         for (int j = 0; j < adjr[path[i]].size(); j++) {           if (adjr[path[i]][j] != path[i + 1] &&               dist[path[i]] == dist[adjr[path[i]][j]] + 1) {             maxp += 1;             break;           }         }       }       cout << minp <<     << maxp;     }   }   