#include<stdio.h>
#include<limits.h>
#define MAX 100
#define INF INT_MAX
int main()
{
    int n;
    scanf("%d",&n);
    if(n<=0||n> MAX)
    {
        printf("Invalid input");
        return 0;
    }
    int graph[MAX][MAX];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(scanf("%d",&graph[i][j])!=1)
            {
                printf("Invalid input");
                return 0;
            }
            if(graph[i][j]<0)
            {
                printf("Invalid input");
                return 0;
            }
        }
    }
    int src,u;
    scanf("%d",&src);
    if(src<0||src>=n)
    {
        printf("Invalid input");
        return 0;
    }
    int dist[MAX],visited[MAX];
    for(int i=0;i<n;i++)
    {
        dist[i]=INF;
        visited[i]=0;
    }
    dist[src]=0;
    for(int count=0;count<n-1;count++)
    {
        int u=-1,minDist=INF;
        for(int i=0;i<n;i++)
        {
            if(!visited[i]&&dist[i]<minDist)
            {
                minDist=dist[i];
                u=i;
                
            }
        }
    }
    if(u==-1)break;
    visited[u]=1;
    for(int v=0;v<n;v++)
    {
        if(!visited[v]&&graph[u][v]>0&&dist[u]!=INF&&dist[u]+graph[u][v]<dist[v])
        {
            dist[v]=dist[u]+graph[u][v];
            
        }
    }
for(int i=0;i<n;i++)
{
    if(dist[i]==INF)
      printf("INF");
    else
      printf("%d",dist[i]);
}
return 0;
}