#include <iostream>
using namespace std;
int position(double x ,double y, double windows[]){
if(x<windows[0]){
if( y<windows[1] )
return 5;
else if( y>=windows[1] && y<=windows[3])
return 4;
else if( y>windows[3] )
return 3;
}
else if(x>=windows[0] && x<=windows[2] ){
if( y<windows[1] )
return 2;
else if( y>=windows[1] && y<=windows[3])
return 0;
else if( y>windows[3] )
return 1;
}
else if(x>windows[2]){
if( y<windows[1] )
return 8;
else if( y>=windows[1] && y<=windows[3])
return 7;
else if( y>windows[3] )
return 6;
}
return -1;
}
int main() {
double xl=0, yd=0, xr=0, yu=0;
cin>>xl>>yd>>xr>>yu;
double windows[4] = {xl, yd, xr, yu};
int m;
cin>>m;
for(int i=1;i<=m;i++){
double x1, y1, x2, y2;
//第一步,排除性测试
if( x1<xl && x2<xl )
{ cout<<"null"; break; }
else if ( x1>xr && x2>xr )
{ cout<<"null"; break; }
else if ( y1<yd && y2<yd )
{ cout<<"null"; break; }
else if ( y1>yu && y2>yu )
{ cout<<"null"; break; }
//第二步,判断线段是否完全在区域内
int pos1 = position(x1,y1,windows);
int pos2 = position(x2,y2,windows);
if (pos1 == 0 && pos2 == 0)
{cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2; break;}
//第三步,若A点在xl左侧,将A一侧裁减掉
if( x1<xl ){
double y;
y1 == y2 ? y = y1 : y = y1 + (xl-x1)*(y2-y1)/(x2-x1);
if ( y>=yd && y<=yu)
{ x1 = xl; y1 = y;}
else if (pos1 == 4)
{ cout<<"null"; break; }
else if (pos1 == 5){
double x = x1 +(yd-y1)*(x2-x1)/(y2-y1);
if ( x<=xr && x>=xl)
{ x1 = x; y1 = yd;}
else
{ cout<<"null"; break; }
}
else if (pos1 == 3){
double x = x1 +(yu-y1)*(x2-x1)/(y2-y1);
if ( x<=xr && x>=xl)
{ x1 = x; y1 = yu;}
else
{ cout<<"null"; break; }
}
}
pos1 = position(x1,y1,windows);
pos2 = position(x2,y2,windows);
if (pos1 == 0 && pos2 == 0)
{cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2; break;}
//第四步,若B点在xr右侧,将B一侧裁减掉
if( x2>xr ){
double y;
y1 == y2 ? y = y1 : y = y1 + (xr-x1)*(y2-y1)/(x2-x1);
if ( y>=yd && y<=yu)
{ x2 = xr; y2 = y;}
else if (pos2 == 7)
{ cout<<"null"; break; }
else if (pos1 == 8){
double x = x1 +(yd-y1)*(x2-x1)/(y2-y1);
if ( x<=xr && x>=xl)
{ x2 = x; y2 = yd;}
else
{ cout<<"null"; break; }
}
else if (pos1 == 6){
double x = x1 +(yu-y1)*(x2-x1)/(y2-y1);
if ( x<=xr && x>=xl)
{ x2 = x; y2 = yu;}
else
{ cout<<"null"; break; }
}
}
pos1 = position(x1,y1,windows);
pos2 = position(x2,y2,windows);
if (pos1 == 0 && pos2 == 0)
{cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2; break;};
//第五步,减去两端之后,如果还没有完成,说明两个点都在中间0,1,2,里面:
if(y1>=yu){
double x ;
x1 == x2 ? x = x1 :x = x1 +(yu-y1)*(x2-x1)/(y2-y1);
x1 = x; y1 = yu;
};
if(y1<=yd){
double x ;
x1 == x2 ? x = x1 :x = x1 +(yd-y1)*(x2-x1)/(y2-y1);
x1 = x; y1 = yd;
};
if(y2>=yu){
double x ;
x1 == x2 ? x = x1 :x = x1 +(yu-y1)*(x2-x1)/(y2-y1);
x1 = x; y2 = yu;
};
if(y2<=yd){
double x ;
x1 == x2 ? x = x1 :x = x1 +(yd-y1)*(x2-x1)/(y2-y1);
x1 = x; y2 = yd;
};
pos1 = position(x1,y1,windows);
pos2 = position(x2,y2,windows);
if (pos1 == 0 && pos2 == 0)
{cout<<x1<<" "<<y1<<" "<<x2<<" "<<y2; break;}
cout<<"Fail";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IHBvc2l0aW9uKGRvdWJsZSB4ICxkb3VibGUgeSwgZG91YmxlIHdpbmRvd3NbXSl7CiAgICBpZih4PHdpbmRvd3NbMF0pewogICAgICAgIGlmKCB5PHdpbmRvd3NbMV0gKQogICAgICAgICAgICByZXR1cm4gNTsKICAgICAgICBlbHNlIGlmKCB5Pj13aW5kb3dzWzFdICYmIHk8PXdpbmRvd3NbM10pCiAgICAgICAgICAgIHJldHVybiA0OwogICAgICAgIGVsc2UgaWYoIHk+d2luZG93c1szXSApCiAgICAgICAgICAgIHJldHVybiAzOwogICAgfQogICAgZWxzZSBpZih4Pj13aW5kb3dzWzBdICYmIHg8PXdpbmRvd3NbMl0gKXsKICAgICAgICBpZiggeTx3aW5kb3dzWzFdICkKICAgICAgICAgICAgcmV0dXJuIDI7CiAgICAgICAgZWxzZSBpZiggeT49d2luZG93c1sxXSAmJiB5PD13aW5kb3dzWzNdKQogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICBlbHNlIGlmKCB5PndpbmRvd3NbM10gKQogICAgICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGVsc2UgaWYoeD53aW5kb3dzWzJdKXsKICAgICAgICBpZiggeTx3aW5kb3dzWzFdICkKICAgICAgICAgICAgcmV0dXJuIDg7CiAgICAgICAgZWxzZSBpZiggeT49d2luZG93c1sxXSAmJiB5PD13aW5kb3dzWzNdKQogICAgICAgICAgICByZXR1cm4gNzsKICAgICAgICBlbHNlIGlmKCB5PndpbmRvd3NbM10gKQogICAgICAgICAgICByZXR1cm4gNjsKICAgIH0KICAgIHJldHVybiAtMTsKfQoKaW50IG1haW4oKSB7CiAgICBkb3VibGUgeGw9MCwgeWQ9MCwgeHI9MCwgeXU9MDsKICAgIGNpbj4+eGw+PnlkPj54cj4+eXU7CiAgICBkb3VibGUgd2luZG93c1s0XSA9IHt4bCwgeWQsIHhyLCB5dX07CiAgICBpbnQgbTsKICAgIGNpbj4+bTsKICAgIGZvcihpbnQgaT0xO2k8PW07aSsrKXsKICAgICAgICBkb3VibGUgeDEsIHkxLCB4MiwgeTI7CiAgICAvL+esrOS4gOatpe+8jOaOkumZpOaAp+a1i+ivlQogICAgICAgIGlmKCB4MTx4bCAmJiB4Mjx4bCApCiAgICAgICAgICAgIHsgY291dDw8Im51bGwiOyAgIGJyZWFrOyB9CiAgICAgICAgZWxzZSBpZiAoIHgxPnhyICYmIHgyPnhyICkKICAgICAgICAgICAgeyBjb3V0PDwibnVsbCI7ICAgYnJlYWs7IH0KICAgICAgICBlbHNlIGlmICggeTE8eWQgJiYgeTI8eWQgKQogICAgICAgICAgICB7IGNvdXQ8PCJudWxsIjsgICBicmVhazsgfQogICAgICAgIGVsc2UgaWYgKCB5MT55dSAmJiB5Mj55dSApCiAgICAgICAgICAgIHsgY291dDw8Im51bGwiOyAgIGJyZWFrOyB9CiAgICAvL+esrOS6jOatpe+8jOWIpOaWree6v+auteaYr+WQpuWujOWFqOWcqOWMuuWfn+WGhQogICAgICAgIGludCBwb3MxID0gcG9zaXRpb24oeDEseTEsd2luZG93cyk7CiAgICAgICAgaW50IHBvczIgPSBwb3NpdGlvbih4Mix5Mix3aW5kb3dzKTsKICAgICAgICBpZiAocG9zMSA9PSAwICYmIHBvczIgPT0gMCkKICAgICAgICAgICAge2NvdXQ8PHgxPDwiICI8PHkxPDwiICI8PHgyPDwiICI8PHkyOyBicmVhazt9CiAgICAvL+esrOS4ieatpe+8jOiLpUHngrnlnKh4bOW3puS+pyzlsIZB5LiA5L6n6KOB5YeP5o6JCiAgICAgICAgaWYoIHgxPHhsICl7CiAgICAgICAgICAgIGRvdWJsZSB5OwogICAgICAgICAgICB5MSA9PSB5MiA/IHkgPSB5MSA6IHkgPSB5MSArICh4bC14MSkqKHkyLXkxKS8oeDIteDEpOwogICAgICAgICAgICBpZiAoIHk+PXlkICYmIHk8PXl1KQogICAgICAgICAgICAgICAgeyB4MSA9IHhsOyB5MSA9IHk7fQogICAgICAgICAgICBlbHNlIGlmIChwb3MxID09IDQpCiAgICAgICAgICAgICAgICB7IGNvdXQ8PCJudWxsIjsgICBicmVhazsgfQogICAgICAgICAgICBlbHNlIGlmIChwb3MxID09IDUpewogICAgICAgICAgICAgICAgZG91YmxlIHggPSB4MSArKHlkLXkxKSooeDIteDEpLyh5Mi15MSk7CiAgICAgICAgICAgICAgICBpZiAoIHg8PXhyICYmIHg+PXhsKQogICAgICAgICAgICAgICAgICAgIHsgeDEgPSB4OyB5MSA9IHlkO30KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7IGNvdXQ8PCJudWxsIjsgICBicmVhazsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHBvczEgPT0gMyl7CiAgICAgICAgICAgICAgICBkb3VibGUgeCA9IHgxICsoeXUteTEpKih4Mi14MSkvKHkyLXkxKTsKICAgICAgICAgICAgICAgIGlmICggeDw9eHIgJiYgeD49eGwpCiAgICAgICAgICAgICAgICAgICAgeyB4MSA9IHg7IHkxID0geXU7fQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsgY291dDw8Im51bGwiOyAgIGJyZWFrOyB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcG9zMSA9IHBvc2l0aW9uKHgxLHkxLHdpbmRvd3MpOwogICAgICAgIHBvczIgPSBwb3NpdGlvbih4Mix5Mix3aW5kb3dzKTsKICAgICAgICBpZiAocG9zMSA9PSAwICYmIHBvczIgPT0gMCkKICAgICAgICAgICAge2NvdXQ8PHgxPDwiICI8PHkxPDwiICI8PHgyPDwiICI8PHkyOyBicmVhazt9CiAgICAvL+esrOWbm+atpe+8jOiLpULngrnlnKh4cuWPs+S+pyzlsIZC5LiA5L6n6KOB5YeP5o6JCiAgICAgICAgaWYoIHgyPnhyICl7CiAgICAgICAgICAgIGRvdWJsZSB5OwogICAgICAgICAgICB5MSA9PSB5MiA/IHkgPSB5MSA6IHkgPSB5MSArICh4ci14MSkqKHkyLXkxKS8oeDIteDEpOwogICAgICAgICAgICBpZiAoIHk+PXlkICYmIHk8PXl1KQogICAgICAgICAgICAgICAgeyB4MiA9IHhyOyB5MiA9IHk7fQogICAgICAgICAgICBlbHNlIGlmIChwb3MyID09IDcpCiAgICAgICAgICAgICAgICB7IGNvdXQ8PCJudWxsIjsgICBicmVhazsgfQogICAgICAgICAgICBlbHNlIGlmIChwb3MxID09IDgpewogICAgICAgICAgICAgICAgZG91YmxlIHggPSB4MSArKHlkLXkxKSooeDIteDEpLyh5Mi15MSk7CiAgICAgICAgICAgICAgICBpZiAoIHg8PXhyICYmIHg+PXhsKQogICAgICAgICAgICAgICAgICAgIHsgeDIgPSB4OyB5MiA9IHlkO30KICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7IGNvdXQ8PCJudWxsIjsgICBicmVhazsgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHBvczEgPT0gNil7CiAgICAgICAgICAgICAgICBkb3VibGUgeCA9IHgxICsoeXUteTEpKih4Mi14MSkvKHkyLXkxKTsKICAgICAgICAgICAgICAgIGlmICggeDw9eHIgJiYgeD49eGwpCiAgICAgICAgICAgICAgICAgICAgeyB4MiA9IHg7IHkyID0geXU7fQogICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsgY291dDw8Im51bGwiOyAgIGJyZWFrOyB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcG9zMSA9IHBvc2l0aW9uKHgxLHkxLHdpbmRvd3MpOwogICAgICAgIHBvczIgPSBwb3NpdGlvbih4Mix5Mix3aW5kb3dzKTsKICAgICAgICBpZiAocG9zMSA9PSAwICYmIHBvczIgPT0gMCkKICAgICAgICAgICAge2NvdXQ8PHgxPDwiICI8PHkxPDwiICI8PHgyPDwiICI8PHkyOyBicmVhazt9OwogICAgLy/nrKzkupTmraXvvIzlh4/ljrvkuKTnq6/kuYvlkI7vvIzlpoLmnpzov5jmsqHmnInlrozmiJAs6K+05piO5Lik5Liq54K56YO95Zyo5Lit6Ze0MCwxLDIs6YeM6Z2i77yaCiAgICAgICAgaWYoeTE+PXl1KXsKICAgICAgICAgICAgZG91YmxlIHggOwogICAgICAgICAgICB4MSA9PSB4MiA/IHggPSB4MSA6eCA9IHgxICsoeXUteTEpKih4Mi14MSkvKHkyLXkxKTsKICAgICAgICAgICAgeDEgPSB4OyB5MSA9IHl1OwogICAgICAgIH07CiAgICAgICAgaWYoeTE8PXlkKXsKICAgICAgICAgICAgZG91YmxlIHggOwogICAgICAgICAgICB4MSA9PSB4MiA/IHggPSB4MSA6eCA9IHgxICsoeWQteTEpKih4Mi14MSkvKHkyLXkxKTsKICAgICAgICAgICAgeDEgPSB4OyB5MSA9IHlkOwogICAgICAgIH07CiAgICAgICAgaWYoeTI+PXl1KXsKICAgICAgICAgICAgZG91YmxlIHggOwogICAgICAgICAgICB4MSA9PSB4MiA/IHggPSB4MSA6eCA9IHgxICsoeXUteTEpKih4Mi14MSkvKHkyLXkxKTsKICAgICAgICAgICAgeDEgPSB4OyB5MiA9IHl1OwogICAgICAgIH07CiAgICAgICAgaWYoeTI8PXlkKXsKICAgICAgICAgICAgZG91YmxlIHggOwogICAgICAgICAgICB4MSA9PSB4MiA/IHggPSB4MSA6eCA9IHgxICsoeWQteTEpKih4Mi14MSkvKHkyLXkxKTsKICAgICAgICAgICAgeDEgPSB4OyB5MiA9IHlkOwogICAgICAgIH07CiAgICAgICAgcG9zMSA9IHBvc2l0aW9uKHgxLHkxLHdpbmRvd3MpOwogICAgICAgIHBvczIgPSBwb3NpdGlvbih4Mix5Mix3aW5kb3dzKTsKICAgICAgICBpZiAocG9zMSA9PSAwICYmIHBvczIgPT0gMCkKICAgICAgICAgICAge2NvdXQ8PHgxPDwiICI8PHkxPDwiICI8PHgyPDwiICI8PHkyOyBicmVhazt9CiAgICAgICAgY291dDw8IkZhaWwiOwogICAgfQoJcmV0dXJuIDA7Cn0=