#include <bits/stdc++.h>
const int MAX = 300010;
const int MOD = 998244353;
const int INF = 0x3f3f3f3f;
const long long LLINF = 0x3f3f3f3f3f3f3f3f;
const long double EPS = 1e-8;
const long double PI = acosl(-1.0);
using namespace std;
bool eq(long double a, long double b) { return fabsl(a - b) <= EPS; }
struct point {
  long double x, y;
  int id;
  point(long double x = 0, long double y = 0) : x(x), y(y) {}
  point operator+(const point &o) const { return {x + o.x, y + o.y}; }
  point operator-(const point &o) const { return {x - o.x, y - o.y}; }
  point operator*(long double t) const { return {x * t, y * t}; }
  point operator/(long double t) const { return {x / t, y / t}; }
  bool operator<(const point &o) const {
    if (!eq(x, o.x)) return x < o.x;
    return y < o.y;
  }
  bool operator==(const point &o) const { return eq(x, o.x) and eq(y, o.y); }
};
point novo(point m, point a) { return m + (a - m) * 2; }
int main() {
  int n, mx, my, x, y;
  long long j;
  vector<point> A, vet;
  cin >> n >> j >> mx >> my;
  vet.push_back(point(mx, my));
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    A.push_back(point(x, y));
  }
  for (int i = 0; i < 2 * n; i++) {
    vet.push_back(novo(vet[i], A[i % n]));
  }
  cout << vet[(int)(j % (2 * n))].x << " " << vet[(int)(j % (2 * n))].y << '\n';
  return 0;
}

### Prompt

Develop a solution in Cpp to the problem described below:

You are given the following points with integer coordinates on the plane: M0, A0, A1, ..., An - 1, where n is odd number. Now we define the following infinite sequence of points Mi: Mi is symmetric to Mi - 1 according <image> (for every natural number i). Here point B is symmetric to A according M, if M is the center of the line segment AB. Given index j find the point Mj.

Input

On the first line you will be given an integer n (1 ≤ n ≤ 105), which will be odd, and j (1 ≤ j ≤ 1018), where j is the index of the desired point. The next line contains two space separated integers, the coordinates of M0. After that n lines follow, where the i-th line contain the space separated integer coordinates of the point Ai - 1. The absolute values of all input coordinates will not be greater then 1000.

Output

On a single line output the coordinates of Mj, space separated.

Examples

Input

3 4
0 0
1 1
2 3
-5 3


Output

14 0


Input

3 1
5 5
1000 1000
-1000 1000
3 100


Output

1995 1995

### Response

```cpp
#include <bits/stdc++.h>
const int MAX = 300010;
const int MOD = 998244353;
const int INF = 0x3f3f3f3f;
const long long LLINF = 0x3f3f3f3f3f3f3f3f;
const long double EPS = 1e-8;
const long double PI = acosl(-1.0);
using namespace std;
bool eq(long double a, long double b) { return fabsl(a - b) <= EPS; }
struct point {
  long double x, y;
  int id;
  point(long double x = 0, long double y = 0) : x(x), y(y) {}
  point operator+(const point &o) const { return {x + o.x, y + o.y}; }
  point operator-(const point &o) const { return {x - o.x, y - o.y}; }
  point operator*(long double t) const { return {x * t, y * t}; }
  point operator/(long double t) const { return {x / t, y / t}; }
  bool operator<(const point &o) const {
    if (!eq(x, o.x)) return x < o.x;
    return y < o.y;
  }
  bool operator==(const point &o) const { return eq(x, o.x) and eq(y, o.y); }
};
point novo(point m, point a) { return m + (a - m) * 2; }
int main() {
  int n, mx, my, x, y;
  long long j;
  vector<point> A, vet;
  cin >> n >> j >> mx >> my;
  vet.push_back(point(mx, my));
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    A.push_back(point(x, y));
  }
  for (int i = 0; i < 2 * n; i++) {
    vet.push_back(novo(vet[i], A[i % n]));
  }
  cout << vet[(int)(j % (2 * n))].x << " " << vet[(int)(j % (2 * n))].y << '\n';
  return 0;
}

```