#include<bits/stdc++.h>
using namespace std;

#define EPS (1e-10)
#define equals(a,b) (fabs( (a)-(b) ) < EPS)

class Point{

public:
  double x,y;
  
  Point(double x=0,double y=0): 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 a) { return Point(a*x,a*y); }
  Point operator / (double a) { return Point(x/a,y/a); }

  double abs() { return sqrt(norm()); }
  double norm() { return x*x + y*y; }
  
  bool operator < (const Point &p) const{
    return x != p.x ? x<p.x : y<p.y;
  }
  
  bool operator == (const Point &p) const{
    return fabs(x-p.x) < EPS && fabs(y-p.y) < EPS;
  }
  
};
typedef Point Vector;

double dot(Vector a,Vector b){
  return a.x*b.x + a.y*b.y;
}

double cross(Vector a,Vector b){
  return a.x*b.y - a.y*b.x;
}

Point project(Point p1,Point p2,Point p){
  Vector base = p2-p1;
  double r = dot(p-p1,base) / base.norm();
  return p1 + base * r;
}

int main(){
  int q;
  double x1,y1,x2,y2,x,y;
  Point p1,p2,p,pro,sa;
  
  scanf("%lf %lf %lf %lf %d",&x1,&y1,&x2,&y2,&q);
  p1 = Point(x1,y1);
  p2 = Point(x2,y2);
  
  while(q--){
    scanf("%lf %lf",&x,&y);
    p = Point(x,y);
    pro = project(p1,p2,p);
    sa = pro-p;
    pro = pro+sa;
    printf("%.10lf %.10lf\n",pro.x,pro.y);
  }

  return(0);
}


### 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>
using namespace std;

#define EPS (1e-10)
#define equals(a,b) (fabs( (a)-(b) ) < EPS)

class Point{

public:
  double x,y;
  
  Point(double x=0,double y=0): 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 a) { return Point(a*x,a*y); }
  Point operator / (double a) { return Point(x/a,y/a); }

  double abs() { return sqrt(norm()); }
  double norm() { return x*x + y*y; }
  
  bool operator < (const Point &p) const{
    return x != p.x ? x<p.x : y<p.y;
  }
  
  bool operator == (const Point &p) const{
    return fabs(x-p.x) < EPS && fabs(y-p.y) < EPS;
  }
  
};
typedef Point Vector;

double dot(Vector a,Vector b){
  return a.x*b.x + a.y*b.y;
}

double cross(Vector a,Vector b){
  return a.x*b.y - a.y*b.x;
}

Point project(Point p1,Point p2,Point p){
  Vector base = p2-p1;
  double r = dot(p-p1,base) / base.norm();
  return p1 + base * r;
}

int main(){
  int q;
  double x1,y1,x2,y2,x,y;
  Point p1,p2,p,pro,sa;
  
  scanf("%lf %lf %lf %lf %d",&x1,&y1,&x2,&y2,&q);
  p1 = Point(x1,y1);
  p2 = Point(x2,y2);
  
  while(q--){
    scanf("%lf %lf",&x,&y);
    p = Point(x,y);
    pro = project(p1,p2,p);
    sa = pro-p;
    pro = pro+sa;
    printf("%.10lf %.10lf\n",pro.x,pro.y);
  }

  return(0);
}


```