#include<stdio.h>

#define MAX 100
#define INF 1000000

int main(){
  int n;
  if(scanf("%d",&n)!=||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-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++){
      prinf("%d",dist[i]);
      if(i<n-1)
      printf(" ");
    }
    return 0;
}