#include<stdio.h>
#include<limits.h>
#define MAX 100
#define INF 1000000000
void dijkstra(int n,int graph[MAX][MAX],int start){
    int dist[max];
    int visited[MAX]={0};
    for(int i=0;i<n;i++)
    dist[i]=INF;
}
 dist[start]=0;
 for(int count=0;count<n-1;count++){
     int u=-1;
     for(int i=0;i<n;i++){
         if(!visited[i]&&(u==-1||dist[i]<dist[u]))
         u=i;
     }
     if(dist[u]==INF)
     break;
     visited[u]=1;
     for(int v=0;v<n;v++){
         if(graph[u][v]>0&&!visited[v]){
             if(dist[u]+graph[u][v]<dist[v]){
                 dist[v]=dist[u]+graph[u][v];
             }
         }
     }
 }
 for(int i=0;i<n;i++){
     printf("%d",dist[i]);
 }
 print(" ");
}
int main()
{
    int n;
    scanf("%d",&n);
    if(n<0){
        print("Invalid input");
        return 0;
    }
    int graph[MAX][MAX];
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
    scanf("%d",&graph[i][j]);
    int s;
    scanf("%d",&s);
    if(s<0||s>=n){
        printf("Invalid input");
        return 0;
    }
    dijkstra(n,graph,s);
    return 0;
}