#include using namespace std; using ll=long long; using ld=long double; #define rep(i,n) for(ll i=0;i=0;i--) #define rep1(i,n) for(ll i=1;i<=n;i++) #define rep_lt(i,j,k) for(ll i=j;i void vcout(const Vec& vec){ for(auto& v:vec) cout< void vcout_val(const Vec& vec){ for(auto& v:vec) cout< void vvcout(const Vec& vec){ for(auto& v:vec){ for(auto& k:v) cout< void vvcout_s(const Vec& vec){ for(auto& v:vec){ for(auto& k:v) cout< void vvcout_val(const Vec& vec){ for(auto& v:vec){ for(auto& k:v) cout< void chmax(T& a,const U& b){ if(a void chmin(T& a,const U& b) { if(a>b) a=b; } struct FastIO{ FastIO(){ ios::sync_with_stdio(false); cin.tie(nullptr); } }fastio; void YN(bool state){cout<<(state?"Yes\n":"No\n");} void CY(bool state){if(state)cout<<"Yes"< using namespace atcoder; using mint=modint998244353; //using mint=modint1000000007; using T=tuple; using P=pair; //考察 int main(){ ll n,m; cin>>n>>m; vector> to(n); rep(i,m){ ll a,b; cin>>a>>b; a--;b--; to[a].push_back(b); to[b].push_back(a); } ll k;cin>>k; vector iwai(n); rep(i,k){ ll a;cin>>a; a--; iwai[a]=true; } queue

q; vector> dist(n,vector(5,INF)); auto push=[&](ll v,ll cnt,ll d)->void{ if(iwai[v]) cnt++;else cnt=0; if(cnt==5) return; if(dist[v][cnt]!=INF) return; dist[v][cnt]=d; q.emplace(v,cnt); }; push(0,0,0); while(q.size()){ auto [now,cnt]=q.front();q.pop(); ll d=dist[now][cnt]; for(auto next:to[now]) push(next,cnt,d+1); } ll ans=*min_element(all(dist[n-1])); if(ans==INF) ans=-1; cout<