#include<bits/stdc++.h>
#define maxn 100005
#define maxm 500005
#define inf 0x7fffffff
#define ll long long
#define ld long double
#define debug(x) cerr<<#x<<": "<<x<<endl
#define fgx cerr<<"--------------"<<endl
#define dgx cerr<<"=============="<<endl

using namespace std;
struct vc{
	ld x,y;
	vc operator*(const ld b){vc t;t.x=x*b,t.y=y*b;return t;}
};
struct pt{
	ld x,y;
	pt operator+(const vc b){pt t;t.x=x+b.x,t.y=y+b.y;return t;}
	vc operator-(const pt b){vc t;t.x=x-b.x,t.y=y-b.y;return t;}
};

inline int read(){
	int x=0,f=1; char c=getchar();
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) x=x*10+c-'0';
	return x*f;
}

inline ld cross(vc a,vc b){return a.x*b.y-a.y*b.x;}
inline pt get(){pt t;t.x=read(),t.y=read();return t;}
inline vc nl(vc a){vc b;b.x=-a.y,b.y=a.x;return b;}
inline pt glt(pt a,pt b,pt c,pt d){
	vc u=b-a,v=d-c,w=a-c;
	ld t=cross(v,w)/cross(u,v);
	return a+u*t;
}

int main(){
	pt p1=get(),p2=get();
	int Q=read();
	while(Q--){
		pt p=get(); vc a=p1-p2,b=nl(a);
		pt p0=p+b,res=glt(p1,p2,p,p0);
		vc t=res-p; pt ans=res+t;
		printf("%.10Lf %.10Lf\n",ans.x,ans.y);
	}
	return 0;
}


### Prompt

Construct a cpp code solution to the problem outlined:

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 maxn 100005
#define maxm 500005
#define inf 0x7fffffff
#define ll long long
#define ld long double
#define debug(x) cerr<<#x<<": "<<x<<endl
#define fgx cerr<<"--------------"<<endl
#define dgx cerr<<"=============="<<endl

using namespace std;
struct vc{
	ld x,y;
	vc operator*(const ld b){vc t;t.x=x*b,t.y=y*b;return t;}
};
struct pt{
	ld x,y;
	pt operator+(const vc b){pt t;t.x=x+b.x,t.y=y+b.y;return t;}
	vc operator-(const pt b){vc t;t.x=x-b.x,t.y=y-b.y;return t;}
};

inline int read(){
	int x=0,f=1; char c=getchar();
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) x=x*10+c-'0';
	return x*f;
}

inline ld cross(vc a,vc b){return a.x*b.y-a.y*b.x;}
inline pt get(){pt t;t.x=read(),t.y=read();return t;}
inline vc nl(vc a){vc b;b.x=-a.y,b.y=a.x;return b;}
inline pt glt(pt a,pt b,pt c,pt d){
	vc u=b-a,v=d-c,w=a-c;
	ld t=cross(v,w)/cross(u,v);
	return a+u*t;
}

int main(){
	pt p1=get(),p2=get();
	int Q=read();
	while(Q--){
		pt p=get(); vc a=p1-p2,b=nl(a);
		pt p0=p+b,res=glt(p1,p2,p,p0);
		vc t=res-p; pt ans=res+t;
		printf("%.10Lf %.10Lf\n",ans.x,ans.y);
	}
	return 0;
}


```