from collections import deque

def bfs(maze, visited, x):
    queue = deque([x])
    visited[x] = 1
    ans_list[x] = 0
    while queue:
      #queueには訪れた地点が入っている。そこから、移動できるか考え、queueから消す。
        y = queue.popleft()#queueに入っていたものを消す。
        r = maze[y - 1][2:]
        for i in r:
            if visited[i] == 0:
              if ans_list[i] >= 10 ** 10:
                ans_list[i] = ans_list[y] + 1
                queue.append(i)
    return 0
              

                
if __name__ == "__main__":
  N = int(input())
  A = [0] * N
  for i in range(N):
    A[i] = list(map(int, input().split()))
  visited = [0] * (N + 1)
  ans_list = [float("inf")] * (N + 1)
  bfs(A, visited, 1)
  #print(bfs(A, visited, 1))
  for i in range(1, N + 1):
    if ans_list[i] >= 10 ** 10:
      print(i, -1)
    else:
      print(i, ans_list[i])
                
  
  
  
  
  
   from collections import deque def bfs(maze, visited, x):
    queue = deque([x])
    visited[x] = 1
    ans_list[x] = 0
    while queue:
      #queueには訪れた地点が入っている。そこから、移動できるか考え、queueから消す。
        y = queue.popleft()#queueに入っていたものを消す。
        r = maze[y - 1][2:]
        for i in r:
            if visited[i] == 0:
              if ans_list[i] >= 10 ** 10:
                ans_list[i] = ans_list[y] + 1
                queue.append(i)
    return 0
              

                 bfs queue = deque([x]) queue deque([x]) deque [x] x visited[x] = 1 visited[x] visited x 1 ans_list[x] = 0 ans_list[x] ans_list x 0 while queue:
      #queueには訪れた地点が入っている。そこから、移動できるか考え、queueから消す。
        y = queue.popleft()#queueに入っていたものを消す。
        r = maze[y - 1][2:]
        for i in r:
            if visited[i] == 0:
              if ans_list[i] >= 10 ** 10:
                ans_list[i] = ans_list[y] + 1
                queue.append(i)
     queue y = queue.popleft() y queue.popleft() queue.popleft queue popleft r = maze[y - 1][2:] r maze[y - 1][2:] [y - 1] maze y - 1 y 1 2: 2 for i in r:
            if visited[i] == 0:
              if ans_list[i] >= 10 ** 10:
                ans_list[i] = ans_list[y] + 1
                queue.append(i)
     i r if visited[i] == 0:
              if ans_list[i] >= 10 ** 10:
                ans_list[i] = ans_list[y] + 1
                queue.append(i)
     visited[i] == 0 visited[i] visited i 0 if ans_list[i] >= 10 ** 10:
                ans_list[i] = ans_list[y] + 1
                queue.append(i)
     ans_list[i] >= 10 ** 10 ans_list[i] ans_list i 10 ** 10 10 10 ans_list[i] = ans_list[y] + 1 ans_list[i] ans_list i ans_list[y] + 1 ans_list[y] ans_list y 1 queue.append(i) queue.append queue append i return 0 0 maze maze visited visited x x if __name__ == "__main__":
  N = int(input())
  A = [0] * N
  for i in range(N):
    A[i] = list(map(int, input().split()))
  visited = [0] * (N + 1)
  ans_list = [float("inf")] * (N + 1)
  bfs(A, visited, 1)
  #print(bfs(A, visited, 1))
  for i in range(1, N + 1):
    if ans_list[i] >= 10 ** 10:
      print(i, -1)
    else:
      print(i, ans_list[i])
                
  
  
  
  
  
   __name__ == "__main__" __name__ "__main__" N = int(input()) N int(input()) int input() input A = [0] * N A [0] * N [0] 0 N for i in range(N):
    A[i] = list(map(int, input().split()))
   i range(N) range N A[i] = list(map(int, input().split())) A[i] A i list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split visited = [0] * (N + 1) visited [0] * (N + 1) [0] 0 N + 1 N 1 ans_list = [float("inf")] * (N + 1) ans_list [float("inf")] * (N + 1) [float("inf")] float("inf") float "inf" N + 1 N 1 bfs(A, visited, 1) bfs A visited 1 for i in range(1, N + 1):
    if ans_list[i] >= 10 ** 10:
      print(i, -1)
    else:
      print(i, ans_list[i])
                
  
  
  
  
  
   i range(1, N + 1) range 1 N + 1 N 1 if ans_list[i] >= 10 ** 10:
      print(i, -1)
    else:
      print(i, ans_list[i])
                
  
  
  
  
  
   ans_list[i] >= 10 ** 10 ans_list[i] ans_list i 10 ** 10 10 10 print(i, -1) print i -1 print(i, ans_list[i]) print i ans_list[i] ans_list i N = int(input()) int(input()) N visited = [0] * (N + 1) [0] * (N + 1) visited def bfs(maze, visited, x):
    queue = deque([x])
    visited[x] = 1
    ans_list[x] = 0
    while queue:
      #queueには訪れた地点が入っている。そこから、移動できるか考え、queueから消す。
        y = queue.popleft()#queueに入っていたものを消す。
        r = maze[y - 1][2:]
        for i in r:
            if visited[i] == 0:
              if ans_list[i] >= 10 ** 10:
                ans_list[i] = ans_list[y] + 1
                queue.append(i)
    return 0
              

                 def bfs(maze, visited, x):
    queue = deque([x])
    visited[x] = 1
    ans_list[x] = 0
    while queue:
      #queueには訪れた地点が入っている。そこから、移動できるか考え、queueから消す。
        y = queue.popleft()#queueに入っていたものを消す。
        r = maze[y - 1][2:]
        for i in r:
            if visited[i] == 0:
              if ans_list[i] >= 10 ** 10:
                ans_list[i] = ans_list[y] + 1
                queue.append(i)
    return 0
              

                 bfs A = [0] * N [0] * N A ans_list = [float("inf")] * (N + 1) [float("inf")] * (N + 1) ans_list
from collections import deque

def bfs(maze, visited, x):
    queue = deque([x])
    visited[x] = 1
    ans_list[x] = 0
    while queue:
      #queueには訪れた地点が入っている。そこから、移動できるか考え、queueから消す。
        y = queue.popleft()#queueに入っていたものを消す。
        r = maze[y - 1][2:]
        for i in r:
            if visited[i] == 0:
              if ans_list[i] >= 10 ** 10:
                ans_list[i] = ans_list[y] + 1
                queue.append(i)
    return 0
              

                
if __name__ == "__main__":
  N = int(input())
  A = [0] * N
  for i in range(N):
    A[i] = list(map(int, input().split()))
  visited = [0] * (N + 1)
  ans_list = [float("inf")] * (N + 1)
  bfs(A, visited, 1)
  #print(bfs(A, visited, 1))
  for i in range(1, N + 1):
    if ans_list[i] >= 10 ** 10:
      print(i, -1)
    else:
      print(i, ans_list[i])
                
  
  
  
  
  
  
