struct dij
{
int n;
const int inf = 0x3f3f3f3f;
int maps[maxn][maxn];
int d[maxn], v[maxn];
int Dijkstra(int s, int t)
{
memset(d, inf, sizeof d);
memset(v, 0, sizeof v);
d[s] = 0;
int minn, k;
for(int i = 1; i <= n; i++)
{
minn = inf;
k = -1;
for(int j = 1; j <= n; j++)
{
if(!v[j] && d[j] < minn)
{
k = j;
minn = d[k];
}
}
v[k] = 1;
if(k == t) return d[t];
for(int j = 1; j <= n; j++)
{
if(!v[j] && d[k] + maps[k][j] < d[j])
{
d[j] = d[k] + maps[k][j];
}
}
}
}
int ans(int s,int t)
{
return Dijkstra(s,t);
}
};