#include <bits/stdc++.h>
using namespace std;
struct pt {
  double x, y;
};
pt mas[8];
bool usd[8] = {0};
const double eps = 1e-7;
double dist(pt a, pt b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
double sqr(pt a, pt b, pt c) {
  return fabs(a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y));
}
int poly(pt a, pt b, pt c, pt d) {
  int tmp = 0;
  pt mid1, mid2;
  mid1.x = (a.x + b.x) / 2;
  mid1.y = (a.y + b.y) / 2;
  mid2.x = (c.x + d.x) / 2;
  mid2.y = (c.y + d.y) / 2;
  if (fabs(mid1.x - mid2.x) < eps && fabs(mid1.y - mid2.y) < eps) {
    if (sqr(a, d, mid1) + sqr(a, c, mid1) + sqr(b, d, mid1) + sqr(b, c, mid1) >
        eps) {
      if (fabs(dist(a, mid1) - dist(b, mid1)) < eps &&
          fabs(dist(c, mid1) - dist(b, mid1)) < eps &&
          fabs(dist(c, mid1) - dist(d, mid1)) < eps) {
        if (fabs(dist(a, c) - dist(b, c)) < eps &&
            fabs(dist(c, b) - dist(b, d)) < eps &&
            fabs(dist(b, d) - dist(a, d)) < eps)
          return 2;
        else
          tmp = 1;
      }
    }
  }
  mid1.x = (a.x + c.x) / 2;
  mid1.y = (a.y + c.y) / 2;
  mid2.x = (b.x + d.x) / 2;
  mid2.y = (b.y + d.y) / 2;
  if (fabs(mid1.x - mid2.x) < eps && fabs(mid1.y - mid2.y) < eps) {
    if (sqr(a, d, mid1) + sqr(a, b, mid1) + sqr(c, d, mid1) + sqr(b, c, mid1) >
        eps) {
      if (fabs(dist(a, mid1) - dist(b, mid1)) < eps &&
          fabs(dist(c, mid1) - dist(b, mid1)) < eps &&
          fabs(dist(c, mid1) - dist(d, mid1)) < eps) {
        if (fabs(dist(a, d) - dist(d, c)) < eps &&
            fabs(dist(c, d) - dist(b, c)) < eps &&
            fabs(dist(b, c) - dist(a, b)) < eps)
          return 2;
        else
          tmp = 1;
      }
    }
  }
  mid1.x = (a.x + d.x) / 2;
  mid1.y = (a.y + d.y) / 2;
  mid2.x = (b.x + c.x) / 2;
  mid2.y = (b.y + c.y) / 2;
  if (fabs(mid1.x - mid2.x) < eps && fabs(mid1.y - mid2.y) < eps) {
    if (sqr(a, b, mid1) + sqr(a, c, mid1) + sqr(c, d, mid1) + sqr(b, d, mid1) >
        eps) {
      if (fabs(dist(a, mid1) - dist(b, mid1)) < eps &&
          fabs(dist(c, mid1) - dist(b, mid1)) < eps &&
          fabs(dist(c, mid1) - dist(d, mid1)) < eps) {
        if (fabs(dist(a, b) - dist(b, d)) < eps &&
            fabs(dist(b, d) - dist(d, c)) < eps &&
            fabs(dist(d, c) - dist(a, c)) < eps)
          return 2;
        else
          return 1;
      }
    }
  }
  return tmp;
}
int poly() {
  int mas1[4], m1sz = 0;
  for (int i = 0; i < 8; ++i)
    if (!usd[i]) mas1[m1sz++] = i;
  return poly(mas[mas1[0]], mas[mas1[1]], mas[mas1[2]], mas[mas1[3]]);
}
int main() {
  for (int i = 0; i < 8; ++i) scanf("%lf%lf", &mas[i].x, &mas[i].y);
  bool fnd = 0;
  for (int i = 0; i < 8; ++i) {
    usd[i] = 1;
    for (int j = i + 1; j < 8; ++j) {
      usd[j] = 1;
      for (int k = j + 1; k < 8; ++k) {
        usd[k] = 1;
        for (int l = k + 1; l < 8; ++l) {
          usd[l] = 1;
          if (poly(mas[i], mas[j], mas[k], mas[l]) == 2 && poly() > 0) {
            fnd = 1;
            break;
          }
          usd[l] = 0;
        }
        if (fnd) break;
        usd[k] = 0;
      }
      if (fnd) break;
      usd[j] = 0;
    }
    if (fnd) break;
    usd[i] = 0;
  }
  if (fnd) {
    printf("YES\n");
    for (int i = 0; i < 8; ++i)
      if (usd[i]) printf("%d ", i + 1);
    printf("\n");
    for (int i = 0; i < 8; ++i)
      if (!usd[i]) printf("%d ", i + 1);
    printf("\n");
  } else
    printf("NO\n");
  return 0;
}
