#include using namespace std; int main(){ int n,m; cin>>n>>m; int h[n]; for(int i=0;i>h[i]; vector> G(n); for(int i=0;i>u>>v; u--;v--; G[u].push_back(v); G[v].push_back(u); } int idx[n]; iota(idx,idx+n,0); sort(idx,idx+n,[&](int i,int j){return h[i] dp0(n,-1e9),dpn(n,-1e9); dp0[0]=0; dpn[n-1]=0; for(int i:idx){ for(int j:G[i]) if(h[j] DQ{ind}; int i0=ind,in=ind; for(;dp0[i0]+dpn[in];){ if(dp0[i0]){ for(int to:G[i0]){ if(dp0[to]+1==dp0[i0]){ DQ.push_front(to); i0=to; break; } } } if(dpn[in]){ for(int to:G[in]){ if(dpn[to]+1==dpn[in]){ DQ.push_back(to); in=to; break; } } } } int num=0; //for(int i:DQ) cout<