#define PROBLEM \
"https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_11_C"
#include<bits/stdc++.h>#define REP(i, n) for (int i = 0; i < (n); i++)
#include"library/graph/Graph.hpp"
#include"library/graph/shortest_path/BFS.hpp"intmain(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);intn;std::cin>>n;Graphg(n);REP(_,n){intu,k;std::cin>>u>>k;u--;REP(_,k){intv;std::cin>>v;v--;g.add_arc(u,v);}}g.build();auto[d,pre]=BFS(g);REP(i,n)std::cout<<i+1<<" "<<d[i]<<"\n";}
#line 1 "test/AOJ/ALDS1_11_C.test.cpp"
#define PROBLEM \
"https://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_11_C"
#include<bits/stdc++.h>#define REP(i, n) for (int i = 0; i < (n); i++)
#line 2 "library/graph/Graph.hpp"
#line 6 "library/graph/Graph.hpp"
structEdge{intfrom,to;Edge()=default;Edge(intfrom,intto):from(from),to(to){}operatorint()const{returnto;}};structGraph{intn;usingedge_type=Edge;std::vector<edge_type>edges;protected:std::vector<int>in_deg;boolprepared;classOutgoingEdges{Graph*g;intl,r;public:OutgoingEdges(Graph*g,intl,intr):g(g),l(l),r(r){}edge_type*begin(){return&(g->edges[l]);}edge_type*end(){return&(g->edges[r]);}edge_type&operator[](inti){returng->edges[l+i];}intsize()const{returnr-l;}};classConstOutgoingEdges{constGraph*g;intl,r;public:ConstOutgoingEdges(constGraph*g,intl,intr):g(g),l(l),r(r){}constedge_type*begin()const{return&(g->edges[l]);}constedge_type*end()const{return&(g->edges[r]);}constedge_type&operator[](inti)const{returng->edges[l+i];}intsize()const{returnr-l;}};public:OutgoingEdgesoperator[](intv){assert(prepared);return{this,in_deg[v],in_deg[v+1]};}constConstOutgoingEdgesoperator[](intv)const{assert(prepared);return{this,in_deg[v],in_deg[v+1]};}boolis_prepared()const{returnprepared;}Graph():n(0),in_deg(1,0),prepared(false){}Graph(intn):n(n),in_deg(n+1,0),prepared(false){}Graph(intn,intm,booldirected=false,intindexed=1):n(n),in_deg(n+1,0),prepared(false){scan(m,directed,indexed);}voidresize(intn){n=n;}voidadd_arc(intfrom,intto){assert(!prepared);assert(0<=fromandfrom<nand0<=toandto<n);edges.emplace_back(from,to);in_deg[from+1]++;}voidadd_edge(intu,intv){add_arc(u,v);add_arc(v,u);}voidadd_arc(constedge_type&e){add_arc(e.from,e.to);}voidadd_edge(constedge_type&e){add_edge(e.from,e.to);}voidscan(intm,booldirected=false,intindexed=1){edges.reserve(directed?m:2*m);while(m--){intu,v;std::cin>>u>>v;u-=indexed;v-=indexed;if(directed)add_arc(u,v);elseadd_edge(u,v);}build();}voidbuild(){assert(!prepared);prepared=true;for(intv=0;v<n;v++)in_deg[v+1]+=in_deg[v];std::vector<edge_type>new_edges(in_deg.back());autocounter=in_deg;for(auto&&e:edges)new_edges[counter[e.from]++]=e;edges=new_edges;}voidgraph_debug()const{#ifndef __LOCAL
return;#endif
assert(prepared);for(intfrom=0;from<n;from++){std::cerr<<from<<";";for(inti=in_deg[from];i<in_deg[from+1];i++)std::cerr<<edges[i].to<<" ";std::cerr<<"\n";}}};#line 2 "library/graph/shortest_path/BFS.hpp"
template<typenameGRAPH>std::pair<std::vector<int>,std::vector<int>>BFS(constGRAPH&g,ints=0){assert(g.is_prepared());std::vector<int>d(g.n,-1),pre(g.n,-1);std::queue<int>que;d[s]=0;que.push(s);while(que.size()){intv=que.front();que.pop();for(intto:g[v])if(d[to]<0){d[to]=d[v]+1;que.push(to);}}return{d,pre};}#line 9 "test/AOJ/ALDS1_11_C.test.cpp"
intmain(){std::ios::sync_with_stdio(false);std::cin.tie(nullptr);intn;std::cin>>n;Graphg(n);REP(_,n){intu,k;std::cin>>u>>k;u--;REP(_,k){intv;std::cin>>v;v--;g.add_arc(u,v);}}g.build();auto[d,pre]=BFS(g);REP(i,n)std::cout<<i+1<<" "<<d[i]<<"\n";}