#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <cfloat>
#include <stack>
#include <queue>
#include <vector>
#include <string>
#include <iostream>
#include <set>
#include <map>
typedef long long int ll;
typedef unsigned long long int ull;
#define BIG_NUM 2000000000
#define MOD 1000000007
#define EPS 0.000000001
using namespace std;


struct Point{
	double x,y;
};

struct Info{
	Point p1,p2;
};

double calc_len(Info info){
	return sqrt((info.p1.x-info.p2.x)*(info.p1.x-info.p2.x)+(info.p1.y-info.p2.y)*(info.p1.y-info.p2.y));
}

double calc_slope(Info info){
	if(fabs(info.p1.x-info.p2.x) < EPS){
		return DBL_MAX;
	}else{
		return (info.p2.y-info.p1.y)/(info.p2.x-info.p1.x);
	}
}

int main(){

	int N;
	scanf("%d",&N);
	if(N%2 == 1){
		printf("NA\n");
		return 0;
	}

	Info info[N];
	Point point[N];
	scanf("%lf %lf",&info[0].p1.x,&info[0].p1.y);
	point[0].x = info[0].p1.x;
	point[0].y = info[0].p1.y;

	for(int i = 1; i <= N-1; i++){
		scanf("%lf %lf",&info[i-1].p2.x,&info[i-1].p2.y);
		info[i].p1.x = info[i-1].p2.x;
		info[i].p1.y = info[i-1].p2.y;

		point[i].x = info[i-1].p2.x;
		point[i].y = info[i-1].p2.y;

	}
	info[N-1].p2.x = info[0].p1.x;
	info[N-1].p2.y = info[0].p1.y;

	bool FLG = true;

	for(int i = 0; i < N/2; i++){
		if(calc_len(info[i]) != calc_len(info[i+N/2])){
			FLG = false;
			break;
		}
		if(calc_slope(info[i]) != calc_slope(info[i+N/2])){
			FLG = false;
			break;
		}
	}

	if(FLG){
		printf("%.10lf %.10lf\n",(point[0].x+point[N/2].x)/2.0,(point[0].y+point[N/2].y)/2.0);
	}else{
		printf("NA\n");
	}

	return 0;
}