import sys
input = sys.stdin.readline

#入力と違って０オリジンとなっているので注意
n = int(input())
li = [[0] * n for _ in range(n)] #隣接行列、０オリジン li[i][j]:iからjへの有向グラフがある
for i in range(n):
    x, y, *v = [int(x)-1 for x in input().split()]
    for j in v:
        li[i][j] = 1 #有向グラフがあるところは１、ないところは０となる

from collections import deque
Q = deque([0]) #初期条件
finish = [0] #訪問済みの頂点をしまう
len_ = [-1]*n #頂点jの頂点０からの距離、できなかったらー１と返す
len_[0] = 0 #初期条件
while Q: #Qがからでない限り以下の操作を繰り返す
    i = Q.popleft()
    for j in range(n):
        if li[i][j] == 1: #iからjへの道が存在する場合
            if not j in finish: #まだjが探索済みじゃなかったら以下の操作を行う
                finish.append(j)
                Q.append(j)
                len_[j] = len_[i] + 1
        else:
            continue
for i in range(n):
    print(str(i+1) + ' ' + str(len_[i])) import sys sys input = sys.stdin.readline input sys.stdin.readline sys.stdin sys stdin readline n = int(input()) n int(input()) int input() input [0] * n for _ in range(n) for _ in range(n) _ range(n) range n for _ in range(n) [0] * n [0] 0 n li = [[0] * n for _ in range(n)] li [[0] * n for _ in range(n)] for i in range(n):
    x, y, *v = [int(x)-1 for x in input().split()]
    for j in v:
        li[i][j] = 1 #有向グラフがあるところは１、ないところは０となる i range(n) range n int(x)-1 for x in input().split() for x in input().split() x input().split() ().split () input split for x in input().split() int(x)-1 int(x) int x 1 x, y, *v = [int(x)-1 for x in input().split()] x [int(x)-1 for x in input().split()] y *v v for j in v:
        li[i][j] = 1 #有向グラフがあるところは１、ないところは０となる j v li[i][j] = 1 li[i][j] [i] li i j 1 from collections import deque Q = deque([0]) Q deque([0]) deque [0] 0 finish = [0] finish [0] 0 len_ = [-1]*n len_ [-1]*n [-1] -1 n len_[0] = 0 len_[0] len_ 0 0 while Q: #Qがからでない限り以下の操作を繰り返す
    i = Q.popleft()
    for j in range(n):
        if li[i][j] == 1: #iからjへの道が存在する場合
            if not j in finish: #まだjが探索済みじゃなかったら以下の操作を行う
                finish.append(j)
                Q.append(j)
                len_[j] = len_[i] + 1
        else:
            continue Q i = Q.popleft() i Q.popleft() Q.popleft Q popleft for j in range(n):
        if li[i][j] == 1: #iからjへの道が存在する場合
            if not j in finish: #まだjが探索済みじゃなかったら以下の操作を行う
                finish.append(j)
                Q.append(j)
                len_[j] = len_[i] + 1
        else:
            continue j range(n) range n if li[i][j] == 1: #iからjへの道が存在する場合
            if not j in finish: #まだjが探索済みじゃなかったら以下の操作を行う
                finish.append(j)
                Q.append(j)
                len_[j] = len_[i] + 1
        else:
            continue li[i][j] == 1 li[i][j] [i] li i j 1 if not j in finish: #まだjが探索済みじゃなかったら以下の操作を行う
                finish.append(j)
                Q.append(j)
                len_[j] = len_[i] + 1
         not j in finish j in finish j finish finish.append(j) finish.append finish append j Q.append(j) Q.append Q append j len_[j] = len_[i] + 1 len_[j] len_ j len_[i] + 1 len_[i] len_ i 1 continue for i in range(n):
    print(str(i+1) + ' ' + str(len_[i])) i range(n) range n print(str(i+1) + ' ' + str(len_[i])) print str(i+1) + ' ' + str(len_[i]) str(i+1) + ' ' str(i+1) str i+1 i 1 ' ' str(len_[i]) str len_[i] len_ i len_ = [-1]*n [-1]*n len_ n = int(input()) int(input()) n finish = [0] [0] finish i = Q.popleft() Q.popleft() i li = [[0] * n for _ in range(n)] [[0] * n for _ in range(n)] li x, y, *v = [int(x)-1 for x in input().split()] [int(x)-1 for x in input().split()] x Q = deque([0]) deque([0]) Q input = sys.stdin.readline sys.stdin.readline input y, *v = [int(x)-1 for x in input().split()] [int(x)-1 for x in input().split()] y
import sys
input = sys.stdin.readline

#入力と違って０オリジンとなっているので注意
n = int(input())
li = [[0] * n for _ in range(n)] #隣接行列、０オリジン li[i][j]:iからjへの有向グラフがある
for i in range(n):
    x, y, *v = [int(x)-1 for x in input().split()]
    for j in v:
        li[i][j] = 1 #有向グラフがあるところは１、ないところは０となる

from collections import deque
Q = deque([0]) #初期条件
finish = [0] #訪問済みの頂点をしまう
len_ = [-1]*n #頂点jの頂点０からの距離、できなかったらー１と返す
len_[0] = 0 #初期条件
while Q: #Qがからでない限り以下の操作を繰り返す
    i = Q.popleft()
    for j in range(n):
        if li[i][j] == 1: #iからjへの道が存在する場合
            if not j in finish: #まだjが探索済みじゃなかったら以下の操作を行う
                finish.append(j)
                Q.append(j)
                len_[j] = len_[i] + 1
        else:
            continue
for i in range(n):
    print(str(i+1) + ' ' + str(len_[i]))
