#include<stdio.h>
#include<limits.h>
#define MAX 100
#define INF INT_MAX
int main(){
    int n;
    
    if(scanf("%d", &n) !=1 || n<= 0 || n>MAX){
        printf("Invalid input");
        return 0;
    }

    int graph [MAX][MAX];
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
            if(scanf("%d",&graph[i][j])!=1 || graph[i][j]>1000000){
                printf("Invalid input");
                return 0;
            }
        
    
    int src;
    if(scanf("%d",&src)!=1 || src < 0 || src >=n){
         printf("Invalid input");
        return 0;
    }

    int dist[MAX];
    for(int i=0;i<n;i++) dist[i]= INF;
    dist[src] = 0;
        


int has_negative = 0;
for(int i=0;i<n;i++)
    for(int j=0; j<n;j++)
        if(graph[i][j]< 0 ) has_negative=1;
        
if(has_negative){
        for(int k=0;k<n-1;k++){
             for(int i=0; i<n;i++){
                 if(dist[i] == INF)
                 continue;
                 for(int j=0; j<n;j++){
                      if(graph[i][j]!=0 && dist[i]!= INF && dist[i]+ graph[i][j]<dist[j]){
                         dist[j]= dist[i]+ graph[i][j];            
                      }
                 }
             }
        }   
    int neg_cycle=0;
    for(int u=0; u<n;u++){
        if(dist[u]==INF) continue;
        for(int v=0;v<n;v++){
            if(graph[u][v]!= 0 && dist[u]+ graph[u][v] < dist[v]){
                neg_cycle = 1;
                break;
        }
    }
}
if(neg_cycle){
    printf("Invalid input");
    return 0;
}
else{
int visited[MAX]= {0};
for(int count=0; count<n-1; count++){
    int u =-1;
    int mindist = INF;
    for(int i=0;i<n;i++){
        if(!visited[i] && dist[i] < mindist){
            mindist = dist[i];
            u = i;
        }
    }
    if(u == -1) break;
    visited[u]= 1;
        for(int v=0;v<n;v++){
            if(!visited[v] && graph[u][v] && dist[u]!= INF && dist[u] + graph[u][v] < dist[v]){
                 dist[v] = dist[u] + graph[u][v];
            }
        }


        


for(int i=0;i<n;i++){
        if(dist[i]==INF)
        printf("INF");
        else
        printf("%d",dist[i]);
        
        if(i<n-1) printf(" ");
    }
    printf("\n");
    return 0;
}