#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream is("bfs.in");
ofstream os("bfs.out");
int N, M, S;
int x, y;
vector <int> V[100001];
queue <int> Q;
bool Vis[100001];
int Res[100001];
int main()
{
is >> N >> M >> S;
for ( int i = 1; i <= M; ++i )
{
is >> x >> y;
if ( x != y)
V[x].push_back(y);
}
Q.push(S), Vis[S] = true, Res[S] = 0;
int Nod, it(0);
while ( !Q.empty() )
{
Nod = Q.front();
for ( int i = 0; i < V[Nod].size(); ++i )
{
if ( Vis[V[Nod][i]] == false )
{
Q.push(V[Nod][i]);
Res[V[Nod][i]] = Res[Nod]+1;
Vis[V[Nod][i]] = true;
}
}
Q.pop();
}
for ( int i = 1; i <= N; ++i )
{
if ( Res[i] != 0)
os << Res[i] << " ";
if ( i == S )
os << 0 << " ";
if ( Res[i] == 0 && i != S )
os << Res[i]-1 << " ";
}
is.close();
os.close();
}