#include <iostream> #include <queue> using namespace std; static const int N=100; static const int WHITE=0; static const int GRAY=1; static const int BLACK=2; int n,M[N][N]; int d[N],f[N],color[N],time; void BFS(int s) { queue<int> q; q.push(s); for(int i=0;i<n;i++) d[i]=INT_MAX; d[s]=0; int u; while(!q.empty()) { u=q.front(); q.pop(); for(int v=0;v<n;v++) { if(d[v]!=INT_MAX) continue;//这段代码是必不可少的,因为图中可能存在一个结点被多个结点所指的情况 if(M[u][v]) { q.push(v); d[v]=d[u]+1; } else continue; } } } int main() { int u,k,v; cin>>n; for(int i=0;i<n;i++) for(int j=0;j<n;j++) { M[i][j]=0; } for(int i=0;i<n;i++) { cin>>u>>k; for(int j=0;j<k;j++) { cin>>v; M[u-1][v-1]=1; } } BFS(0); for(int i=0;i<n;i++) cout<<i+1<<" "<<((d[i]==INT_MAX)?(-1):d[i])<<endl; return 0; }