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