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;

class P {
public:
    P(double _x, double _y): x(_x), y(_y) {}
    P(): x(0), y(0) {}
    double x;
    double y;
    P operator-(const P& p) const {
        P point;
        point.x = x - p.x;
        point.y = y - p.y;
        return point;
    }
    P operator+(const P& p) const {
        P point;
        point.x = x + p.x;
        point.y = y + p.y;
        return point;
    }
    P operator*(double k) const {
        P point;
        point.x = x * k;
        point.y = y * k;
        return point;
    }
    double dot(const P& p) const {
        return x * p.x + y * p.y;
    }
    double length() const {
        return sqrt(x * x + y * y);
    }
};

P projection(const P& p1, const P& p2, const P& p) {
    P v1 = p - p1;
    P v2 = p2 - p1;
    double t = v1.dot(v2) / v2.length() / v2.length();
    return v2 * t + p1;
}

P reflection(P p1, P p2, P p) {
    P p3 = projection(p1, p2, p);
    return p3 - p + p3;
}
int main() {
    P p1, p2;
    cin >> p1.x >> p1.y >> p2.x >> p2.y;
    int q;
    cin >> q;
    for (int i = 0; i < q; ++i) {
        P p;
        cin >> p.x >> p.y;
        p = reflection(p1, p2, p);
        cout << fixed << setprecision(15);
        cout << p.x << ' ' << p.y << endl;
    }
}