#include #include #include #include using namespace std; int n,s,t,k,m; int x[1<<17]; vector >G[1<<17]; void solve() { cin>>n>>s>>t>>k; s--,t--; k--; for(int i=0;i>x[i]; cin>>m; for(int i=0;i>a>>b>>c; a--,b--; G[a].push_back(make_pair(b,c)); } vector >dp(k+1,vector(n,9e18)); vector >prc(k+1,vector(n,-1)); vector >pru(k+1,vector(n,-1)); dp[0][s]=x[s]; priority_queue > >P; P.push(make_pair(-x[s],make_pair(0,s))); while(!P.empty()) { int c=P.top().second.first; int u=P.top().second.second; long cost=-P.top().first; P.pop(); if(dp[c][u]e:G[u]) { int v=e.first; long nxt=cost+e.second+x[v]; int nc=c==k?c:c+1; if(dp[nc][v]>nxt) { dp[nc][v]=nxt; prc[nc][v]=c; pru[nc][v]=u; P.push(make_pair(-nxt,make_pair(nc,v))); } } } if(dp[k][t]==(long)9e18) { cout<<"Impossible"<ans; while(k!=-1) { ans.push_back(t); int nk=prc[k][t]; t=pru[k][t]; k=nk; } reverse(ans.begin(),ans.end()); cout<