#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <utility>
#include <queue>
#include <cstring>
#include <cassert>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
template<class T> bool takemax(T &a, T &b) {bool f = (b > a); if(f) a = b; return f;}
template<class T> bool takemin(T &a, T &b) {bool f = (b < a); if(f) a = b; return f;}

#define MAXN 100010
int a[MAXN], b[MAXN];
const int INF=0x80000000;
#define REP(i, n) for(int i=0; i<n; i++)
#define out(x) cout<<(#x)<<'='<<x<<endl;
struct pt{
    int x, y;
    bool operator<(const pt &rhs) const {
        return x!=rhs.x?x<rhs.x:(y<rhs.y);
    }
    void print(){
        cout<<"---------"<<endl;
        out(x);
        out(y);
    }
} p[MAXN];
int n, adx, ady, x1, x2, y1, y2;
bool flag=false;
void dfs(int i, int lx, int ly, int dx, int dy){
    if(i==n){
        if(adx==INF||ady==INF)return;
        flag=true;
        adx=dx; ady=dy;
        return;
    }

    //both x and y
    int nlx=p[i].x, nly=p[i].y, ndx=dx, ndy=dy;
    bool ok=true;
    if(lx==INF);
    else if(dx==INF)ndx=nlx-lx;
    else if(dx!=nlx-lx)ok=false;
    if(ly==INF);
    else if(dy==INF)ndy=nly-ly;
    else if(dy!=nly-ly)ok=false;
    if(ok)dfs(i+1, nlx, nly, ndx, ndy);
    if(flag){
        if(y2==INF)y2=p[i].y;
        if(x2==INF)x2=p[i].x;
        x1=p[i].x;
        y1=p[i].y;
        return;
    }
    //only x
    ok=true; nlx=p[i].x; nly=ly; ndx=dx; ndy=dy;
    if(lx==INF);
    else if(dx==INF)ndx=nlx-lx;
    else if(dx!=nlx-lx)ok=false;
    if(ok)dfs(i+1, nlx, nly, ndx, ndy);
    if(flag){
        if(x2==INF)x2=p[i].x;
        x1=p[i].x;
        return;
    }

    //only y
    ok=true; nlx=lx; nly=p[i].y; ndx=dx; ndy=dy;
    if(ly==INF);
    else if(dy==INF)ndy=nly-ly;
    else if(dy!=nly-ly)ok=false;
    if(ok)dfs(i+1, nlx, nly, ndx, ndy);
    if(flag){
        if(y2==INF)y2=p[i].y;
        y1=p[i].y;
        return;
    }
}
int main(){
    freopen("grid.in", "r", stdin);
    freopen("grid.out", "w", stdout);
    x1=x2=y1=y2=INF;
    scanf("%d", &n);
    REP(i, n)scanf("%d%d", &p[i].x, &p[i].y);
    sort(p, p+n);
    dfs(0, INF, INF, INF, INF);
    if(x1>x2)swap(x1, x2);
    if(y1>y2)swap(y1, y2);
    if(adx==0)x1=x2=x1+1, adx=1; if(ady==0)y1=y2=y2+1, ady=1;
    cout<<x1<<' '<<x2<<' '<<abs(adx)<<' '<<y1<<' '<<y2<<' '<<abs(ady)<<endl;
}
