#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
const int inf=4000; // задаем бесконечность
int n, start_position, x; // n-количество вершин, вешина от которой мы будем идти, х испозуем для приема матриы смежности
cin>>n>>start_position;
start_position--; //так как в условии счет начинается с единиццы, а в программе с нуля
vector <int> verges [1001]; //задаем массив вектоов где i-ый вектор содерит в себе номера вешин в которые можно попасть с i-ой вершины
for (int i=0; i<n; i++)//заполняем вышеуказанный массив векторов
{
for(int j=0; j<n; j++)
{
cin>>x;
if (x==1)
{
verges[i].push_back(j);
}
}
}
bool *used = new bool [n]; // показывается, применяли ли мы алкоритм для i-ой вершины
for (int i=0; i<n; i++)
{
used[i]=false;
}
int *distances = new int [n]; //задаем массив расстояний где i-ый элемент это расстояние от исходной вершины до i-ой
for (int i=0; i<n; i++)
{
distances[i]=inf;
}
distances[start_position] = 0;
for (int i=0; i<n; i++) //ищем минимальный элемент для которого еще не применяди алгоритм
{
int minimum=inf;
int position = 0;
for (int j=0; j<n; j++)
{
if (distances[j]<minimum && !used[j])
{
minimum=distances[j];
position=j;
}
}
used[position]=true; //запоминаем, что для минимального элемента пименили алгоритм
for (int i=0; i<verges[position].size(); i++) // применяем алгоитм Дейксты
{
distances[verges[position][i]] = min(distances[verges[position][i]], (distances[position]+1));
}
}
for (int i=0; i<n; i++)
{
cout<<((distances[i]==inf)?-1:distances[i])<<" ";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgbWFpbigpIHsKCWNvbnN0IGludCBpbmY9NDAwMDsgLy8g0LfQsNC00LDQtdC8INCx0LXRgdC60L7QvdC10YfQvdC+0YHRgtGMIAoJaW50IG4sIHN0YXJ0X3Bvc2l0aW9uLCB4OyAvLyBuLdC60L7Qu9C40YfQtdGB0YLQstC+INCy0LXRgNGI0LjQvSwg0LLQtdGI0LjQvdCwINC+0YIg0LrQvtGC0L7RgNC+0Lkg0LzRiyDQsdGD0LTQtdC8INC40LTRgtC4LCDRhSDQuNGB0L/QvtC30YPQtdC8INC00LvRjyDQv9GA0LjQtdC80LAg0LzQsNGC0YDQuNGLINGB0LzQtdC20L3QvtGB0YLQuCAKCWNpbj4+bj4+c3RhcnRfcG9zaXRpb247CglzdGFydF9wb3NpdGlvbi0tOyAvL9GC0LDQuiDQutCw0Log0LIg0YPRgdC70L7QstC40Lgg0YHRh9C10YIg0L3QsNGH0LjQvdCw0LXRgtGB0Y8g0YEg0LXQtNC40L3QuNGG0YbRiywg0LAg0LIg0L/RgNC+0LPRgNCw0LzQvNC1INGBINC90YPQu9GPIAoJdmVjdG9yIDxpbnQ+IHZlcmdlcyBbMTAwMV07IC8v0LfQsNC00LDQtdC8INC80LDRgdGB0LjQsiDQstC10LrRgtC+0L7QsiDQs9C00LUgaS3Ri9C5INCy0LXQutGC0L7RgCDRgdC+0LTQtdGA0LjRgiDQsiDRgdC10LHQtSDQvdC+0LzQtdGA0LAg0LLQtdGI0LjQvSDQsiDQutC+0YLQvtGA0YvQtSDQvNC+0LbQvdC+INC/0L7Qv9Cw0YHRgtGMINGBIGkt0L7QuSDQstC10YDRiNC40L3RiwoJZm9yIChpbnQgaT0wOyBpPG47IGkrKykvL9C30LDQv9C+0LvQvdGP0LXQvCDQstGL0YjQtdGD0LrQsNC30LDQvdC90YvQuSDQvNCw0YHRgdC40LIg0LLQtdC60YLQvtGA0L7QsiAKCXsKCQlmb3IoaW50IGo9MDsgajxuOyBqKyspCgkJewoJCQljaW4+Png7CgkJCWlmICh4PT0xKQoJCQl7CgkJCQl2ZXJnZXNbaV0ucHVzaF9iYWNrKGopOwoJCQl9CgkJfQoJfQoJYm9vbCAqdXNlZCA9IG5ldyBib29sIFtuXTsgLy8g0L/QvtC60LDQt9GL0LLQsNC10YLRgdGPLCDQv9GA0LjQvNC10L3Rj9C70Lgg0LvQuCDQvNGLINCw0LvQutC+0YDQuNGC0Lwg0LTQu9GPIGkt0L7QuSDQstC10YDRiNC40L3RiwoJZm9yIChpbnQgaT0wOyBpPG47IGkrKykKCXsKCQl1c2VkW2ldPWZhbHNlOwoJfQoJaW50ICpkaXN0YW5jZXMgPSBuZXcgaW50IFtuXTsgLy/Qt9Cw0LTQsNC10Lwg0LzQsNGB0YHQuNCyINGA0LDRgdGB0YLQvtGP0L3QuNC5INCz0LTQtSBpLdGL0Lkg0Y3Qu9C10LzQtdC90YIg0Y3RgtC+INGA0LDRgdGB0YLQvtGP0L3QuNC1INC+0YIg0LjRgdGF0L7QtNC90L7QuSDQstC10YDRiNC40L3RiyDQtNC+ICBpLdC+0LkKCWZvciAoaW50IGk9MDsgaTxuOyBpKyspCgl7CgkJZGlzdGFuY2VzW2ldPWluZjsgCgl9CglkaXN0YW5jZXNbc3RhcnRfcG9zaXRpb25dID0gMDsKCWZvciAoaW50IGk9MDsgaTxuOyBpKyspIC8v0LjRidC10Lwg0LzQuNC90LjQvNCw0LvRjNC90YvQuSDRjdC70LXQvNC10L3RgiDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQtdGJ0LUg0L3QtSDQv9GA0LjQvNC10L3Rj9C00Lgg0LDQu9Cz0L7RgNC40YLQvCAKCXsKCQlpbnQgbWluaW11bT1pbmY7CgkJaW50IHBvc2l0aW9uID0gMDsKCQlmb3IgKGludCBqPTA7IGo8bjsgaisrKQoJCXsKCQkJaWYgKGRpc3RhbmNlc1tqXTxtaW5pbXVtICYmICF1c2VkW2pdKQoJCQl7CgkJCQltaW5pbXVtPWRpc3RhbmNlc1tqXTsKCQkJCXBvc2l0aW9uPWo7CgkJCX0KCQl9CgkJdXNlZFtwb3NpdGlvbl09dHJ1ZTsgLy/Qt9Cw0L/QvtC80LjQvdCw0LXQvCwg0YfRgtC+INC00LvRjyDQvNC40L3QuNC80LDQu9GM0L3QvtCz0L4g0Y3Qu9C10LzQtdC90YLQsCDQv9C40LzQtdC90LjQu9C4INCw0LvQs9C+0YDQuNGC0LwgCgkJZm9yIChpbnQgaT0wOyBpPHZlcmdlc1twb3NpdGlvbl0uc2l6ZSgpOyBpKyspIC8vINC/0YDQuNC80LXQvdGP0LXQvCDQsNC70LPQvtC40YLQvCDQlNC10LnQutGB0YLRiyAKCQl7CgkJCWRpc3RhbmNlc1t2ZXJnZXNbcG9zaXRpb25dW2ldXSA9IG1pbihkaXN0YW5jZXNbdmVyZ2VzW3Bvc2l0aW9uXVtpXV0sIChkaXN0YW5jZXNbcG9zaXRpb25dKzEpKTsKCQl9Cgl9Cglmb3IgKGludCBpPTA7IGk8bjsgaSsrKSAKCXsKCQljb3V0PDwoKGRpc3RhbmNlc1tpXT09aW5mKT8tMTpkaXN0YW5jZXNbaV0pPDwiICI7Cgl9CglyZXR1cm4gMDsKfQ==