#include <bits/stdc++.h>
using namespace std;
struct point {
  long long idx, x, y;
  bool operator<(const point& rhs) const { return idx < rhs.idx; }
};
point a[8];
bool parallel(int dx1, int dy1, int dx2, int dy2) {
  if (dx1 == 0 || dx2 == 0) return dx1 == dx2;
  double s1 = ((double)dy1) / dx1;
  double s2 = ((double)dy2) / dx2;
  return s1 == s2;
}
bool perbendicular(int dx1, int dy1, int dx2, int dy2) {
  if (dx1 == 0) return dy2 == 0;
  if (dx2 == 0) return dy1 == 0;
  double s1 = ((double)dy1) / dx1;
  double s2 = ((double)dy2) / dx2;
  return s1 * s2 == -1;
}
int main() {
  for (int i = 0; i < 8; i++) {
    cin >> a[i].x >> a[i].y;
    a[i].idx = i + 1;
  }
  sort(a, a + 8);
  do {
    long long dx, dy, dx1, dy1;
    bool good = false;
    dx = a[0].x - a[1].x;
    dx1 = a[3].x - a[2].x;
    dy = a[0].y - a[1].y;
    dy1 = a[3].y - a[2].y;
    if (parallel(dx, dy, dx1, dy1)) {
      dx = a[0].x - a[3].x;
      dx1 = a[1].x - a[2].x;
      dy = a[0].y - a[3].y;
      dy1 = a[1].y - a[2].y;
      if (parallel(dx, dy, dx1, dy1)) {
        long long d1 = (a[1].x - a[0].x) * (a[1].x - a[0].x) +
                       (a[1].y - a[0].y) * (a[1].y - a[0].y);
        long long d2 = (a[1].x - a[2].x) * (a[1].x - a[2].x) +
                       (a[1].y - a[2].y) * (a[1].y - a[2].y);
        long long d3 = (a[2].x - a[3].x) * (a[2].x - a[3].x) +
                       (a[2].y - a[3].y) * (a[2].y - a[3].y);
        long long d4 = (a[3].x - a[0].x) * (a[3].x - a[0].x) +
                       (a[3].y - a[0].y) * (a[3].y - a[0].y);
        dx = a[0].x - a[1].x;
        dx1 = a[1].x - a[2].x;
        dy = a[0].y - a[1].y;
        dy1 = a[1].y - a[2].y;
        if (d1 == d2 && d3 == d4 && d1 == d3 && d1 > 0 &&
            perbendicular(dx, dy, dx1, dy1))
          good = true;
      }
    }
    if (good) {
      dx = a[4].x - a[5].x;
      dx1 = a[6].x - a[7].x;
      dy = a[4].y - a[5].y;
      dy1 = a[6].y - a[7].y;
      if (parallel(dx, dy, dx1, dy1)) {
        dx = a[4].x - a[6].x;
        dx1 = a[5].x - a[7].x;
        dy = a[4].y - a[6].y;
        dy1 = a[5].y - a[7].y;
        if (parallel(dx, dy, dx1, dy1)) {
          long long d1 = (a[4].x - a[5].x) * (a[4].x - a[5].x) +
                         (a[4].y - a[5].y) * (a[4].y - a[5].y);
          long long d2 = (a[5].x - a[7].x) * (a[5].x - a[7].x) +
                         (a[5].y - a[7].y) * (a[5].y - a[7].y);
          long long d3 = (a[7].x - a[6].x) * (a[7].x - a[6].x) +
                         (a[7].y - a[6].y) * (a[7].y - a[6].y);
          long long d4 = (a[4].x - a[6].x) * (a[4].x - a[6].x) +
                         (a[4].y - a[6].y) * (a[4].y - a[6].y);
          dx = a[4].x - a[5].x;
          dx1 = a[7].x - a[5].x;
          dy = a[4].y - a[5].y;
          dy1 = a[7].y - a[5].y;
          if (d1 == d3 && d2 == d4 && d1 > 0 && d2 > 0 &&
              perbendicular(dx, dy, dx1, dy1)) {
            cout << "YES\n";
            for (int i = 0; i < 8; i++) {
              cout << a[i].idx << ' ';
              if (i == 3) cout << endl;
            }
            cout << endl;
            return 0;
          }
        }
      }
    }
  } while (next_permutation(a, a + 8));
  cout << "NO\n";
  return 0;
}
