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