#include #include #include #include using namespace std; int main() { int n,k,a,b; cin>>n>>k>>a>>b; int sol=0; vector> Adj(n+1); for(int i=0;i>x>>y; if((x==1&&y==n) || (x==n&&y==1)) sol=a; Adj[x].push_back(y); Adj[y].push_back(x); } if(sol==0) sol=b; if(sol!=a){ vector dst(n+1,-1); queue q; q.push(1); dst[1]=0; bool cont=true; while(!q.empty()&&cont){ int v=q.front(); q.pop(); for(int i : Adj[v]) if(dst[i]==-1){ dst[i]=dst[v]+1; q.push(i); if(i==n){ cont=false; break; } } } if(dst[n]!=-1 && a*dst[n] dst(n+1); queue q; q.push(1); dst[1]=0; set notvis; for(int i=2;i<=n;++i) notvis.insert(i); bool cont=true; while(!q.empty() && cont){ int v=q.front(); q.pop(); set ngb(Adj[v].begin(),Adj[v].end()); for(auto it=notvis.begin();it!=notvis.end();++it) if(ngb.find(*it)==ngb.end()){ dst[*it]=dst[v]+1; notvis.erase(*it); q.push(*it); if(*it==n){ cont=false; break; } } } if(cont==false && b*dst[n]