#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
  bool operator<(const point& oDR) const {
    if (x != oDR.x)
      return x < oDR.x;
    else
      return y < oDR.y;
  }
} a[10];
int book[9];
int sharp(int m, int n) {
  return (a[m].x - a[n].x) * (a[m].x - a[n].x) +
         (a[m].y - a[n].y) * (a[m].y - a[n].y);
}
int main() {
  for (int i = 1; i < 9; i++) {
    cin >> a[i].x >> a[i].y;
  }
  for (int i = 1; i <= 5; i++)
    for (int j = i + 1; j <= 6; j++)
      for (int k = j + 1; k <= 7; k++)
        for (int l = k + 1; l <= 8; l++) {
          memset(book, 0, sizeof(book));
          set<int> s;
          s.clear();
          s.insert(sharp(i, j));
          s.insert(sharp(i, k));
          s.insert(sharp(i, l));
          s.insert(sharp(k, j));
          s.insert(sharp(l, j));
          s.insert(sharp(k, l));
          set<int>::iterator it;
          it = s.begin();
          it++;
          if (s.size() == 2 && *s.begin() * 2 == *it) {
            book[i] = 1;
            book[j] = 1;
            book[k] = 1;
            book[l] = 1;
            float xc = 0, yc = 0;
            point c[5];
            for (int b = 1, d = 1; b < 9; b++)
              if (book[b] == 0) xc += a[b].x, yc += a[b].y, c[d] = a[b], d++;
            xc = xc / 4, yc = yc / 4;
            int d1 =
                (xc - c[1].x) * (xc - c[1].x) + (yc - c[1].y) * (yc - c[1].y);
            int d2 =
                (xc - c[2].x) * (xc - c[2].x) + (yc - c[2].y) * (yc - c[2].y);
            int d3 =
                (xc - c[3].x) * (xc - c[3].x) + (yc - c[3].y) * (yc - c[3].y);
            int d4 =
                (xc - c[4].x) * (xc - c[4].x) + (yc - c[4].y) * (yc - c[4].y);
            if (d1 == d2 && d2 == d3 && d3 == d4) {
              cout << "YES" << endl;
              for (int i = 1; i < 9; i++)
                if (book[i]) cout << i << " ";
              cout << endl;
              for (int i = 1; i < 9; i++)
                if (book[i] == 0) cout << i << " ";
              cout << endl;
              return 0;
            }
          }
        }
  cout << "NO" << endl;
  return 0;
}
