// Path: src/algorithms/datatypes/Point.java
// public final class Point {
//     public final int x;
//     public final int y;
//     
//     public Point(int x, int y) {
//         this.x = x;
//         this.y = y;
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + x;
//         result = prime * result + y;
//         return result;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         Point other = (Point) obj;
//         return x == other.x && y == other.y;
//     }
//     
//     @Override
//     public String toString() {
//         return "(" + x + "," + y + ")";
//     }
//     
// }


import algorithms.datatypes.Point;
package main.analysis;


public class TwoPoint {
    public final Point p1, p2;
    public TwoPoint (Point p1, Point p2) {
        this.p1 = p1; this.p2 = p2;
    }
    public TwoPoint (int x1, int y1, int x2, int y2) {
        this.p1 = new Point(x1,y1);
        this.p2 = new Point(x2,y2);
    }
    
    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof TwoPoint)) return false;
        TwoPoint other = (TwoPoint)obj;
        if (p1.equals(other.p1) && p2.equals(other.p2)) {
            return true;
        }
        if (p1.equals(other.p2) && p2.equals(other.p1)) {
            return true;
        }
        return false;
    }

// Path: src/algorithms/datatypes/Point.java
// public final class Point {
//     public final int x;
//     public final int y;
//     
//     public Point(int x, int y) {
//         this.x = x;
//         this.y = y;
//     }
// 
//     @Override
//     public int hashCode() {
//         final int prime = 31;
//         int result = 1;
//         result = prime * result + x;
//         result = prime * result + y;
//         return result;
//     }
// 
//     @Override
//     public boolean equals(Object obj) {
//         Point other = (Point) obj;
//         return x == other.x && y == other.y;
//     }
//     
//     @Override
//     public String toString() {
//         return "(" + x + "," + y + ")";
//     }
//     
// }


// Path: src/main/analysis/TwoPoint.java
import algorithms.datatypes.Point;

package main.analysis;


public class TwoPoint {
    public final Point p1, p2;
    public TwoPoint (Point p1, Point p2) {
        this.p1 = p1; this.p2 = p2;
    }
    public TwoPoint (int x1, int y1, int x2, int y2) {
        this.p1 = new Point(x1,y1);
        this.p2 = new Point(x2,y2);
    }
    
    @Override
    public boolean equals(Object obj) {
        if (!(obj instanceof TwoPoint)) return false;
        TwoPoint other = (TwoPoint)obj;
        if (p1.equals(other.p1) && p2.equals(other.p2)) {
            return true;
        }
        if (p1.equals(other.p2) && p2.equals(other.p1)) {
            return true;
        }
        return false;
    }

    @Override