void solve(){
cin >> N >> M;
rep(i, 0, N) rep(j, 0, N) cost[i][j] = 1e15;
rep(i, 0, N) cost[i][i] = 0;
rep(i, 0, M){
int u, v, w; cin >> u >> v >> w;
u--; v--;
cost[u][v] = w;
}
rep(k, 0, N) rep(i, 0, N) rep(j, 0, N) cost[i][j] = min(cost[i][j], cost[i][k] + cost[k][j]);
cin >> K;
vector<int> v(K), ans;
rep(i, 0, K) cin >> v[i];
ll mn = 1e15;
rep(X, 0, N){
ll tmp = 0;
for(auto c: v) tmp = max(tmp, cost[X][c-1] + cost[c-1][X]);
if(tmp < mn){
mn = tmp;
ans.clear();
}
if(tmp == mn) ans.push_back(X+1);
}
for(auto c: ans) cout << c << ' ';
}