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

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
#include <iomanip>    

using namespace std;

struct Point
{
	int x;
	int y;
};
int dotProduct(Point a, Point b)
{
	return a.x*b.x+a.y*b.y;
}
int lengthSquared(Point a)
{
	return pow(a.x,2)+pow(a.y,2); 
}
int main()
{ 
	int q; 
	int p1x,p1y,p2x,p2y;
	int q1x,q1y;
	cin>>p1x>>p1y>>p2x>>p2y;
	cin>>q;
	struct Point p = {p2x-p1x, p2y-p1y};

	for(int i=0;i<q;i++)
	{
		cin>>q1x>>q1y;
		struct Point q = {q1x-p1x, q1y-p1y};
		double val;
		if(lengthSquared(p)==0) val = 0.0f;
		else val = double(dotProduct(p,q))/double(lengthSquared(p));
		double x = val*p.x;
		double y = val*p.y;
		if(x==0) x=0.0f;
		if(y==0) y=0.0f;
		double x2 = -1*(q.x-x), y2 = -1*(q.y-y);
		cout<<fixed<<setprecision(10)<<x2+x+p1x<<" "<<y2+y+p1y<<endl;

		
	}
}