#include //#define int long long using namespace std; inline int read() { int x=0,f=1;char ch=getchar(); while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();} while (ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-48;ch=getchar();} return x*f; } void write(int x) { if(x<0)putchar('-'),x=-x; if(x<10)putchar(x+'0'); else write(x/10),putchar(x%10+'0'); } const int N=2e6; const int mod=1e9+7; struct node{ int u,v,w,nxt; }mp[11000000]; int top; int idx[N]; void add(int u,int v,int w){ mp[++top]={u,v,w,idx[u]}; idx[u]=top; } int X,Y,n,f; int u[1000],v[1000],w[1000]; int id(int a,int b){ return (a-1)*101+b; } struct nd{ int id,z; bool operator < (const nd &p)const{ return z>p.z; } }; bool vis[10000000]; priority_queueq; int dis[10000000]; void dij(){ memset(dis,0x3f,sizeof dis); dis[1]=0; q.push((nd){1,0}); while(!q.empty()) { nd now=q.top(); q.pop(); if(vis[now.id])continue; vis[now.id]=1; for(int i=idx[now.id];i;i=mp[i].nxt){ int v=mp[i].v; if(dis[v]>dis[now.id]+mp[i].w){ dis[v]=dis[now.id]+mp[i].w; q.push((nd){v,dis[v]}); } } } int zd=id(X,Y); int ans=INT_MAX; for(int i=0;i<=n;i++) ans=min(ans,dis[zd+101*101*i]); cout<