#include #include #include #include #include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vii; #define x first #define y second #define pb push_back #define eb emplace_back #define rep(i,a,b) for(auto i=(a); i<(b); ++i) #define REP(i,n) rep(i,0,n) #define all(v) (v).begin(), (v).end() #define rs resize #define DBG(x) cerr << __LINE__ << ": " << #x << " = " << (x) << endl const ld PI = acos(-1.0); template using min_queue = priority_queue, greater>; template int sz(const T &x) { return (int) x.size(); // copy the ampersand(&)! } template ostream& operator<<(ostream &os, vector &v) { os << "\n["; for(T &x : v) os << x << ','; return os << "]\n"; } struct pairhash { public: template size_t operator()(const pair &p) const { size_t lhs = hash()(p.x); size_t rhs = hash()(p.y); return lhs ^ (rhs+0x9e3779b9+(lhs<<6)+(lhs>>2)); } }; ii operator-(ii a, ii b) { return {a.x-b.x, a.y-b.y}; } ll operator*(ii a, ii b) { return a.x*b.x + a.y*b.y; } ll operator^(ii a, ii b) { return a.x*b.y - a.y*b.x; } void run() { vii P(4), S(4); for (ll i = 0; i < 4; i++) { cin >> P[i].x >> P[i].y; } for (ll i = 0; i < 4; i++) { S[i] = P[(i+1)%4] - P[i]; } if ((S[0]^S[2]) == 0 && (S[1]^S[3]) == 0) { bool rect = (S[0]*S[1] == 0); bool rhomb = (S[0]*S[0] == S[1]*S[1]); if (rect && rhomb) { cout << "square" << endl; } else if (rect) { cout << "rectangle" << endl; } else if (rhomb) { cout << "rhombus" << endl; } else { cout << "parallelogram" << endl; } } else if ((S[0]^S[2]) == 0 || (S[1]^S[3]) == -1) { cout << "trapezium" << endl; } else { cout << "none" << endl; } // TODO: add "kite" } signed main() { // DON'T MIX "scanf" and "cin"! ios_base::sync_with_stdio(false); cin.tie(NULL); cout << fixed << setprecision(20); run(); return 0; }