#include <iostream>
#include <vector>
#include <list>
#include<fstream>
#include <queue>
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
vector<list<int>>graf;
vector<bool>viz;
void add(int x, int y){
graf[x].push_back(y);
}
int bfs(int S, int X){
viz[S]=true;
vector<int>dist(graf.size(), -1);
queue<int>q;
q.push(S);
while(!q.empty()){
int x=q.front();
q.pop();
for(int i:graf[x]){
if(!viz[i]){
viz[i]=true;
q.push(i);
dist[i]=dist[x]+1;
if(i==X){
return dist[i];
}
}
}
}
}
int main(){
int n,m,x,y,S;
fin>>n>>m>>S;
graf.resize(n+1);
for(int i=0;i<m;++i){
fin>>x>>y;
add(x,y);
}
for(int i=1;i<=n;++i){
viz.resize(n+1, false);
fout<<bfs(i, S)<<' ';
}
fin.close();
fout.close();
return 0;
}