#include<fstream>
#include<vector>
#include<queue>
using namespace std;
vector<int> L[100001];
int dist[100001];
int n = 0, m = 0, s = 0;
void bfs(int s) {
for(int i = 1; i <= n; i++){
dist[i] = -1;
}
dist[s] = 0;
queue<int> q;
q.push(s);
while(q.empty() == false){
int node = q.front();
q.pop();
for(auto vec : L[node]){
if(dist[vec] == -1){
dist[vec] = dist[node] +1;
q.push(vec);
}
}
}
}
int main() {
ifstream fin("bfs.in");
ofstream fout("bfs.out");
fin >> n >> m;
for (int i = 1; i <= m; i++) {
int a, b;
fin >> a >> b;
L[a].push_back(b);
//L[b].push_back(a);
}
bfs(s);
for(int i = 1; i <= n; i++)
fout << dist[i] << " ";
return 0;
}