#include<stdio.h>

#define MAX 100
#define INF 1000000

int main(){
    intn;
    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;i<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 dist[MAX],visited[MAX];
    for(i=0;i<n;i++){
        dist[i]=INF;
        visited[i]=0;
    }
    dist[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]&&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)
    print(" ");
}
return 0;
}
}