#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();
}
