#include <fstream>
#include <vector>
#include <queue>
using namespace std;
static ifstream fin ("bfs.in");
static ofstream fout ("bfs.out");
static void bfs(const int s, const vector<vector<int>> &graf, const int n) {
vector<int>rez(n+1,-1);
vector<bool>viz(n+1, false);
queue<int>q;
viz[s]=true;
q.push(s);
rez[s]=0;
while(!q.empty()) {
const int crt = q.front();
q.pop();
for (auto v : graf[crt]) {
if (rez[v] == -1) {
rez[v] = rez[crt]+1;
q.push(v);
}
}
}
for (int i =1 ;i <= n;i++) {
fout << rez[i] << " ";
}
}
int main() {
int n,m,s;
fin >> n >> m >> s;
vector <vector<int> > graf(n+1);
for (int i=0;i<m;i++) {
int x,y;
fin >> x >> y;
graf[x].push_back(y);
}
bfs(s,graf,n);
return 0;
}