#include<bits/stdc++.h>
using namespace std;
struct dot{
	double x,y;
	double len(){return sqrt(x*x+y*y);}
	dot(double a=0.0,double b=0.0){x=a,y=b;}
	dot operator +(const dot&b)const {return dot(x+b.x,y+b.y);}
	dot operator -(const dot&b)const {return dot(x-b.x,y-b.y);}
	dot operator *(const double&z)const {return dot(x*z,y*z);}
	bool operator <(const dot&b)const {return (x<b.x)||(x==b.x&&y<b.y);}
};
struct line{
	dot x1,x2;
};
double chaji(dot x,dot y){
	return x.x*y.y-x.y*y.x;
}
double neiji(dot x,dot y){
	return x.x*y.x+x.y*y.y;
}
double cos(dot x,dot y){
	if (!x.len()||!y.len())return 0;
	return neiji(x,y)/x.len()/y.len();
}
dot Projection(dot x,line y){//求x关于直线y的投影点（垂足） 
	y.x2=y.x2-y.x1;
	x=x-y.x1;
	double len=cos(x,y.x2)*x.len()/y.x2.len();
	y.x2=y.x2*len;
	return y.x2+y.x1;
}
dot Reflection(dot x,line y){
	dot z=Projection(x,y);
	return z*2-x;
}
int main(){
	line x;int T;
	scanf("%lf%lf%lf%lf",&x.x1.x,&x.x1.y,&x.x2.x,&x.x2.y);
	scanf("%d",&T);
	while (T--){
		dot y;
		scanf("%lf%lf",&y.x,&y.y);
		dot ans=Reflection(y,x);
		printf("%.10lf %.10lf\n",ans.x,ans.y);
	}
	return 0;
}

