//我等渣渣只会遍历默默去哭了
/* 第一题 */
#include <iostream>
#include <vector>
using namespace std;
struct NODE
{
	int x;
	int y;
};
int main()
{
	int N;
	cin >> N;
	NODE *node = new NODE[N];
	for(int i=0;i<N;i++)
	{
		cin >> node[i].x;
		cin >> node[i].y;
	}
	vector <NODE> ret;
	int istrue;
	for(int i=0;i<N;i++)
	{
		istrue = 1;
		for(int j=0;j<N;j++)
		{
			if(j != i)
			{
				if((node[j].x - node[i].x >= 0) && (node[j].y - node[i].y >= 0) )
					istrue = 0;
			}
		}
		if(istrue == 1)
			ret.push_back(node[i]);
	}
	NODE temp;
	for(int i=0;i<ret.size();i++)
	{
		for(int j=1;j<ret.size()-1;j++)
		{
			if(ret[j].x > ret[j+1].x)
			{
				temp = ret[j];
				ret[j] = ret[j+1];
				ret[j+1] = temp;
			}
		}
	}
	for(int i=0;i<ret.size();i++)
		cout<<ret[i].x<<" "<<ret[i].y<<endl;
	return 0;
}

/* 第二题 */
#include <iostream>
#include <vector>
using namespace std;
vector <int> team;
vector < vector <int> > Teams;
int max_ret = 0;
int main()
{
	int mid(vector <int> &vec, int k);
	void zuhe(int *arr,int i,int k,int n);
	int n;
	cin >> n;
	int *in = new int[n];
	for(int i=0;i<n;i++)
		cin >> in[i];

	for(int k = 1; k <= n; k++)
		zuhe(in, 0, k, n);
	//
	cout<<max_ret<<endl;
	getchar();
	getchar();

	delete []in;
	return 0;
}
int mid(vector <int> &vec, int k)
{
	int sum = 0;
	int min = vec[0];
	int index = 0;
	if(k == 1)
		sum = vec[0];
	else
	{
		for(int i=0;i<k;i++)
		{
			if(vec[i] < min)
			{
				min = vec[i];
				index = i;
			}
		}
		for(int j=0;j<k;j++)
		{
			if(j != index)
				sum += vec[j];
		}
	}
	return min * sum;
}
void zuhe(int *arr,int i,int k,int n)
{  
	int temp;
	if(team.size() == k)
	{
		temp = mid(team,k);
		if(temp > max_ret)
			max_ret = temp;
		Teams.push_back(team);
		return;
	}
	for(int j = i; j < n; j++)
	{ 
		team.push_back(arr[j]);
		zuhe(arr, j + 1, k, n);
		team.pop_back();
	} 
}