#ifdef __INFOARENA_PROJ
#include "infoarena.h"
#endif
#include <fstream>
#include <vector>
#include <queue>
#ifdef __INFOARENA_PROJ
namespace bfs {
#endif
unsigned const int maxN = 100000;
std::vector<unsigned> G[maxN + 1];
int D[maxN + 1];
bool viz[maxN + 1];
int main()
{
std::ifstream in("bfs.in");
std::ofstream out("bfs.out");
unsigned N, M, S;
in >> N >> M >> S;
for (unsigned i = 1; i <= M; ++i)
{
unsigned x, y;
in >> x >> y;
G[x].push_back(y);
}
for (unsigned i = 1; i <= N; ++i)
D[i] = -1;
D[S] = 0;
viz[S] = true;
std::queue<unsigned> q;
q.push(S);
while (!q.empty())
{
unsigned nod = q.front();
for (unsigned v : G[nod])
if (!viz[v] && D[v] == -1)
D[v] = D[nod] + 1, q.push(v);
viz[nod] = true;
q.pop();
}
for (unsigned i = 1; i <= N; ++i)
out << D[i] << ' ';
out << '\n';
return 0;
}
#ifdef __INFOARENA_PROJ
}
#endif