#include<bits/stdc++.h>
#define itn int
#define ll long long
using namespace std;
const int N=1e2+10;
int n;
int dfn[N],low[N],id;
struct no{
int v,net;
}e[N*N];
int h[N],cnt;
struct node{
int v,net;
}sc[N*N];
int sch[N],scnt,son[N];
void add(int x,int y){
cnt++;
e[cnt].v=y;
e[cnt].net=h[x];
h[x]=cnt;
}
int scc[N];
stack <itn> st;
void tarjan(int u){
low[u]=dfn[u]=++id;
st.push(u);
for(itn i=h[u];i;i=e[i].net ){
int v=e[i].v;
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}else if(!scc[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(low[u] == dfn[u]){
scc[u] = ++scnt;
while(st.top() != u){
scc[st.top()]=scnt;
st.pop();
}
st.pop();
}
}
int fa[N];
void addscc(int x,int y){
cnt++;
sc[cnt].v=y;
sc[cnt].net=sch[x];
sch[x]=cnt;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
int x;
while(cin>>x){
if(!x){
break ;
}
add(i,x);
}
}
for(int i=1;i<=n;i++){
if(!dfn[i]){
tarjan(i);
}
}
cnt=0;
for(int i=1;i<=scnt;i++){
for(itn j=h[i];j;j=e[j].net ){
int v=e[j].v;
if(scc[i]!=scc[v]){
fa[scc[v]]++;
son[scc[i]]++;
}
}
}
cnt=0;
int cnt1=0;
if(n==1){
cout<<1<<"\n"<<1;
return 0;
}
for(int i=1;i<=scnt;i++){
if(!fa[i]){
cnt++;
}
if(!son[i]){
cnt1++;
}
}
cnt1=max(cnt,cnt1);
cout<<cnt<<"\n"<<cnt1;
return 0;
}