#include <fstream>
#include <vector>
#include <queue>
#define MAX 100005
using namespace std;
vector<int> v[MAX];
queue<int> q;
int n, m, initial_point;
int d[MAX];
void read();
void solve();
void write();
int main(){
read();
solve();
write();
return 0;
}
void read(){
ifstream fin ("bfs.in");
fin >> n >> m >> initial_point;
int x, y;
while(m--){
fin >> x >> y;
v[x].push_back(y);
}
for (int i = 1; i <= n; ++i)
d[i] = -1;
fin.close();
}
void solve(){
d[initial_point] = 0;
q.push(initial_point);
while(!q.empty()){
int k = q.front();
q.pop();
for (int i = 0; i < v[k].size(); ++i)
if (d[v[k][i]] == -1)
d[v[k][i]] = d[k] + 1,
q.push(v[k][i]);
}
}
void write(){
ofstream fout ("bfs.out");
for (int i = 1; i <= n; ++i)
fout << d[i] << " ";
fout.close();
}