#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
****************************************************************/