import java.io.*;
import java.util.*;

public class trenches_mb_angle {
    static class Point {
        int x, y;

        Point(int xx, int yy) {
            x = xx;
            y = yy;
        }

        public String toString() {
            return String.format("(%d, %d)", x, y);
        }
    }

    static boolean test(Point s0, Point e0, Point s1, Point e1, long a, long b, long c) {
        long sv0 = a * s0.x + b * s0.y + c;
        long ev0 = a * e0.x + b * e0.y + c;
        long sv1 = a * s1.x + b * s1.y + c;
        long ev1 = a * e1.x + b * e1.y + c;
        return (sv0 != 0) && (sv1 != 0) && (ev0 != 0) && (ev1 != 0) && 
               ((sv0 < 0) == (ev0 < 0)) && 
               ((sv1 < 0) == (ev1 < 0)) &&
               ((sv0 < 0) != (sv1 < 0));
    }

    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new FileReader("trenches.in"));
        PrintWriter out = new PrintWriter("trenches.out");
loop:   while (true) {
            StringTokenizer st0 = new StringTokenizer(in.readLine());
            StringTokenizer st1 = new StringTokenizer(in.readLine());

            Point s0 = new Point(Integer.parseInt(st0.nextToken()), Integer.parseInt(st0.nextToken()));
            Point e0 = new Point(Integer.parseInt(st0.nextToken()), Integer.parseInt(st0.nextToken()));
            Point s1 = new Point(Integer.parseInt(st1.nextToken()), Integer.parseInt(st1.nextToken()));
            Point e1 = new Point(Integer.parseInt(st1.nextToken()), Integer.parseInt(st1.nextToken()));

            if (s0.toString().equals(s1.toString())) {
                break;
            }

            in.readLine();

            int n = 1000;
            double step = Math.PI / n;
            double cur = 0;

            for (int i = 0; i <= n; i++, cur += step) {
                int a = (int) (10000 * Math.sin(cur));
                int b = (int) (-10000 * Math.cos(cur));
                int cs0 = -(a * s0.x + b * s0.y);
                int ce0 = -(a * e0.x + b * e0.y);
                int cs1 = -(a * s1.x + b * s1.y);
                int ce1 = -(a * e1.x + b * e1.y);
                int max0 = Math.max(cs0, ce0);
                int min0 = Math.min(cs0, ce0);
                int max1 = Math.max(cs1, ce1);
                int min1 = Math.min(cs1, ce1);
                if (max0 + 1 < min1) {
                    int c = (max0 + min1) / 2;
                    if (test(s0, e0, s1, e1, a, b, c)) {
                        out.println(a + " " + b + " " + c);
                        continue loop;
                    }    
                } 
                if (max1 + 1 < min0) {
                    int c = (max1 + min0) / 2;
                    if (test(s0, e0, s1, e1, a, b, c)) {
                        out.println(a + " " + b + " " + c);
                        continue loop;
                    }    
                }
            }

            {
                int a = 2 * (s0.y - e0.y);
                int b = 2 * (e0.x - s0.x);
                int cs0 = -(a * s0.x + b * s0.y);
                int ce0 = -(a * e0.x + b * e0.y);
                int cs1 = -(a * s1.x + b * s1.y);
                int ce1 = -(a * e1.x + b * e1.y);
                int max0 = Math.max(cs0, ce0);
                int min0 = Math.min(cs0, ce0);
                int max1 = Math.max(cs1, ce1);
                int min1 = Math.min(cs1, ce1);
                if (max0 + 1 < min1) {
                    int c = (max0 + min1) / 2;
                    if (test(s0, e0, s1, e1, a, b, c)) {
                        out.println(a + " " + b + " " + c);
                        continue loop;
                    }    
                } 
                if (max1 + 1 < min0) {
                    int c = (max1 + min0) / 2;
                    if (test(s0, e0, s1, e1, a, b, c)) {
                        out.println(a + " " + b + " " + c);
                        continue loop;
                    }    
                }
            }
            {
                int a = 2 * (s1.y - e1.y);
                int b = 2 * (e1.x - s1.x);
                int cs0 = -(a * s0.x + b * s0.y);
                int ce0 = -(a * e0.x + b * e0.y);
                int cs1 = -(a * s1.x + b * s1.y);
                int ce1 = -(a * e1.x + b * e1.y);
                int max0 = Math.max(cs0, ce0);
                int min0 = Math.min(cs0, ce0);
                int max1 = Math.max(cs1, ce1);
                int min1 = Math.min(cs1, ce1);
                if (max0 + 1 < min1) {
                    int c = (max0 + min1) / 2;
                    if (test(s0, e0, s1, e1, a, b, c)) {
                        out.println(a + " " + b + " " + c);
                        continue loop;
                    }    
                } 
                if (max1 + 1 < min0) {
                    int c = (max1 + min0) / 2;
                    if (test(s0, e0, s1, e1, a, b, c)) {
                        out.println(a + " " + b + " " + c);
                        continue loop;
                    }    
                }
            }
            throw new RuntimeException("not found");
        }        
        in.close();
        out.close();
    }
}