#include<bits/stdc++.h>
#define maxn 100005
#define maxm 500005
#define inf 0x7fffffff
#define ll long long
#define ld long double
#define debug(x) cerr<<#x<<": "<<x<<endl
#define fgx cerr<<"--------------"<<endl
#define dgx cerr<<"=============="<<endl

using namespace std;
struct vc{
	ld x,y;
	vc operator*(const ld b){vc t;t.x=x*b,t.y=y*b;return t;}
};
struct pt{
	ld x,y;
	pt operator+(const vc b){pt t;t.x=x+b.x,t.y=y+b.y;return t;}
	vc operator-(const pt b){vc t;t.x=x-b.x,t.y=y-b.y;return t;}
};

inline int read(){
	int x=0,f=1; char c=getchar();
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) x=x*10+c-'0';
	return x*f;
}

inline ld cross(vc a,vc b){return a.x*b.y-a.y*b.x;}
inline pt get(){pt t;t.x=read(),t.y=read();return t;}
inline vc nl(vc a){vc b;b.x=-a.y,b.y=a.x;return b;}
inline pt glt(pt a,pt b,pt c,pt d){
	vc u=b-a,v=d-c,w=a-c;
	ld t=cross(v,w)/cross(u,v);
	return a+u*t;
}

int main(){
	pt p1=get(),p2=get();
	int Q=read();
	while(Q--){
		pt p=get(); vc a=p1-p2,b=nl(a);
		pt p0=p+b,res=glt(p1,p2,p,p0);
		printf("%.10Lf %.10Lf\n",res.x,res.y);
	}
	return 0;
}

