ll@n,@s--,@t--,@k,@x[n],@m; int y[m],a[],b[],c[n*k]; rd((a--,b--,y)(m)); wgraphg; g.setDirectEdge(n,m,b,a,y); DijkstraHeaph; h.malloc(n*k,1); h.change(t*k+(k-1),x[t]); c[t*k+(k-1)]=-1; while(h.size){ int i=h.pop(); int j=i/k; int l=i%k; rep(o,g.es[j]){ int p=g.edge[j][o]; int r=max(0,l-1); int q=p*k+r; ll v=h.val[i]+g.cost[j][o]+x[p]; if(!h.visited[q]&&(h.place[q]<0||h.val[q]>v)){ h.change(q,v); c[q]=i; } } } if(h.visited[s*k]){ wt("Possible"); wt(h.val[s*k]); int z[n*k],w=0,u=s*k; while(u>=0){ z[w++]=u/k+1; u=c[u]; } wt(w); wt(z(w)); }else{ wt("Impossible"); }