dist[first]=0;
pre[first].push_back(first);
for(int i=0;i<n;i++)
{
int u=-1,minn=inf;
for(int j=1;j<=n;j++)
{
if(visit[j]==false&&dist[j]<minn)
{
minn=dist[j];
u=j;
}
}
if(u==-1)
break;
visit[u]=true;
for(int j=1;j<=n;j++)
{
if(visit[j]==false&&e[u][j]!=inf)
{
if(dist[u]+e[u][j]<dist[j])
{
pre[j].clear();
dist[j]=dist[u]+e[u][j];
pre[j].push_back(u);
}
else if(dist[u]+e[u][j]==dist[j])
pre[j].push_back(u);
}
}
}