from collections import deque
def listaAdiacenta(n,m,fisier,orientat):
d={}
for line in fisier:
numere=line.split()
u,v=int(numere[0]), int(numere[1])
if u not in d:
d[u]=[]
if v not in d[u]:
d[u].append(v)
if not orientat:
if v not in d:
d[v]=[]
if u not in d[v]:
d[v].append(u)
return d
def bfs(d,s,dist,tata):
coada=deque([s])
dist[s]=0
tata[s]=0
while coada:
i=coada.popleft()
if i in d:
for vecin in d[i]:
if dist[vecin]==-1:
coada.append(vecin)
dist[vecin]=dist[i]+1
tata[vecin]=i
return dist
fin=open('bfs.in', 'r')
fout=open('bfs.out', 'w')
n,m,s=(int(x) for x in fin.readline().split())
orientat=True
d=listaAdiacenta(n,m,fin,orientat)
dist=[-1]*(n+1)
tata=[-1]*(n+1)
dist=bfs(d,s,dist,tata)
fout.write(" ".join(str(x) for x in dist[1:]))