Cod sursa(job #228476)
using namespace std;
#include <cstdio>
#include <string>
#include <vector>
#define N 100001
#define DIM 8192
char ax[DIM];
int pz;
inline void cit(int &x)
{
x=0;
while(ax[pz]<'0' || ax[pz]>'9')
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
while(ax[pz]>='0' && ax[pz]<='9')
{
x=x*10+ax[pz]-'0';
if(++pz==DIM)fread(ax,1,DIM,stdin),pz=0;
}
}
struct nod { int x; nod *n;};
vector<int>a[N];
int n, m,S;
int d[N];
void read()
{
freopen("bfs.in","r",stdin);
cit(n);cit(m);cit(S);
int p, q;
while(m--)
{
cit(p);cit(q);
a[p].push_back(q);
}
}
void solve()
{
bool use[N];
int Q[N], p=0, q=0,u,i;
memset(use, 0, sizeof(use));
memset(d, 0x3f3f3f3f, sizeof(d));
Q[0]=S;
use[S]=1;
d[S]=0;
vector<int>::iterator it;
while(p<=q)
{
u=Q[p++];
for(it=a[u].begin(); it!=a[u].end(); ++it)
if(!use[*it])
{
Q[++q]=*it;
use[*it]=1;
d[*it]=d[u]+1;
}
}
freopen("bfs.out","w",stdout);
for(i=1;i<=n;++i) if(d[i]==0x3f3f3f3f) d[i]=-1;
for(i=1;i<=n;++i)printf("%d ", d[i]);
}
int main()
{
read();
solve();
return 0;
}