//
// main.cpp
// PATA1004
//
// Created by Phoenix on 2018/1/30.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
const int maxn = 110;
int num[maxn] = {0};
struct node {
vector<int> child;
}node[maxn];
int t = 0;
void level(int root){
queue<int> q;
int lastnode = root;
int newlastnode = -1;
q.push(root);
while(!q.empty()) {
int top = q.front();
q.pop();
if(node[top].child.size() == 0){
num[t]++;
}
for(int i = 0; i < node[top].child.size(); i++) {
q.push(node[top].child[i]);
newlastnode = node[top].child[i];
}
if(top == lastnode) {
t++;
lastnode = newlastnode;
}
}
}
int main(int argc, const char * argv[]) {
int n, m;
scanf("%d %d", &n, &m);
for (int i = 0; i < m; i++) {
int root, k;
scanf("%d %d", &root, &k);
for(int j = 0; j < k; j++) {
int child;
scanf("%d", &child);
node[root].child.push_back(child);
}
}
level(1);
for(int i = 0; i < t; i++) {
printf("%d", num[i]);
if(i < t - 1) printf(" ");
}
return 0;
}
树的层序遍历