#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
void bfs(vector<int> sursa, vector<bool> vizitat, vector<vector<int>> vecini,int* nivel ) {
int dist=0;
while (!sursa.empty()) {
vector<int> next;
for (int nod : sursa) {
nivel[nod-1]=dist;
for (int vecin : vecini[nod]) {
if (vizitat[vecin]==false) {
next.push_back(vecin);
vizitat[vecin]=true;
}
}
}
sursa=next;
dist++;
}
}
int main() {
ifstream fin("bfs.in");
ofstream fout("bfs.out");
int n,m,s;
fin>>n>>m>>s;
vector<vector<int>> vecini(n + 1);
vector<bool> vizitat(n + 1, false);
int nivel[n]={-1};
for (int i=0;i<n;i++) {
if (i!=s-1)
nivel[i]=-1;
else nivel[i]=0;
}
vizitat[s]=true;
for (int i=0;i<m;i++) {
int x,y;
fin>>x>>y;
vecini[x].push_back(y);
}
bfs({s},vizitat,vecini,nivel);
for (int i=0;i<n;i++) {
fout<<nivel[i]<<" ";
}
}