#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 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;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;
}