Cod sursa(job #229770)
using namespace std;
#include <cstdio>
#include <vector>
#include <algorithm>
#define N_MAX 1<<18
#define IN "bfs.in"
#define OUT "bfs.out"
#define f first
#define s second
#define II inline
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define pb push_back
typedef vector<int> VI;
vector< VI > A(N_MAX);
int N,M,S;
int C[N_MAX];
bool viz[N_MAX];
II void scan()
{
freopen(IN,"r",stdin);
freopen(OUT,"w",stdout);
scanf("%d%d%d\n",&N,&M,&S);
int x,y;
FOR(i,1,M)
{
scanf("%d%d\n",&x,&y);
A[x].pb( y );
}
}
II void BF(int nod)
{
vector<int> stv;
stv.pb( nod );
viz[nod] = true;
FOR(i,0,(int)stv.size()-1)
{
nod = stv[i];
int l = A[nod].size()-1;
FOR(j,0,l)
{
int next = A[nod][j];
if(!viz[next])
{
viz[next] = true;
C[next] = C[nod] + 1;
stv.pb( next );
}
}
}
}
II void solve()
{
BF(S);
FOR(i,1,N)
{
if(!viz[i])
printf("-1 ");
else
printf("%d ",C[i]);
}
}
int main()
{
scan();
solve();
return 0;
}