#include <bits/stdc++.h>   using namespace std;   const long long N = 105;   struct Point {     long long x, y;     Point() { x = y = 0; }     Point(long long _x, long long _y) {       x = _x;       y = _y;     }     void input() { cin >> x >> y; }     Point operator+(const Point &a) const { return Point(x + a.x, y + a.y); }     Point operator-(const Point &a) const { return Point(x - a.x, y - a.y); }     Point Rotate(const Point &a) const { return Point(-a.y, a.x); }     long long modul(void) const { return 1LL * x + 1LL * y; }     bool operator<(const Point &a) const {       return (x == a.x ? y < a.y : x < a.x);     }     bool operator==(const Point &a) const { return (x == a.x && y == a.y); }   };   Point rotation(const Point &o, const Point &a, long long t) {     Point res = a;     while (t--) {       res = o + o.Rotate(res - o);     }     return res;   }   long long dis(Point u, Point v) {     long long dx = u.x - v.x;     long long dy = u.y - v.y;     return dx * dx + dy * dy;   }   bool isSquare(vector<Point> &u) {     vector<Point> mi = u;     sort(mi.begin(), mi.end());     map<long long, long long> xx, yy;     for (long long i = 0; i < mi.size(); i++) {       xx[mi[i].x]++;       yy[mi[i].y]++;       if (xx[mi[i].x] == 3 || yy[mi[i].y] == 3) return 0;     }     vector<long long> d;     for (long long i = 0; i < 4; i++) {       for (long long j = i + 1; j < 4; j++) d.push_back(dis(mi[i], mi[j]));     }     sort(d.begin(), d.end());     if (d[0] == d[3] && d[4] == d[5] && d[0] && d[3] + d[0] == d[4]) return 1;     return 0;   }   bool isRectangle(vector<Point> &u) {     vector<Point> mi = u;     sort(mi.begin(), mi.end());     map<long long, long long> xx, yy;     for (long long i = 0; i < mi.size(); i++) {       xx[mi[i].x]++;       yy[mi[i].y]++;       if (xx[mi[i].x] == 3 || yy[mi[i].y] == 3) return 0;     }     vector<long long> d;     for (long long i = 0; i < 4; i++) {       for (long long j = i + 1; j < 4; j++) d.push_back(dis(mi[i], mi[j]));     }     sort(d.begin(), d.end());     if (d[0] == d[1] && d[2] == d[3] && d[4] == d[5] && d[0] &&         d[0] + d[2] == d[5])       return 1;     return 0;   }   void run() {     Point pos[9];     int col[9];     for (long long i = 1; i <= 8; i++) {       pos[i].input();     }     bool ok = 0;     for (int i = 1; i <= 8; i++) {       for (int j = i + 1; j <= 8; j++) {         for (int k = j + 1; k <= 8; k++) {           for (int t = k + 1; t <= 8; t++) {             for (long long run = 1; run <= 8; run++)               col[run] = (run == j || run == k || run == t || run == i);             vector<Point> rec;             vector<Point> square;             for (long long run = 1; run <= 8; run++)               if (col[run])                 rec.push_back(pos[run]);               else                 square.push_back(pos[run]);             if (!isSquare(square)) continue;             if (!isRectangle(rec)) continue;             cout <<  YES  << endl;             for (long long run = 1; run <= 8; run++)               if (!col[run]) cout << run <<    ;             cout << endl;             for (long long run = 1; run <= 8; run++)               if (col[run]) cout << run <<    ;             return;           }         }       }     }     cout <<  NO ;   }   int main() {     ios_base::sync_with_stdio(false);     run();   }