#include<stdio.h>
#include<limits.h>
#define INF 1000000
void dijkstra(int n,int graph[n][n],int start){
    int disk[n],visited[n];
    for(int i=0;i<n;i++){
        disk[i] = INF;
        visited[i]=0;
    }
    disk[start]=0;
    for(int count=0;count<n-1;count++){
        int min=INF,u=-1;
        for(int v=0;v<n;v++){
            if(!visited[v]&&dist[v]<=min){
                min = dist[v];
                u=v;
            }
        }
        if(u==-1) break;
        visited[u]=1;
        for(int v=0;v<n;v++){
            if(!visited[v]&&graph[u][v]&&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]);
    }
}
int main(){
    int n;
    scanf("%d",&n);
    if(n<o||n>100){
        printf("Invalid input");
        return 0;
    }
    int graph[n][n];
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            scanf("%d",&graph[i][j]);
            if(graph[i][j]<0){
                printf("Invalid input");
                return 0;
            }
        }
    }
    int start;
    scanf("%d",&start);
    if(start<0||start>=n){
        printf("Invalid input");
        return;
    }
    dijkstra(n,graph,start);
    return 0;
}