/*#pragma GCC optimize("Ofast") #pragma GCC optimize("avx2") #pragma GCC optimize("unroll-loops")*/ #define ll int64_t #include using namespace std; const ll MAXN=1e3+5,mod=1e9+7; ll n,m,g,cost[201][2001],par[201],rp[2001],gr[MAXN],cnt[MAXN],dist[201]; pair,ll> d[MAXN]; vector> v[201]; bool f[201]; void solve(){ cin>>n>>m>>g; for(ll i=1;i<=g;i++){cin>>d[i].first.second; d[i].second=i; gr[i]=d[i].first.second; cnt[d[i].first.second]++;} for(ll i=1;i<=n;i++) for(ll j=1;j<=2000;j++) cin>>cost[i][j]; ll p,q,w; for(ll i=0;i>p>>q>>w; v[p].push_back({q,w}); v[q].push_back({p,w}); } for(ll i=2;i<=n;i++) dist[i]=LLONG_MAX; set > s; s.insert({0,1}); ll k,td; while(!s.empty()){ k=s.begin()->second; td=s.begin()->first; s.erase(s.begin()); if(f[k]) continue; f[k]=1; for(auto ch : v[k]){ if(f[ch.first]==0 && td+ch.second path; for(ll i=1;i<=g;i++){ if(i!=1 && gr[d[i].second]!=gr[d[i-1].second]) pos=max(pos,min(2000-anscnt+i/4+8,max((ll)0,d[i].first.first-cnt[gr[d[i].second]]/8))); ll t=gr[d[i].second]; while(t!=0){ path.push(t); t=par[t]; } if(gr[d[i].second]==gr[d[i+3].second]){ cout<>t; while(t--) solve(); return 0; }