#include <bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int i=0; i<(n); i++)
#define ALL(n) begin(n),end(n)

double Naiseki(vector<double> x,vector<double> y){
    double ip=0;
    for(int i=0; i<x.size(); i++){
        ip+=x[i]*y[i];
    }
    return ip;
}

int main(){
    vector<double> A(2),B(2);
    int q;
    cin>>A[0]>>A[1]>>B[0]>>B[1];
    cin>>q;
    vector<vector<double>> P(q,vector<double>(2));
    REP(i,q){
        cin>>P[i][0]>>P[i][1];
    }

    vector<double> AB={B[0]-A[0],B[1]-A[1]};

    REP(i,q){
        vector<double> AP={P[i][0]-A[0],P[i][1]-A[1]};
        double AB_av_2=AB[0]*AB[0]+AB[1]*AB[1];

        vector<double> AM(2);
        AM[0]=(Naiseki(AB,AP)/AB_av_2)*AB[0];
        AM[1]=(Naiseki(AB,AP)/AB_av_2)*AB[1];

        vector<double> OM={AM[0]+A[0],AM[1]+A[1]};
        cout<<fixed<<setprecision(10)<<2*OM[0]-P[i][0]<<" "<<2*OM[1]-P[i][1]<<endl;
    }
}   


### Prompt

Generate 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 <bits/stdc++.h>
using namespace std;
#define REP(i,n) for(int i=0; i<(n); i++)
#define ALL(n) begin(n),end(n)

double Naiseki(vector<double> x,vector<double> y){
    double ip=0;
    for(int i=0; i<x.size(); i++){
        ip+=x[i]*y[i];
    }
    return ip;
}

int main(){
    vector<double> A(2),B(2);
    int q;
    cin>>A[0]>>A[1]>>B[0]>>B[1];
    cin>>q;
    vector<vector<double>> P(q,vector<double>(2));
    REP(i,q){
        cin>>P[i][0]>>P[i][1];
    }

    vector<double> AB={B[0]-A[0],B[1]-A[1]};

    REP(i,q){
        vector<double> AP={P[i][0]-A[0],P[i][1]-A[1]};
        double AB_av_2=AB[0]*AB[0]+AB[1]*AB[1];

        vector<double> AM(2);
        AM[0]=(Naiseki(AB,AP)/AB_av_2)*AB[0];
        AM[1]=(Naiseki(AB,AP)/AB_av_2)*AB[1];

        vector<double> OM={AM[0]+A[0],AM[1]+A[1]};
        cout<<fixed<<setprecision(10)<<2*OM[0]-P[i][0]<<" "<<2*OM[1]-P[i][1]<<endl;
    }
}   


```