#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Point {
long long x, y;
bool operator<(const Point& other) const {
if (x != other.x) return x < other.x;
return y < other.y;
}
bool operator==(const Point& other) const {
return x == other.x && y == other.y;
}
};
// Kvadrat rastojanja izmedu dve tacke
long long distSq(Point p1, Point p2) {
return (p1.x - p2.x) * (p1.x - p2.x) + (p1.y - p2.y) * (p1.y - p2.y);
}
int main() {
vector<Point> p(4);
for (int i = 0; i < 4; i++) {
if (!(cin >> p[i].x >> p[i].y)) return 0;
}
// Sortiranjem dobijamo fiksni raspored temena
sort(p.begin(), p.end());
// Provera da li su tacke razlicite (romb ne može biti tacka ili duž)
for (int i = 0; i < 3; i++) {
if (p[i] == p[i+1]) {
cout << "NE" << endl;
return 0;
}
}
// Kod sortiranih tacaka, dijagonale su (p0, p3) i (p1, p2)
// 1. Uslov: Dijagonale se polove (središta su ista)
bool isParallelogram = (p[0].x + p[3].x == p[1].x + p[2].x) &&
(p[0].y + p[3].y == p[1].y + p[2].y);
// 2. Uslov: Sve stranice su jednake (romb)
// Stranice su p0-p1, p1-p3, p3-p2, p2-p0
bool allSidesEqual = (distSq(p[0], p[1]) == distSq(p[1], p[3])) &&
(distSq(p[1], p[3]) == distSq(p[3], p[2])) &&
(distSq(p[3], p[2]) == distSq(p[2], p[0]));
// Dodatna provera: Površina ne sme biti nula (tacke nisu kolinearne)
// Vektorski proizvod (p1-p0) i (p2-p0)
long long area2 = abs((p[1].x - p[0].x) * (p[2].y - p[0].y) -
(p[1].y - p[0].y) * (p[2].x - p[0].x));
if (isParallelogram && allSidesEqual && area2 > 0) {
cout << "DA" << endl;
} else {
cout << "NE" << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBQb2ludCB7CiAgICBsb25nIGxvbmcgeCwgeTsKICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBvaW50JiBvdGhlcikgY29uc3QgewogICAgICAgIGlmICh4ICE9IG90aGVyLngpIHJldHVybiB4IDwgb3RoZXIueDsKICAgICAgICByZXR1cm4geSA8IG90aGVyLnk7CiAgICB9CiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUG9pbnQmIG90aGVyKSBjb25zdCB7CiAgICAgICAgcmV0dXJuIHggPT0gb3RoZXIueCAmJiB5ID09IG90aGVyLnk7CiAgICB9Cn07CgovLyBLdmFkcmF0IHJhc3RvamFuamEgaXptZWR1IGR2ZSB0YWNrZQpsb25nIGxvbmcgZGlzdFNxKFBvaW50IHAxLCBQb2ludCBwMikgewogICAgcmV0dXJuIChwMS54IC0gcDIueCkgKiAocDEueCAtIHAyLngpICsgKHAxLnkgLSBwMi55KSAqIChwMS55IC0gcDIueSk7Cn0KCmludCBtYWluKCkgewogICAgdmVjdG9yPFBvaW50PiBwKDQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyBpKyspIHsKICAgICAgICBpZiAoIShjaW4gPj4gcFtpXS54ID4+IHBbaV0ueSkpIHJldHVybiAwOwogICAgfQoKICAgIC8vIFNvcnRpcmFuamVtIGRvYmlqYW1vIGZpa3NuaSByYXNwb3JlZCB0ZW1lbmEKICAgIHNvcnQocC5iZWdpbigpLCBwLmVuZCgpKTsKCiAgICAvLyBQcm92ZXJhIGRhIGxpIHN1IHRhY2tlIHJhemxpY2l0ZSAocm9tYiBuZSBtb8W+ZSBiaXRpIHRhY2thIGlsaSBkdcW+KQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBpKyspIHsKICAgICAgICBpZiAocFtpXSA9PSBwW2krMV0pIHsKICAgICAgICAgICAgY291dCA8PCAiTkUiIDw8IGVuZGw7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0KCiAgICAvLyBLb2Qgc29ydGlyYW5paCB0YWNha2EsIGRpamFnb25hbGUgc3UgKHAwLCBwMykgaSAocDEsIHAyKQogICAgLy8gMS4gVXNsb3Y6IERpamFnb25hbGUgc2UgcG9sb3ZlIChzcmVkacWhdGEgc3UgaXN0YSkKICAgIGJvb2wgaXNQYXJhbGxlbG9ncmFtID0gKHBbMF0ueCArIHBbM10ueCA9PSBwWzFdLnggKyBwWzJdLngpICYmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAocFswXS55ICsgcFszXS55ID09IHBbMV0ueSArIHBbMl0ueSk7CgogICAgLy8gMi4gVXNsb3Y6IFN2ZSBzdHJhbmljZSBzdSBqZWRuYWtlIChyb21iKQogICAgLy8gU3RyYW5pY2Ugc3UgcDAtcDEsIHAxLXAzLCBwMy1wMiwgcDItcDAKICAgIGJvb2wgYWxsU2lkZXNFcXVhbCA9IChkaXN0U3EocFswXSwgcFsxXSkgPT0gZGlzdFNxKHBbMV0sIHBbM10pKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKGRpc3RTcShwWzFdLCBwWzNdKSA9PSBkaXN0U3EocFszXSwgcFsyXSkpICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAoZGlzdFNxKHBbM10sIHBbMl0pID09IGRpc3RTcShwWzJdLCBwWzBdKSk7CgogICAgLy8gRG9kYXRuYSBwcm92ZXJhOiBQb3ZyxaFpbmEgbmUgc21lIGJpdGkgbnVsYSAodGFja2UgbmlzdSBrb2xpbmVhcm5lKQogICAgLy8gVmVrdG9yc2tpIHByb2l6dm9kIChwMS1wMCkgaSAocDItcDApCiAgICBsb25nIGxvbmcgYXJlYTIgPSBhYnMoKHBbMV0ueCAtIHBbMF0ueCkgKiAocFsyXS55IC0gcFswXS55KSAtIAogICAgICAgICAgICAgICAgICAgICAgICAgIChwWzFdLnkgLSBwWzBdLnkpICogKHBbMl0ueCAtIHBbMF0ueCkpOwoKICAgIGlmIChpc1BhcmFsbGVsb2dyYW0gJiYgYWxsU2lkZXNFcXVhbCAmJiBhcmVhMiA+IDApIHsKICAgICAgICBjb3V0IDw8ICJEQSIgPDwgZW5kbDsKICAgIH0gZWxzZSB7CiAgICAgICAgY291dCA8PCAiTkUiIDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=