#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<functional>
#include<vector>
#include<queue>
#include<complex>
using namespace std;
#define f(i,n) for(int i=0;i<(int)n;i++)
#define MOD 1000000009
#define MIN (1e-10)
typedef complex<double> P;
bool EQ(P a, P b){
	if (abs(a.real() - b.real()) < MIN&&abs(a.imag() - b.imag()) < MIN)return true;
	else return false;
}
double dot(P a, P b){
	return{ a.real()*b.real() + a.imag()*b.imag() };
}
double cross(P a, P b){
	return{ a.real()*b.imag() - a.imag()*b.real() };
}
P insec(P a1, P a2, P b1, P b2){
	P a, b;
	a = a2 - a1;
	b = b2 - b1;
	return a1 + (a*cross(b, b1 - a1) / cross(b, a));
}
void print(double x, int k){
	if (x < 0){
		printf("-");
		x = -x;
	}
	printf("%d.", (int)x);
	x = x - (double)(int)x;
	f(i, k){
		x = x * 10;
		printf("%d", (int)x);
		x = x - (double)(int)x;
	}
	return;
}

int main(void){
	P a, b, c;
	P d, e, f;
	double x, y;
	int n;
	scanf("%lf %lf", &x, &y);
	a = P(x, y);
	scanf("%lf %lf", &x, &y);
	b = P(x, y);
	f = (b - a)*P(0, 1);
	scanf("%d", &n);
	f(i, n){
		scanf("%lf %lf", &x, &y);
		c = P(x, y);
		d = c + f;
		e = insec(a, b, c, d);
		e = e*(double)2 - c;
		print(e.real(), 10);
		printf(" ");
		print(e.imag(), 10);
		printf("\n");
	}
	return 0;
}
### Prompt

Develop a solution in cpp to the problem described below:

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<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<functional>
#include<vector>
#include<queue>
#include<complex>
using namespace std;
#define f(i,n) for(int i=0;i<(int)n;i++)
#define MOD 1000000009
#define MIN (1e-10)
typedef complex<double> P;
bool EQ(P a, P b){
	if (abs(a.real() - b.real()) < MIN&&abs(a.imag() - b.imag()) < MIN)return true;
	else return false;
}
double dot(P a, P b){
	return{ a.real()*b.real() + a.imag()*b.imag() };
}
double cross(P a, P b){
	return{ a.real()*b.imag() - a.imag()*b.real() };
}
P insec(P a1, P a2, P b1, P b2){
	P a, b;
	a = a2 - a1;
	b = b2 - b1;
	return a1 + (a*cross(b, b1 - a1) / cross(b, a));
}
void print(double x, int k){
	if (x < 0){
		printf("-");
		x = -x;
	}
	printf("%d.", (int)x);
	x = x - (double)(int)x;
	f(i, k){
		x = x * 10;
		printf("%d", (int)x);
		x = x - (double)(int)x;
	}
	return;
}

int main(void){
	P a, b, c;
	P d, e, f;
	double x, y;
	int n;
	scanf("%lf %lf", &x, &y);
	a = P(x, y);
	scanf("%lf %lf", &x, &y);
	b = P(x, y);
	f = (b - a)*P(0, 1);
	scanf("%d", &n);
	f(i, n){
		scanf("%lf %lf", &x, &y);
		c = P(x, y);
		d = c + f;
		e = insec(a, b, c, d);
		e = e*(double)2 - c;
		print(e.real(), 10);
		printf(" ");
		print(e.imag(), 10);
		printf("\n");
	}
	return 0;
}
```