#include<stdio.h>
#include<limits.h>
#define MAX 100
#define INF 100000000
int main()
{
int n;
if(scanf("%d",&n)!=1 || n<=0 || n>MAX){
    printf("Invalid input\n");
        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){
     printf("Invalid input\n");
        return 0;
          }
      }
 }
 int s,u;
 if(scanf("%d",&s)!=1 || s<0 || s>=n)
 {
         printf("Invalid input\n");
        return 0;
 }
int dist[MAX];
int visited [MAX];
for(int i=0;i<n;i++){
    dist[i]=INF;
    visited[i]=0;
}
dist[s]=0;
for(int count=0;count<n-1;count++)
{
    int u=-1,minDist=INF;
    for(int v =0;v < n;v++)
    {
        if(!visited[v] && dist[v]<=minDist){
            minDist=dist[v];
            u=v;
        }

        }
        if(u==-1)
        break;
        visited[u] =1;
        for(int v=0;v < n;v++){
            if(!visited[v]&&matrix[u][v] > 0 && dist[u] +matrix[u][v] < dist[v]){
                dist[v]=dist[u] +matrix[u][v];
            }
        }
    }
  for(int i=0;i<n;i++)
    printf("%d ",dist[i]);
    if(i<n-1)
    printf(" ");
    return 0;
}