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 rep(i,n) for(int i=0; i<(n); i++)
#define rep2(i,x,n) for(int i=x; i<(n); i++)
#define ALL(n) begin(n),end(n)
#define INF ((1<<30)-1)
#define LINF (1LL<<60)
#define EPS (1e-10)
typedef long long Int;
typedef pair<Int, Int> P;
struct cww{cww(){ios::sync_with_stdio(false);cin.tie(0);}}star;
int xp1,yp1,xp2,yp2;
int q;


int main()
{
    cin.tie(0);
    ios::sync_with_stdio(false);
    cin>>xp1>>yp1>>xp2>>yp2;
    cin>>q;
    auto va = P(xp2-xp1,yp2-yp1);
    for(int i=0; i<q; i++){
        int x,y; cin>>x>>y;
        auto vb=P(x-xp1,y-yp1);
        Int vab=va.first*vb.first+va.second*vb.second;
        Int vaa=va.first*va.first+va.second*va.second;
        pair<double,double> oh;
        oh.first=(double)va.first*vab/vaa;
        oh.second=(double)va.second*vab/vaa;
        double xans=oh.first+xp1/1.000000000;
        double yans=oh.second+yp1/1.000000000;
        cout<<fixed<<setprecision(10)<<(double)(xans*2.0-x/1.0)<<" "<<fixed<<setprecision(10)<<(double)(yans*2.0-y/1.0)<<endl;
    }


    return 0;
}