#include <cstdio>
#include <queue>
#include <vector>
#define INF 2000000000
#define Nmax 100005
using namespace std;
int N,dp[Nmax];
queue <int> Q;
vector <int> L[Nmax];
inline void Bfs()
{
int nod,len,i;
while(!Q.empty())
{
nod=Q.front();
Q.pop();
len=L[nod].size();
for(i=0;i<len;++i)
if(dp[L[nod][i]]>dp[nod]+1)
{
dp[L[nod][i]]=dp[nod]+1;
Q.push(L[nod][i]);
}
}
}
int main()
{
int M,S,x,y,i;
freopen ("bfs.in","r",stdin);
freopen ("bfs.out","w",stdout);
scanf("%d%d%d", &N,&M,&S);
while(M--)
{
scanf("%d%d", &x,&y);
L[x].push_back(y);
}
Q.push(S);
for(i=1;i<=N;++i)
dp[i]=INF;
dp[S]=0;
Bfs();
for(i=1;i<=N;++i)
if(dp[i]==INF)
printf("-1 ");
else
printf("%d ", dp[i]);
printf("\n");
return 0;
}