#include <bits/stdc++.h>
using namespace std;
bool eq(double a, double b) { return abs(a - b) <= 0.0001L; }
double dist(pair<int, int> a, pair<int, int> b) {
  double dx = a.first - b.first;
  double dy = a.second - b.second;
  return sqrt(dx * dx + dy * dy);
}
bool isrectangle(vector<pair<int, int> > p) {
  double x1 = p[0].first, y1 = p[0].second, x2 = p[1].first, y2 = p[1].second,
         x3 = p[2].first, y3 = p[2].second, x4 = p[3].first, y4 = p[3].second;
  double cx, cy;
  double dd1, dd2, dd3, dd4;
  cx = (x1 + x2 + x3 + x4) / 4;
  cy = (y1 + y2 + y3 + y4) / 4;
  dd1 = (cx - x1) * (cx - x1) + (cy - y1) * (cy - y1);
  dd2 = (cx - x2) * (cx - x2) + (cy - y2) * (cy - y2);
  dd3 = (cx - x3) * (cx - x3) + (cy - y3) * (cy - y3);
  dd4 = (cx - x4) * (cx - x4) + (cy - y4) * (cy - y4);
  return eq(dd1, dd2) && eq(dd1, dd3) && eq(dd1, dd4);
}
bool issquare(vector<pair<int, int> > p) {
  if (!isrectangle(p)) return false;
  vector<double> vd;
  for (int i = 0; i < 4; i++)
    for (int j = i + 1; j < 4; j++) vd.push_back(dist(p[i], p[j]));
  sort(vd.begin(), vd.end());
  if (eq(vd[0], vd[1]) && eq(vd[0], vd[2]) && eq(vd[0], vd[3]) &&
      eq(vd[4], vd[5]))
    return true;
  return false;
}
void output(vector<int> v1, vector<int> v2) {
  printf("YES\n");
  for (int i = 0; i < 4; i++) printf("%d ", v1[i] + 1);
  printf("\n");
  for (int i = 0; i < 4; i++) printf("%d ", v2[i] + 1);
  printf("\n");
}
int main() {
  vector<pair<int, int> > v;
  for (int i = 0; i < 8; i++) {
    pair<int, int> p;
    scanf("%d%d", &p.first, &p.second);
    v.push_back(p);
  }
  vector<bool> m(8, false);
  for (int i = 0; i < 8; i++) {
    m[i] = true;
    for (int j = i + 1; j < 8; j++) {
      m[j] = true;
      for (int k = j + 1; k < 8; k++) {
        m[k] = true;
        for (int l = k + 1; l < 8; l++) {
          m[l] = true;
          vector<pair<int, int> > v1, v2;
          vector<int> p1, p2;
          for (int x = 0; x < 8; x++)
            if (m[x]) {
              v1.push_back(v[x]);
              p1.push_back(x);
            } else {
              v2.push_back(v[x]);
              p2.push_back(x);
            };
          if (issquare(v1) && isrectangle(v2)) {
            output(p1, p2);
            return 0;
          }
          if (issquare(v2) && isrectangle(v1)) {
            output(p2, p1);
            return 0;
          }
          m[l] = false;
        }
        m[k] = false;
      }
      m[j] = false;
    }
    m[i] = false;
  }
  printf("NO\n");
  return 0;
}
