#include<stdio.h>
#include<stdlib.h>
struct Treenode{
long data;
int count;
Treenode* pleft;
Treenode* pright;
};
Treenode* creat_node(long value)
{
Treenode* pnode=(Treenode*)malloc(sizeof(Treenode));
pnode->data=value;
pnode->count=1;
pnode->pleft=pnode->pright=NULL;
return pnode;
}
Treenode* add_node(long value,Treenode* Pnode)
{
if(!Pnode) {return creat_node(value);}
if(value== Pnode->data)
{
++Pnode->count;
return Pnode;
}
if(value< Pnode->data)
{
if(!Pnode->pleft)
{
Pnode->pleft=creat_node(value);
return Pnode->pleft;
}
else
return add_node(value,Pnode->pleft);
}
else
{
if(!Pnode->pright)
{
Pnode->pright=creat_node(value);
return Pnode->pright;
}
else
return add_node(value,Pnode->pright);
}
}
void list_nodes(Treenode* Pnode)
{
if(Pnode->pleft)
{list_nodes(Pnode->pleft);}
printf("%d %d \n",Pnode->count,Pnode->data);
if(Pnode->pright)
{list_nodes(Pnode->pright);}
}
int main()
{
long newvalue;
int n,a;
scanf("%d",&n);
scanf("%ld",&newvalue);
Treenode* Proot=creat_node(newvalue);
for(int i=1;i<n;i++)
{
scanf("%ld",&newvalue);
add_node(newvalue,Proot);
}
list_nodes(Proot);
}