#include <iostream>
#include 
<queue>
#define MAXN 101
using namespace std;

struct type1 {
    
int v, w;
    
bool operator < (const type1& node) const {
        
return w > node.w;
    }
};

int MAP[MAXN][MAXN];
int D[MAXN];
/**********************************/
int dijk(int s, int t, int n)
{
    priority_queue
<type1> q;
    
bool mk[MAXN] = {false};
    type1 e 
= {s, 0}, ne;
    
int i, tmp;
    D[s] 
= 0;
    q.push(e);
    
while (!q.empty())
    {
        e 
= q.top();
        q.pop();
        
if (mk[e.v]) continue;
        
if (e.v == t) return D[t];
        
for (mk[e.v] = true, i = 1; i <=n; i++)
            
if (!mk[i] && MAP[e.v][i] < INT_MAX && (tmp = e.w + MAP[e.v][i]) < D[i])
            {
                D[ne.v 
= i] = ne.w = tmp;
                q.push(ne);
            }
    }
    
return D[t];
}
/*****************************************/
int main()
{   
     
     
for (i = 1; i <= n; i++)
            
for (D[i] = INT_MAX, j = 1; j <= n; j++)
                MAP[i][j] 
= INT_MAX;
     
}