#include<bits/stdc++.h>
using namespace std;
const int MAXN=1001;
struct Node{
int level;
vector<int> child;
Node(){
level=0;
}
}node[MAXN];
void levetra(int root,int _level){
if(node[root].child.size()==0) return;
queue<int> q;
node[root].level=_level;
q.push(root);
while(!q.empty()){
int now=q.front();
q.pop();
for(int i=0;i<node[now].child.size();i++){
node[node[now].child[i]].level=node[now].level+1;
q.push(node[now].child[i]);
}
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
#endif
int n,k;
cin>>n>>k;
for(int i=0;i<k;i++){
int a,b;
cin>>a>>b;
for(int j=0;j<b;j++){
int temp;
cin>>temp;
node[a].child.push_back(temp);
}
}
if(node[1].child.size()==0){
cout<<1<<' '<<1<<endl;
return 0;
}
levetra(1,1);
int le[MAXN]={};
for(int i=1;i<=n;i++){
le[node[i].level]++;
}
int maxlevel=0;
int cnt=0;
for(int i=0;i<MAXN;i++){
if(le[i]>cnt){
cnt=le[i];
maxlevel=i;
}
}
cout<<cnt<<' '<<maxlevel<<endl;
return 0;
}