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