#include <iostream>
using namespace std;

int n;
struct data
{
	int arrA [10];
	int arrB [10];
} typedef data;
data table [100005];

void init ()
{
	for (int i=1; i<=n; i++)
	{
		for (int j=1; j<=5; j++)
		{
			table[i].arrA[j]=0;
			table[i].arrB[j]=0;
		}
	}
}

int main ()
{
	cin>>n;
	init ();
	int lenMax=0;
	int pointMin=10;
	for (int i=1; i<=n; i++)
	{
		int A, B;
		cin>>A>>B;
		if (i==1)
		{
			table[i].arrA[A]++;
			table[i].arrB[B]++;
			if (table[i].arrA[A]>lenMax)
			{
				lenMax=table[i].arrA[A];
				pointMin=A;
			}
			else if (table[i].arrA[A]==lenMax)
			{
				if (A<pointMin)
					pointMin=A;
			}
			if (table[i].arrB[B]>lenMax)
			{
				lenMax=table[i].arrB[B];
				pointMin=B;
			}
			else if (table[i].arrB[B]==lenMax)
			{
				if (A<pointMin)
					pointMin=B;
			}
		}
		else
		{
			table[i].arrA[A]++;
			if (table[i-1].arrA[A]!=0) table[i].arrA[A]+=table[i-1].arrA[A];
			else if (table[i-1].arrB[A]!=0) table[i].arrA[A]+=table[i-1].arrB[A];
			
			table[i].arrB[B]++;
			if (table[i-1].arrA[B]!=0) table[i].arrB[B]+=table[i-1].arrA[B];
			else if (table[i-1].arrB[B]!=0) table[i].arrB[B]+=table[i-1].arrB[B];
			
			if (table[i].arrA[A]>lenMax)
			{
				lenMax=table[i].arrA[A];
				pointMin=A;
			}
			else if (table[i].arrA[A]==lenMax)
			{
				if (A<pointMin)
					pointMin=A;
			}
			if (table[i].arrB[B]>lenMax)
			{
				lenMax=table[i].arrB[B];
				pointMin=B;
			}
			else if (table[i].arrB[B]==lenMax)
			{
				if (A<pointMin)
					pointMin=B;
			}
		}
	}
	cout<<lenMax<<" "<<pointMin;
	return 0;
}