#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#define R register
#define next wobuzaixiangnianni
using namespace std;
typedef long long ll;
const ll N=10010;
ll head[N*2],next[N*2],ver[N*2],tot;
ll dfn[N*2],low[N*2],ins[N*2],c[N*2],stac[N*2],cnt,top,num;
inline ll add(ll x,ll y){
next[++tot]=head[x];
head[x]=tot;
ver[tot]=y;
}
inline void write(ll x){
if(x<0) {
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar('0'+x%10);
}
inline ll read(){
ll x=0,t=1;
char ch=getchar();
while(ch<'0' || ch> '9') {
if(ch=='-') t=-1;
ch=getchar();
}
while(ch>='0' && ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*t;
}
inline void tarjan(ll x){
dfn[x]=low[x]=++num;
stac[++top]=x;
ins[x]=1;
for(R ll i=head[x];i;i=next[i]){
if(!dfn[ver[i]]) tarjan(ver[i]),low[x]=min(low[x],low[ver[i]]);
else if(ins[ver[i]]) low[x]=min(low[x],dfn[ver[i]]);
}
if(dfn[x]==low[x]){
ll y;
++cnt;
do{
y=stac[top--];
c[y]=cnt;
ins[y]=0;
}while(x!=y);
}
}
ll first[N*2],last[N*2],to[N*2],tyt;
ll ru[N*2],chu[N*2];
inline void v_add(ll u,ll v){
last[++tyt]=first[u];
first[u]=tyt;
to[tyt]=v;
}
ll n;
signed main(){
n=read();
for(R ll i=1,y;i<=n;i++){
y=read();
while(y){
add(i,y);
y=read();
}
}
for(R ll i=1;i<=n;i++)
if(!dfn[i]) tarjan(i);
for(R ll x=1;x<=n;x++)
for(R ll i=head[x];i;i=next[i]){
if(c[x]==c[ver[i]]) continue;
v_add(c[x],c[ver[i]]);
}
for(R ll x=1;x<=cnt;x++)
for(R ll i=first[x];i;i=last[i])
ru[to[i]]++,chu[x]++;
ll ans=0,mas=0;
for(R ll i=1;i<=cnt;i++) {
if(ru[i]==0) ans++;
if(chu[i]==0) mas++;
}
write(ans);
putchar('\n');
write(max(ans,mas));
}