#include<bits/stdc++.h>
#define EPS 1e-10
#define equals(a,b) (fabs((a)-(b)) < EPS)
#define rep(i,n) for(int i=0;i<n;++i)
typedef long long ll;
using namespace std;

struct Point {
    double x,y;
    Point(){}
    Point(double x, double y) : x(x),y(y){}
    Point operator+(Point p) {return Point(x+p.x, y+p.y);}
    Point operator-(Point p) {return Point(x-p.x, y-p.y);}
    Point operator*(double k) {return Point(x*k,y*k);}
    Point operator/(double k) {return Point(x/k,y/k);}
    double norm(){return x*x+y*y;}
    double abs(){sqrt(norm());}
    bool operator == (const Point &p) const {return equals(x,p.x)&&equals(y,p.y);}
};

typedef Point P;

struct Segment {
    P p1,p2;
    Segment(){}
    Segment(P p1, P p2): p1(p1),p2(p2){}
};
// 内積
double dot(P a, P b) {return a.x*b.x+a.y*b.y;}

// 射影
P project(Segment s, P p) {
    P base = s.p2-s.p1;
    double r = dot(p-s.p1,base)/base.norm();
    return s.p1+base*r;
}

// 反射
P reflect(Segment s, P p) {
    return p+((project(s,p)-p)*2.0);
}

int main() {
    double x1,x2,y1,y2;
    cin>>x1>>y1>>x2>>y2;
    Point p1(x1,y1); Point p2(x2,y2);
    Segment s(p1,p2);
    int q; cin>>q;
    rep(i,q) {
        double x0,y0;
        cin>>x0>>y0;
        P p0(x0,y0);
        P ans = reflect(s,p0);
        cout << fixed << setprecision(12);
        cout << ans.x << " " << ans.y << 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<bits/stdc++.h>
#define EPS 1e-10
#define equals(a,b) (fabs((a)-(b)) < EPS)
#define rep(i,n) for(int i=0;i<n;++i)
typedef long long ll;
using namespace std;

struct Point {
    double x,y;
    Point(){}
    Point(double x, double y) : x(x),y(y){}
    Point operator+(Point p) {return Point(x+p.x, y+p.y);}
    Point operator-(Point p) {return Point(x-p.x, y-p.y);}
    Point operator*(double k) {return Point(x*k,y*k);}
    Point operator/(double k) {return Point(x/k,y/k);}
    double norm(){return x*x+y*y;}
    double abs(){sqrt(norm());}
    bool operator == (const Point &p) const {return equals(x,p.x)&&equals(y,p.y);}
};

typedef Point P;

struct Segment {
    P p1,p2;
    Segment(){}
    Segment(P p1, P p2): p1(p1),p2(p2){}
};
// 内積
double dot(P a, P b) {return a.x*b.x+a.y*b.y;}

// 射影
P project(Segment s, P p) {
    P base = s.p2-s.p1;
    double r = dot(p-s.p1,base)/base.norm();
    return s.p1+base*r;
}

// 反射
P reflect(Segment s, P p) {
    return p+((project(s,p)-p)*2.0);
}

int main() {
    double x1,x2,y1,y2;
    cin>>x1>>y1>>x2>>y2;
    Point p1(x1,y1); Point p2(x2,y2);
    Segment s(p1,p2);
    int q; cin>>q;
    rep(i,q) {
        double x0,y0;
        cin>>x0>>y0;
        P p0(x0,y0);
        P ans = reflect(s,p0);
        cout << fixed << setprecision(12);
        cout << ans.x << " " << ans.y << endl;
    }
}

```