#include<stdio.h>
#include<limits.h>

int main(void){
    int n;
    if(scanf("%d", &n) != 1){
        printf("Invalid input");
        return 0;
    }
    
    if(n<0){
        printf("Invalid input");
        return 0;
    }
    
    if(n==0){
        return 0;
    }
    
    long long adj[105][105];
    for(int i=0;i<n;++i){
        for(int j=0;j<n;++j){
            long long x;
            if(scanf("%lld", &x) != 1){
                printf("Invalid input");
                return 0;
            }
            
            adj[i][j]=x;
        }
    }
    
    int s;
    if(scanf("%d",&s) != 1){
        printf("Invalid input");
        return 0;
    }
    
    if(s<0 || s >= n){
        printf("Invalid input");
        return 0;
    }
    
    const long long INF=(long long)1e18;
    long long dist[105];
    int used[105]={0};
    
    for(int i=0;i<n;++i) dist[i]=INF;
    dist[s]=0;
    
    for(int iter=0;iter<n;++iter){
        int u=-1;
        long long best=INF;
        for(int i=0;i<n;++i){
            if(!used[i] && dist[i]<best){
                best=dist[i];
                u=i;
            }
        }
        
        if(u==-1) break;
        used[u]=1;
        
        for(int v=0;v<n;++v){
            if(!used[v]){
                long long w=adj[u][v];
                if(dist[u]+w<dist[v]) dist[v]=dist[u]+w;
            }
        }
    }
    
    for(int i=0;i<n;++i){
        if(dist[i]==INF) printf("-1");
        else printf("%lld", dist[i]);
        if(i+1<n)putchar('');
    }
    putchar('\n');
    
    return 0;
}