#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",&scr)!=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)
         printf(" ");
     }
     return 0;
}