#include<cstdio>
#include<algorithm>
#include<cassert>

using namespace std;

const int INF = 1000000007;

pair<int,int> a[100010];
int n;
int dx,dy,nowx,nowy,stx,sty,prey,prex,pr,x_1,x_2,y_1,y_2;
bool flag;

int abs(int x)
{
	if (x < 0) return -x; else return x;
}

int gcd(int x,int y)
{
	if (x == 0) return y; else return gcd(y % x,x);
}

bool checkx(int q1,int q2)
{
	dx = a[q2].first - a[q1].first;
	//printf("%d %d --- %d %d %d\n",q1,q2,dx,a[0].first,a[1].first);
	nowx = a[q1].first;
	prey = -INF;
	dy = -INF;
	for(int i = 0;i < n;i++)
	{
		if (a[i].first != nowx)
		{
			if (prey != -INF)
			{
				if (dy == -INF)
				{
					dy = a[i].second - prey;
				//	if (dy < 0) pr = -1; else pr = 1;
				if (dy < 0) return false;
				}else
				{
					dy = gcd(dy,a[i].second - prey);
					if (a[i].second - prey < 0) return false;
				}
			}
			prey = a[i].second;
		} else nowx += dx;
	}
	if (pr == -1 && dy > 0) dy = -dy;
	if (dy == -INF && prey != -INF) dy = 1000000000;
	stx = nowx = a[q1].first;
	prey = -INF;
	nowy = -INF;
	
	for(int i = 0;i < n;i++)
	{
		int q = 0;
		if (a[i].first == nowx)
		{
			nowx += dx;
			q++;
		} else
		{
			if (nowy == -INF)
			{
			
				q++;
				sty = a[i].second;
				nowy = a[i].second + dy;
				//printf("!! %d %d %d##",a[i].second,dy,nowy);
			}
		}
		if (a[i].second == nowy)
		{
			nowy += dy;
			q+=2;
		}
		//printf("%d",q);
		if (q == 0)
		{
			//puts("end");
			return false;
		}
	}
	//printf("\n%d %d --- %d %d ok \n",q1,q2,dx,dy);
	return true;	
}

bool checky(int q1,int q2)
{
	dy = a[q2].second - a[q1].second;
	if (dy < 0) return false;
	nowy = a[q1].second;
	prex = -INF;
	dx = -INF;
	for(int i = 0;i < n;i++)
	{
		if (a[i].second != nowy)
		{
			if (prex != -INF)
			{
				if (dx == -INF) dx = a[i].first - prex; else dx = gcd(dx,a[i].first - prex);
			}
			prex = a[i].first;
		} else nowy += dy;
	}
	if (dx == -INF && prex != -INF) dx = 1000000000;
	sty = nowy = a[q1].second;
	prex = -INF;
	nowx = -INF;
	
	for(int i = 0;i < n;i++)
	{
		int q = 0;
		if (a[i].second == nowy)
		{
			nowy += dy;
			q++;
		} else
		{
			if (nowx == -INF)
			{
				q++;
				stx = a[i].first;
				nowx = a[i].first + dx;
			}
		}
		if (a[i].first == nowx)
		{
			nowx += dx;
			q++;
		}
		if (q == 0) return false;
	}
	
	return true;	
}

int main()
{
	freopen("grid.in","r",stdin);
	freopen("grid.out","w",stdout);
	scanf("%d",&n);
	for(int i = 0;i < n;i++)
	{
		scanf("%d%d",&a[i].first,&a[i].second);
	}
	sort(a,a+n);
	flag = false;
	if (checkx(0,1)) flag = true;
	if (!flag) if (checkx(0,2)) flag = true;
	if (!flag) if (checkx(1,2)) flag = true;
	if (!flag) if (checky(0,1)) flag = true;
	if (!flag) if (checky(0,2)) flag = true;
	if (!flag) if (checky(1,2)) flag = true;
	
	if (dx == -INF)
	{
		dx = a[n-1].first - a[0].first;
		x_1 = a[0].first;
		x_2 = a[n-1].first;
		y_1 = sty;y_2 = nowy - dy;
	//	puts("1");
	} else
	if (dy == -INF)
	{
		dy = abs(a[n-1].second - a[0].second);
		y_1 = min(a[0].second,a[n-1].second);
		y_2 = max(a[0].second,a[n-1].second);
		x_1 = stx;x_2 = nowx - dx;
	//	puts("2");
	} else
	{
		x_1 = stx;x_2 = nowx - dx;
		y_1 = sty;y_2 = nowy - dy;
	//	puts("3");
	//	printf("%d %d\n",nowy,dy);
	}
	assert(flag);
	if (x_1 > x_2) swap(x_1,x_2);
	if (y_1 > y_2) swap(y_1,y_2);
 	//if (flag)
	printf("%d %d %d %d %d %d\n",x_1,x_2,abs(dx),y_1,y_2,abs(dy));
	
	return 0;
}
