#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
};
bool cmp(point a, point b) { return a.x < b.x || a.x == b.x && a.y < b.y; }
bool cw(point a, point b, point c) {
  return a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y) < 0;
}
bool ccw(point a, point b, point c) {
  return a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y) > 0;
}
point up[9], down[9];
void convex_hull(point *a) {
  sort(a, a + 4, cmp);
  point p1 = a[0], p2 = a[3];
  int upsz = 0, downsz = 0;
  up[upsz++] = p1;
  down[downsz++] = p1;
  for (size_t i = 1; i < 4; i++) {
    if (i == 3 || cw(p1, a[i], p2)) {
      while (upsz >= 2 && !cw(up[upsz - 2], up[upsz - 1], a[i])) upsz--;
      up[upsz++] = a[i];
    }
    if (i == 3 || ccw(p1, a[i], p2)) {
      while (downsz >= 2 && !ccw(down[downsz - 2], down[downsz - 1], a[i]))
        downsz--;
      down[downsz++] = a[i];
    }
  }
  int sz = 0;
  for (size_t i = 0; i < upsz; ++i) a[sz++] = up[i];
  for (size_t i = downsz - 2; i > 0; --i) a[sz++] = down[i];
}
int dist(point a, point b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
bool isQ(point *a) {
  convex_hull(a);
  if (a[0].x - a[1].x == a[3].x - a[2].x &&
      a[0].y - a[1].y == a[3].y - a[2].y &&
      dist(a[0], a[1]) == dist(a[0], a[3]) &&
      (a[1].x - a[0].x) * (a[3].x - a[0].x) +
              (a[1].y - a[0].y) * (a[3].y - a[0].y) ==
          0) {
    return true;
  }
  return false;
}
bool isP(point *a) {
  convex_hull(a);
  if (a[0].x - a[1].x == a[3].x - a[2].x &&
      a[0].y - a[1].y == a[3].y - a[2].y &&
      (a[1].x - a[0].x) * (a[3].x - a[0].x) +
              (a[1].y - a[0].y) * (a[3].y - a[0].y) ==
          0) {
    return true;
  }
  return false;
}
int main() {
  int i;
  int perm[11];
  point A[11];
  for (i = 0; i < 8; i++) {
    scanf("%d %d", &A[i].x, &A[i].y);
    perm[i] = i;
  }
  point p[11];
  do {
    int sz = 0;
    for (int j = 0; j < 4; j++) p[sz++] = A[perm[j]];
    if (isQ(p)) {
      sz = 0;
      for (int j = 4; j < 8; j++) p[sz++] = A[perm[j]];
      if (isP(p)) {
        puts("YES");
        printf("%d", perm[0] + 1);
        for (i = 1; i < 4; i++) printf(" %d", perm[i] + 1);
        puts("");
        printf("%d", perm[4] + 1);
        for (i = 5; i < 8; i++) printf(" %d", perm[i] + 1);
        puts("");
        return 0;
      }
    }
  } while (next_permutation(perm, perm + 8));
  puts("NO");
}
