#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <set>
#include <math.h>
#include <tuple>
#include <string.h>
#include <map>
#include <iomanip>
#include <time.h>
using namespace std;
typedef long long ll;

double square(pair<int, int> p) {
    return p.first * p.first + p.second * p.second;
}

pair<int, int> add(pair<int, int> p, pair<int, int> q) {
    return make_pair(p.first + q.first, p.second + q.second);
}

double dot(pair<int, int> p, pair<int, int> q) {
    return p.first * q.first + p.second * q.second;
}

int main() {
    int x1, y1, x2, y2, q;
    cin >> x1 >> y1 >> x2 >> y2;
    pair<int, int> a = make_pair(x2 - x1, y2 - y1);

    cin >> q;
    while (q--) {
        int x, y;
        cin >> x >> y;

        pair<int, int> b = make_pair(x - x1, y - y1);
        double r = dot(a, b) / square(a);

        pair<double, double> c;
        c.first = x1 + r * (x2 - x1);
        c.second = y1 + r * (y2 - y1);

        double dx = x + (c.first - x) * 2, dy = y + (c.second - y) * 2;

        cout << setprecision(16) << dx << " " << dy << endl;


    }
}

### Prompt

Your task is to create a Cpp solution to the following 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

### Response

```cpp
#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
#include <set>
#include <math.h>
#include <tuple>
#include <string.h>
#include <map>
#include <iomanip>
#include <time.h>
using namespace std;
typedef long long ll;

double square(pair<int, int> p) {
    return p.first * p.first + p.second * p.second;
}

pair<int, int> add(pair<int, int> p, pair<int, int> q) {
    return make_pair(p.first + q.first, p.second + q.second);
}

double dot(pair<int, int> p, pair<int, int> q) {
    return p.first * q.first + p.second * q.second;
}

int main() {
    int x1, y1, x2, y2, q;
    cin >> x1 >> y1 >> x2 >> y2;
    pair<int, int> a = make_pair(x2 - x1, y2 - y1);

    cin >> q;
    while (q--) {
        int x, y;
        cin >> x >> y;

        pair<int, int> b = make_pair(x - x1, y - y1);
        double r = dot(a, b) / square(a);

        pair<double, double> c;
        c.first = x1 + r * (x2 - x1);
        c.second = y1 + r * (y2 - y1);

        double dx = x + (c.first - x) * 2, dy = y + (c.second - y) * 2;

        cout << setprecision(16) << dx << " " << dy << endl;


    }
}

```