import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
 
public class Main {
    static class Node{
        public Node(int v,int w) {
            this.v=v;
            this.w=w;
        }
        int v;
        int w;
    }
    static class R{
        public R(int vertex) {
            this.vertex=vertex;
            this.distance=Integer.MAX_VALUE;
        }
        int vertex;
        int distance;
        int number;
        int people;
    }
    static Comparator<R> com=new Comparator<R>() {
 
        @Override
        public int compare(R o1, R o2) {
            return o1.distance-o2.distance;
        }
         
    };
    static Scanner scn=new Scanner(System.in);
    static int vertex=scn.nextInt(),start=scn.nextInt();
    static List<List<Node>> G=new ArrayList<>();
    static boolean[] visit=new boolean[vertex];
    static R[] form=new R[vertex];
    static Queue<R> pri=new PriorityQueue<>(com);
    public static void main(String[] args) {
//      初始化
        for(int i=0;i<vertex;i++) {
            G.add(new ArrayList<>());
            form[i]=new R(i);
        }
//      创建图
        for(int i=0;i<vertex;i++) {
            for(int j=0;j<vertex;j++) {
                int w=scn.nextInt();
                G.get(i).add(new Node(j, w));
            }
        }
        dijstra(start);
        for(int i=0;i<vertex;i++) {
            if(i!=start) {
                if(form[i].distance!=Integer.MAX_VALUE) {
                    System.out.print(form[i].distance+" ");
                }else {
                    System.out.print("-1 ");
                }
            }
        }
        System.out.println();
    }
    static void dijstra(int start) {
        form[start].distance=0;
        pri.offer(form[start]);
        for(int i=0;i<vertex;i++) {
            int u=pri.poll().vertex;
            visit[u]=true;
            for(int j=0;j<G.get(u).size();j++) {
                int v=G.get(u).get(j).v;
                int w=G.get(u).get(j).w;
                if(G.get(u).get(j).w!=0 &&!visit[v] && form[u].distance+w<form[v].distance) {
                    form[v].distance=form[u].distance+w;
                    form[v].number=form[u].number;
                    pri.offer(form[v]);
                }
            }
        }
    }
}
/**************************************************************
	Problem: 2165
	User: admin
	Language: Java
	Result: Accepted
	Time:955 ms
	Memory:46632 kb
****************************************************************/