from collections import deque

# リストでグラフを表現する
n = int(input())
G = [input().split()[2:] for _ in range(n)]

# 頂点1から各頂点への距離を-1 (頂点1からたどり着けない)で初期化する
d = [-1] * n

que = deque()  # 訪問予定の頂点を格納する

# 初期状態をキューに入れる
que.append(0)
d[0] = 0

while que:
    p = que.popleft()  # FIFOでキューの要素を取り出し、その頂点を訪ねる。
    for v in G[p]:
        v = int(v) - 1
        if d[v] < 0:  # まだ訪れたことがない
            que.append(v)
            # 距離を記録する
            d[v] = d[p] + 1


for i in range(n):
    print(i+1, d[i]) from collections import deque n = int(input()) n int(input()) int input() input input().split()[2:] for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) input().split()[2:] ().split() ().split () input split 2: 2 G = [input().split()[2:] for _ in range(n)] G [input().split()[2:] for _ in range(n)] d = [-1] * n d [-1] * n [-1] -1 n que = deque() que deque() deque que.append(0) que.append que append 0 d[0] = 0 d[0] d 0 0 while que:
    p = que.popleft()  # FIFOでキューの要素を取り出し、その頂点を訪ねる。
    for v in G[p]:
        v = int(v) - 1
        if d[v] < 0:  # まだ訪れたことがない
            que.append(v)
            # 距離を記録する
            d[v] = d[p] + 1 que p = que.popleft() p que.popleft() que.popleft que popleft for v in G[p]:
        v = int(v) - 1
        if d[v] < 0:  # まだ訪れたことがない
            que.append(v)
            # 距離を記録する
            d[v] = d[p] + 1 v G[p] G p v = int(v) - 1 v int(v) - 1 int(v) int v 1 if d[v] < 0:  # まだ訪れたことがない
            que.append(v)
            # 距離を記録する
            d[v] = d[p] + 1 d[v] < 0 d[v] d v 0 que.append(v) que.append que append v d[v] = d[p] + 1 d[v] d v d[p] + 1 d[p] d p 1 for i in range(n):
    print(i+1, d[i]) i range(n) range n print(i+1, d[i]) print i+1 i 1 d[i] d i d = [-1] * n [-1] * n d n = int(input()) int(input()) n G = [input().split()[2:] for _ in range(n)] [input().split()[2:] for _ in range(n)] G que = deque() deque() que v = int(v) - 1 int(v) - 1 v p = que.popleft() que.popleft() p
from collections import deque

# リストでグラフを表現する
n = int(input())
G = [input().split()[2:] for _ in range(n)]

# 頂点1から各頂点への距離を-1 (頂点1からたどり着けない)で初期化する
d = [-1] * n

que = deque()  # 訪問予定の頂点を格納する

# 初期状態をキューに入れる
que.append(0)
d[0] = 0

while que:
    p = que.popleft()  # FIFOでキューの要素を取り出し、その頂点を訪ねる。
    for v in G[p]:
        v = int(v) - 1
        if d[v] < 0:  # まだ訪れたことがない
            que.append(v)
            # 距離を記録する
            d[v] = d[p] + 1


for i in range(n):
    print(i+1, d[i])
