#include <bits/stdc++.h>

#define rep(i, a, b) for (int i = a, i##end = b; i <= i##end; ++i)
#define per(i, a, b) for (int i = a, i##end = b; i >= i##end; --i)
#define rep0(i, a) for (int i = 0, i##end = a; i < i##end; ++i)
#define per0(i, a) for (int i = (int)a-1; ~i; --i)
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define chkmax(a, b) a = max(a, b)
#define chkmin(a, b) a = min(a, b)
#define x first
#define y second

typedef long long ll;

struct Point { double x, y; };
Point operator + (Point a, Point b) { return (Point){a.x + b.x, a.y + b.y}; }
Point operator - (Point a, Point b) { return (Point){a.x - b.x, a.y - b.y}; }
Point operator * (double k, Point a) { return (Point){k * a.x, k * a.y}; }
double dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double disc(Point a) { return sqrt(dot(a, a)); }

Point P1, P2;
int q;

Point Projection(Point P1, Point P2, Point P3) {
	Point vec1 = P2-P1, vec2 = P3-P1; 
	vec1 = dot(vec1, vec2) / dot(vec1, vec1) * vec1;
	return vec1 + P1;
}

int main() {
	scanf("%lf%lf%lf%lf", &P1.x, &P1.y, &P2.x, &P2.y);
	scanf("%d", &q);
	while (q--) {
		Point P3; scanf("%lf%lf", &P3.x, &P3.y);
		Point P = Projection(P1, P2, P3), _P = 2*P-P3;
		printf("%.10lf %.10lf\n", _P.x, _P.y);
	}
	return 0;
}

### Prompt

In Cpp, your task is to solve the following problem:

For given three points p1, p2, p, find the reflection point x of p onto p1p2.

<image>

Constraints

* 1 ≤ q ≤ 1000
* -10000 ≤ xi, yi ≤ 10000
* p1 and p2 are not identical.

Input


xp1 yp1 xp2 yp2
q
xp0 yp0
xp1 yp1
...
xpq−1 ypq−1


In the first line, integer coordinates of p1 and p2 are given. Then, q queries are given for integer coordinates of p.

Output

For each query, print the coordinate of the reflection point x. The output values should be in a decimal fraction with an error less than 0.00000001.

Examples

Input

0 0 2 0
3
-1 1
0 1
1 1


Output

-1.0000000000 -1.0000000000
0.0000000000 -1.0000000000
1.0000000000 -1.0000000000


Input

0 0 3 4
3
2 5
1 4
0 3


Output

4.2400000000 3.3200000000
3.5600000000 2.0800000000
2.8800000000 0.8400000000

### Response

```cpp
#include <bits/stdc++.h>

#define rep(i, a, b) for (int i = a, i##end = b; i <= i##end; ++i)
#define per(i, a, b) for (int i = a, i##end = b; i >= i##end; --i)
#define rep0(i, a) for (int i = 0, i##end = a; i < i##end; ++i)
#define per0(i, a) for (int i = (int)a-1; ~i; --i)
#define max(a, b) ((a) > (b) ? (a) : (b))
#define min(a, b) ((a) < (b) ? (a) : (b))
#define chkmax(a, b) a = max(a, b)
#define chkmin(a, b) a = min(a, b)
#define x first
#define y second

typedef long long ll;

struct Point { double x, y; };
Point operator + (Point a, Point b) { return (Point){a.x + b.x, a.y + b.y}; }
Point operator - (Point a, Point b) { return (Point){a.x - b.x, a.y - b.y}; }
Point operator * (double k, Point a) { return (Point){k * a.x, k * a.y}; }
double dot(Point a, Point b) { return a.x * b.x + a.y * b.y; }
double cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
double disc(Point a) { return sqrt(dot(a, a)); }

Point P1, P2;
int q;

Point Projection(Point P1, Point P2, Point P3) {
	Point vec1 = P2-P1, vec2 = P3-P1; 
	vec1 = dot(vec1, vec2) / dot(vec1, vec1) * vec1;
	return vec1 + P1;
}

int main() {
	scanf("%lf%lf%lf%lf", &P1.x, &P1.y, &P2.x, &P2.y);
	scanf("%d", &q);
	while (q--) {
		Point P3; scanf("%lf%lf", &P3.x, &P3.y);
		Point P = Projection(P1, P2, P3), _P = 2*P-P3;
		printf("%.10lf %.10lf\n", _P.x, _P.y);
	}
	return 0;
}

```