#include <bits/stdc++.h>
using namespace std;
vector<int> bfs(int src, vector<vector<int>>& edges) {
unsigned int nod,i,vecin;
queue<int> q;
vector<int> dist(edges.size(),-1);
q.push(src);
dist[src]=0;
while(!q.empty()){
nod=q.front();
q.pop();
for(i=0;i<edges[nod].size();i++){
vecin=edges[nod][i];
if(dist[vecin]==-1){
dist[vecin]=dist[nod]+1;
q.push(vecin);
}
}
}
return dist;
}
int main() {
FILE *fin, *fout;
fin=fopen("bfs.in","r");
fout=fopen("bfs.out","w");
int n,m,s,i,a,b;
fscanf(fin,"%d%d%d",&n,&m,&s);
s--;
vector<vector<int>> edges(n);
for(i=0;i<m;i++){
fscanf(fin,"%d%d",&a,&b);
a--;
b--;
edges[a].push_back(b);
}
vector<int> dist=bfs(s, edges);
for(i=0;i<n;i++)
fprintf(fout,"%d ",dist[i]);
return 0;
}