#include #include #include using namespace std; const int MAXL = 200 + 5; const int MAXN = 200000 + 5; const int INF = 1000000000; int Tn, m, k, n, a[MAXL][MAXL], x, y, dp[MAXN][MAXL], str[MAXN]; int main (int argc, char * const argv[]) { ios_base::sync_with_stdio(false); cin >> Tn; while (Tn--) { cin >> m >> k >> n; for(int i = 1; i <= m; i++) for(int j = 1; j <= m; j++) a[i][j] = (i != j) * INF; for(int i = 1; i <= k; i++) { cin >> x >> y; a[x][y] = 1; a[y][x] = 1; } for(int k = 1; k <= m; k++) for(int i = 1; i <= m; i++) for(int j = 1; j <= m; j++) a[i][j] = min(a[i][j], max(a[i][k],a[k][j])); for(int i = 1; i <= n; i++) cin >> str[i]; for(int i = 1; i <= n; i++) for(int j = 0; j <= m; j++) dp[i][j] = INF; for(int i = 1; i <= n; i++) { for(int j = 1; j <= m; j++) if (a[str[i]][j] < INF) dp[i][j] = min(dp[i][j], dp[i - 1][j] + a[str[i]][j]); for(int j = 2; j <= m; j++) { dp[i][j] = min(dp[i][j], dp[i][j - 1]); dp[i][j] = min(dp[i][j], INF); } } cout << dp[n][m] - (INF + 1) * (dp[n][m] == INF) << endl; } return 0; }