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>
using namespace std;

#define db double

struct Poi {
	db x, y;
	void r() { cin >> x; cin >> y; }
	void w() { cout << x << ' ' << y << '\n'; }
	Poi operator -(Poi p) {
		return {x - p.x, y - p.y};
	}
	Poi operator +(Poi p) {
		return {x + p.x, y + p.y};
	}
	Poi operator *(db d) {
		return {x * d, y * d};
	}
	db dot(Poi p) {
		return x * p.x + y * p.y;
	}
	db len2() { return x * x + y * y; }
	Poi proj(Poi p, Poi q) {
		db s = (*this - p).dot(q - p) / (q - p).len2();
		return p + (q - p) * s;
	}
};

int main() {
	ios :: sync_with_stdio(false);
	cout << fixed << setprecision(12);

	Poi p, q; p.r(); q.r();
	int T; cin >> T;
	while(T --) {
		Poi t; t.r();
		(t.proj(p, q) * 2 - t).w();
	}
	return 0;
}