#include <cstdio>
#include <cstdlib>
#include <stack>
#include <algorithm>
using namespace std;
const int MAXN = 50;
const int INF = 1000000000;
int mat[MAXN][MAXN], min_distance[MAXN], v[MAXN];
int n, s;

void dijkstra() {
	int i, j, k;
	for (i = 0; i < n; i++) {
		min_distance[i] = INF;
		v[i] = 0;
	}
	for (min_distance[s] = 0, j = 0; j < n; j++) {
		for (k = -1, i = 0; i < n; i++) {
			if (!v[i] && (k == -1 || min_distance[i] < min_distance[k])) {
				k = i;
			} 
		}
		for (v[k] = 1, i = 0; i < n; i++) {
			if (!v[i] && min_distance[k] + mat[k][i] < min_distance[i]) {
				min_distance[i] = min_distance[k] + mat[k][i];
			} 
		}
	}
}
int main() {
	scanf("%d%d", &n, &s);
	for (int i = 0;i < n;i++) {
		for (int j = 0;j < n;j++) {
			scanf("%d", &mat[i][j]);
			if (mat[i][j] == 0)
				mat[i][j] = INF;
		}
	}
	dijkstra();
	for (int i = 0;i < n;i++) {
		if (i != s) {
			if (min_distance[i] < INF)
				printf("%d ", min_distance[i]);
			else
				printf("%d ", -1);
		}
	}
	puts("");
	return 0;
}
/**************************************************************
	Problem: 2165
	User: admin
	Language: C++
	Result: Accepted
	Time:9 ms
	Memory:1156 kb
****************************************************************/