#include <bits/stdc++.h>
using namespace std;
typedef double db;
struct Point
{
double x, y;
};
struct Quadrilateral
{
struct Point a, b, c, d;
};
void Which_Quad(Quadrilateral q); // determine quad type
db det_side(Point p, Point q); // determine side length
db det_slope(db x1, db y1, db x2, db y2, db x3, db y3); // determine slope
int main()
{
Quadrilateral q;
scanf("%lf%lf", &q.a.x, &q.a.y);
scanf("%lf%lf", &q.b.x, &q.b.y);
scanf("%lf%lf", &q.c.x, &q.c.y);
scanf("%lf%lf", &q.d.x, &q.d.y);
Which_Quad(q);
return 0;
}
void Which_Quad(Quadrilateral q)
{
db side1 = det_side(q.a, q.b);
db side2 = det_side(q.b, q.c);
// cout<<q.b.x<<" "<<q.b.y<<" "<<q.c.x<<" "<<q.c.y<<" "<<side2<<" "<<endl;
db side3 = det_side(q.c, q.d);
db side4 = det_side(q.d, q.a);
if (side1 == side2 and side2 == side3 and side3 == side4 and side4 == side1)
{
if (det_slope(q.a.x, q.a.y, q.b.x, q.b.y, q.d.x, q.d.y) == -1)
{
printf("Square\n");
return;
}
else
{
printf("Rhombus\n");
return;
}
}
else if (side1 == side3 and side2 == side4)
{
if (det_slope(q.a.x, q.a.y, q.b.x, q.b.y, q.d.x, q.d.y) == -1)
{
printf("Rectangular\n");
return;
}
else
{
printf("Parallelogram\n");
return;
}
}
else
{
printf("Other\n");
return;
}
}
db det_side(Point p, Point q)
{
db side;
side = sqrt(((p.x - q.x) * (p.x - q.x)) + ((p.y - q.y) * (p.y - q.y)));
// cout<<side<<endl;
return side;
}
db det_slope(db x1, db y1, db x2, db y2, db x3, db y3)
{
if (((y2 - y1) == 0 and (x3 - x1) == 0) or ((x2 - x1) == 0 and (y3 - y1) == 0))
{
return -1;
}
else
{
db slope = (((y2 - y1) * (y3 - y2)) / ((x2 - x1) * (x3 - x2)));
return slope;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGRvdWJsZSBkYjsKCnN0cnVjdCBQb2ludAp7CiAgICBkb3VibGUgeCwgeTsKfTsKCnN0cnVjdCBRdWFkcmlsYXRlcmFsCnsKICAgIHN0cnVjdCBQb2ludCBhLCBiLCBjLCBkOwp9OwoKdm9pZCBXaGljaF9RdWFkKFF1YWRyaWxhdGVyYWwgcSk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmUgcXVhZCB0eXBlCmRiIGRldF9zaWRlKFBvaW50IHAsIFBvaW50IHEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGV0ZXJtaW5lIHNpZGUgbGVuZ3RoCmRiIGRldF9zbG9wZShkYiB4MSwgZGIgeTEsIGRiIHgyLCBkYiB5MiwgZGIgeDMsIGRiIHkzKTsgLy8gZGV0ZXJtaW5lIHNsb3BlCgppbnQgbWFpbigpCnsKICAgIFF1YWRyaWxhdGVyYWwgcTsKICAgIHNjYW5mKCIlbGYlbGYiLCAmcS5hLngsICZxLmEueSk7ICAgCiAgICBzY2FuZigiJWxmJWxmIiwgJnEuYi54LCAmcS5iLnkpOwogICAgc2NhbmYoIiVsZiVsZiIsICZxLmMueCwgJnEuYy55KTsgICAKICAgIHNjYW5mKCIlbGYlbGYiLCAmcS5kLngsICZxLmQueSk7CiAgCiAgICBXaGljaF9RdWFkKHEpOwoKICAgIHJldHVybiAwOwp9Cgp2b2lkIFdoaWNoX1F1YWQoUXVhZHJpbGF0ZXJhbCBxKQp7CiAgICBkYiBzaWRlMSA9IGRldF9zaWRlKHEuYSwgcS5iKTsKICAgIGRiIHNpZGUyID0gZGV0X3NpZGUocS5iLCBxLmMpOwogICAgLy8gY291dDw8cS5iLng8PCIgIjw8cS5iLnk8PCIgIjw8cS5jLng8PCIgIjw8cS5jLnk8PCIgIjw8c2lkZTI8PCIgIjw8ZW5kbDsKICAgIGRiIHNpZGUzID0gZGV0X3NpZGUocS5jLCBxLmQpOwogICAgZGIgc2lkZTQgPSBkZXRfc2lkZShxLmQsIHEuYSk7CgogICAgaWYgKHNpZGUxID09IHNpZGUyIGFuZCBzaWRlMiA9PSBzaWRlMyBhbmQgc2lkZTMgPT0gc2lkZTQgYW5kIHNpZGU0ID09IHNpZGUxKQogICAgewogICAgICAgIGlmIChkZXRfc2xvcGUocS5hLngsIHEuYS55LCBxLmIueCwgcS5iLnksIHEuZC54LCBxLmQueSkgPT0gLTEpCiAgICAgICAgewogICAgICAgICAgICBwcmludGYoIlNxdWFyZVxuIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJSaG9tYnVzXG4iKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKHNpZGUxID09IHNpZGUzIGFuZCBzaWRlMiA9PSBzaWRlNCkKICAgIHsKICAgICAgICBpZiAoZGV0X3Nsb3BlKHEuYS54LCBxLmEueSwgcS5iLngsIHEuYi55LCBxLmQueCwgcS5kLnkpID09IC0xKQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJSZWN0YW5ndWxhclxuIik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcHJpbnRmKCJQYXJhbGxlbG9ncmFtXG4iKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBwcmludGYoIk90aGVyXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9Cn0KCmRiIGRldF9zaWRlKFBvaW50IHAsIFBvaW50IHEpCnsKICAgIGRiIHNpZGU7CiAgICBzaWRlID0gc3FydCgoKHAueCAtIHEueCkgKiAocC54IC0gcS54KSkgKyAoKHAueSAtIHEueSkgKiAocC55IC0gcS55KSkpOwogICAgLy8gY291dDw8c2lkZTw8ZW5kbDsKICAgIHJldHVybiBzaWRlOwp9CgpkYiBkZXRfc2xvcGUoZGIgeDEsIGRiIHkxLCBkYiB4MiwgZGIgeTIsIGRiIHgzLCBkYiB5MykKewogICAgaWYgKCgoeTIgLSB5MSkgPT0gMCBhbmQgKHgzIC0geDEpID09IDApIG9yICgoeDIgLSB4MSkgPT0gMCBhbmQgKHkzIC0geTEpID09IDApKQogICAgewogICAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBkYiBzbG9wZSA9ICgoKHkyIC0geTEpICogKHkzIC0geTIpKSAvICgoeDIgLSB4MSkgKiAoeDMgLSB4MikpKTsKICAgICAgICByZXR1cm4gc2xvcGU7CiAgICB9Cn0=