#include<bits/stdc++.h>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,T,ans,big,cas,num,len,an,bn,ans_num,cur;
bool flag;
map <string,int> mp;
vector <int> st[10002];
int vis[10002];
int tmp[10002];
string a,b,rev[10002];
int main()
{
scanf("%d",&n);
for (i=1;i<=n;i++) st[i].clear();
mp.clear();
memset(tmp,0,sizeof(tmp));
num=0;
an=bn=0;
ans_num=0;
cur=0;
ans=0;
for (i=1;i<=n;i++)
{
cin>>a>>b;
if (!mp.count(a))
{
mp[a]=++num;
rev[num]=a;
an=num;
}else an=mp[a];
if (!mp.count(b))
{
mp[b]=++num;
rev[num]=b;
bn=num;
}else bn=mp[b];
st[an].push_back(bn);
st[bn].push_back(an);
}
for (i=1;i<=num;i++)
{
sort(st[i].begin(),st[i].end());
}
printf("%d\n",num);
for (i=1;i<=num;i++)
{
int pre=0;
cur=0;ans=0;ans_num=0;
memset(vis,0,sizeof(vis));
for (vector <int> ::iterator it=st[i].begin();it!=st[i].end();it++)
{
vis[*it]=1;
}
vis[i]=1;
for (j=1;j<=num;j++)
{
if (vis[j]) continue;
cur=set_intersection(st[i].begin(),st[i].end(),st[j].begin(),st[j].end(),tmp)-tmp;
if (cur>ans_num)
{
ans_num=cur;
ans=1;
}else
if (cur==ans_num)
{
ans++;
}
}
cout<<rev[i]<<" "<<ans<<endl;
}
return 0;
}