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