#include <bits/stdc++.h>
using namespace std;
template <typename I>
inline void read(I& x) {
  int f = 0, c;
  while (!isdigit(c = getchar())) c == '-' ? f = 1 : 0;
  x = c & 15;
  while (isdigit(c = getchar())) x = (x << 1) + (x << 3) + (c & 15);
  f ? x = -x : 0;
}
template <typename A, typename B>
inline char SMAX(A& a, const B& b) {
  return a < b ? a = b, 1 : 0;
}
template <typename A, typename B>
inline char SMIN(A& a, const B& b) {
  return a > b ? a = b, 1 : 0;
}
struct Point {
  int x, y;
  inline Point(int x = 0, int y = 0) : x(x), y(y) {}
};
inline bool operator<(Point A, Point B) {
  return A.x < B.x || (A.x == B.x && A.y < B.y);
}
inline Point operator+(Point A, Point B) { return Point(A.x + B.x, A.y + B.y); }
const int N = 1000 + 7;
int n;
Point a[N], b[N];
multiset<Point> s, p;
int main() {
  read(n);
  for (int i = 1; i <= n; ++i) read(a[i].x), read(a[i].y);
  for (int i = 1; i <= n; ++i) read(b[i].x), read(b[i].y);
  for (int i = 1; i <= 1; ++i)
    for (int j = 1; j <= n; ++j) s.insert(a[i] + b[j]);
  for (int i = 2; i <= n; ++i) {
    p.clear();
    for (int j = 1; j <= n; ++j)
      if (s.count(a[i] + b[j])) p.insert(a[i] + b[j]);
    s = p;
  }
  auto ans = *s.begin();
  printf("%d %d\n", ans.x, ans.y);
}
