#include <fstream>
#include <vector>
#include <queue>
using namespace std;
const int nmax=100005;
vector<int> G[nmax];
vector<int> viz;
vector<int> d;
int x;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
void bfs(int nod, int cc)
{
int v;
queue<int> q;
q.push(nod);
viz[nod]=cc;
d[nod]=0;
while(!q.empty())
{
nod=q.front();
q.pop();
for(int j=0;j<G[nod].size();j++)
{
v=G[nod][j];
if(viz[v]==0)
{
d[v]=d[nod]+1;
viz[v]=cc;
q.push(v);
}
}
}
}
int main()
{
int n,m,u,v,cc,i;
fin>>n>>m>>x;
for(i=1;i<=m;i++)
{
fin>>u>>v;
G[u].push_back(v);
}
viz.assign(n+1,0);
d.assign(n+1,-1);
bfs(x,1);
for(i=1;i<=n;i++)
fout<<d[i]<<" ";
return 0;
}