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