#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 src;
    if(scanf("%d", &src)!=1 || src<0 || src>=n){
        printf("Invalid input");
        return 0;
    }
    int dis[MAX],visited[MAX];
    for(i=0;i<n;i++){
        dis[i]=INF;
        visited[i]=0;
    }
    dis[src]=0;
    for(int count=0; count<n-1; count++){
        int min = INF,u=-1;
        for(int v=0;v<n;v++){
            if(!visited[v]&&dis[v]<=min){
                min=dis[v];
                u=v;
            }
        }
        if(u==-1)
        break;
        visited[u]=1;
        for(int v=0;v<n;v++){
            if(!visited[v] && graph[u][v] > 0 && dis[u] + graph[u][v] < dis[v]){
                dis[v]=dist[u] + graph[u][v];
            }
        }
    }
    for(i=0;i<n;i++){
        printf("%d",dis[i]);
        if(i<n-1)
        printf(" ");
    }
    return 0;
}