#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++) {
        if(scanf("%d",&graph[i][j])!=1) {
            printf("Invalid input");
            return 0;
        }
    }
}
int src,n;
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]&&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;
}