#include <iostream>
#include <queue>
using namespace std;
int main() {
// чтение исходных данных
int n, v;
cin >> n >> v;
int M[n][n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) cin >> M[i][j];
M[i][i] = -1;
}
queue <int> plan; // план посещения в виде очереди
plan.push(--v); // мы нумеруем с 0, а не с 1
M[v][v] = 0; // отмечаем, что эта вершина уже заносилась в план
while (!plan.empty()) {
v = plan.front(); // посещаем следующую по плану вершину
plan.pop(); // удаляем ее из плана посещения
for (int u = 0; u < n; u++) // перебираем соседние с ней
if (M[v][u] == 1 and M[u][u] == -1) { // если новая, то
plan.push(u); // добавляем ее в план
M[u][u] = M[v][v] + 1; // путь на 1 шаг длиннее
}
}
for (int u = 0; u < n; u++) cout << M[u][u] << " ";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cXVldWU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmludCBtYWluKCkgewogICAgLy8g0YfRgtC10L3QuNC1INC40YHRhdC+0LTQvdGL0YUg0LTQsNC90L3Ri9GFCiAgICBpbnQgbiwgdjsKICAgIGNpbiA+PiBuID4+IHY7CiAgICBpbnQgTVtuXVtuXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspIGNpbiA+PiBNW2ldW2pdOwogICAgICAgIE1baV1baV0gPSAtMTsKICAgIH0KICAgIHF1ZXVlIDxpbnQ+IHBsYW47IC8vINC/0LvQsNC9INC/0L7RgdC10YnQtdC90LjRjyDQsiDQstC40LTQtSDQvtGH0LXRgNC10LTQuAogICAgcGxhbi5wdXNoKC0tdik7ICAgLy8g0LzRiyDQvdGD0LzQtdGA0YPQtdC8INGBIDAsINCwINC90LUg0YEgMQogICAgTVt2XVt2XSA9IDA7ICAgICAgLy8g0L7RgtC80LXRh9Cw0LXQvCwg0YfRgtC+INGN0YLQsCDQstC10YDRiNC40L3QsCDRg9C20LUg0LfQsNC90L7RgdC40LvQsNGB0Ywg0LIg0L/Qu9Cw0L0gCiAgICB3aGlsZSAoIXBsYW4uZW1wdHkoKSkgewogICAgICAgIHYgPSBwbGFuLmZyb250KCk7IC8vINC/0L7RgdC10YnQsNC10Lwg0YHQu9C10LTRg9GO0YnRg9GOINC/0L4g0L/Qu9Cw0L3RgyDQstC10YDRiNC40L3RgyAKICAgICAgICBwbGFuLnBvcCgpOyAgICAgICAvLyDRg9C00LDQu9GP0LXQvCDQtdC1INC40Lcg0L/Qu9Cw0L3QsCDQv9C+0YHQtdGJ0LXQvdC40Y8KICAgICAgICBmb3IgKGludCB1ID0gMDsgdSA8IG47IHUrKykgLy8g0L/QtdGA0LXQsdC40YDQsNC10Lwg0YHQvtGB0LXQtNC90LjQtSDRgSDQvdC10LkKICAgICAgICAgICAgaWYgKE1bdl1bdV0gPT0gMSBhbmQgTVt1XVt1XSA9PSAtMSkgeyAvLyDQtdGB0LvQuCDQvdC+0LLQsNGPLCDRgtC+CiAgICAgICAgICAgICAgICBwbGFuLnB1c2godSk7ICAgICAgICAgIC8vINC00L7QsdCw0LLQu9GP0LXQvCDQtdC1INCyINC/0LvQsNC9CiAgICAgICAgICAgICAgICBNW3VdW3VdID0gTVt2XVt2XSArIDE7IC8vINC/0YPRgtGMINC90LAgMSDRiNCw0LMg0LTQu9C40L3QvdC10LUKICAgICAgICAgICAgfQogICAgfQogICAgZm9yIChpbnQgdSA9IDA7IHUgPCBuOyB1KyspIGNvdXQgPDwgTVt1XVt1XSA8PCAiICI7IAp9