#include #include #include #include struct { int val; char state; /* 0 - final, 1 - temp, 2 - infty */ int prev, next; } V[10000]; struct { int s, c; int val; } E[50000]; int main() { int N, M, S, C; int i, first, li; int min, minV; for (;;) { scanf("%d %d %d %d",&N,&M,&S,&C); if (N==0 && M==0 && S==0 && C==0) break; S--; C--; for (i=0;iV[min].val+E[i].val) { V[cil].val=V[min].val+E[i].val; if (V[cil].state==2) { V[cil].state=1; V[cil].next=first; if (V[cil].next!=-1) V[V[cil].next].prev=cil; V[cil].prev=-1; first=cil; } } } } } printf("%d\n",V[C].val); } return 0; }