#include <iostream>
#include <fstream>
#include <vector>
#include<queue>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
const int MAXN=100005;
vector<int> a[MAXN];
int distanta[MAXN];
int main() {
int n,m,s;
fin>>n>>m>>s;
for (int i=1;i<=n;i++)
distanta[i]=-1;
for (int i=0;i<m;i++) {
int x,y;
fin>>x>>y;
a[x].push_back(y);
}
queue<int> q;
q.push(s);
distanta[s]=0;
while (!q.empty()) { //cat timp mai avem noduri de explorat in coada, iau primul nod din coada si il elimin
int nod_curent=q.front();
q.pop();
for (int vecin:a[nod_curent]) {
if (distanta[vecin]==-1) {
distanta[vecin]=distanta[nod_curent] + 1;
q.push(vecin);
}
}
}
for (int i=1;i<=n;i++) {
fout<<distanta[i]<<" ";
}
return 0;
}