#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
} a[9];
point p[4];
int di[6];
bool vv[9][9][9][9];
int dis(point a, point b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
bool center(point a, point b, point c, point d) {
  if ((2 * a.x == b.x + c.x && 2 * a.y == b.y + c.y) ||
      (2 * a.x == b.x + d.x && 2 * a.y == b.y + d.y))
    return false;
  if ((2 * b.x == a.x + c.x && 2 * b.y == a.y + c.y) ||
      (2 * b.x == a.x + d.x && 2 * b.y == a.y + d.y))
    return false;
  if ((2 * c.x == b.x + d.x && 2 * c.y == b.y + d.y) ||
      (2 * c.x == a.x + d.x && 2 * c.y == a.y + d.y))
    return false;
  if ((2 * d.x == b.x + c.x && 2 * d.y == b.y + c.y) ||
      (2 * d.x == a.x + c.x && 2 * d.y == a.y + c.y))
    return false;
  return true;
}
bool rectangle(point a, point b, point c, point d) {
  di[0] = dis(a, b);
  di[1] = dis(a, c);
  di[2] = dis(a, d);
  di[3] = dis(b, c);
  di[4] = dis(b, d);
  di[5] = dis(c, d);
  sort(di, di + 6);
  if (di[0] == di[1] && di[2] == di[3] && di[4] == di[5] &&
      di[0] + di[2] == di[4]) {
    if (center(a, b, c, d))
      return true;
    else
      return false;
  } else
    return false;
}
int main() {
  int i, j, k, x, y, z;
  bool v[9], f;
  memset(vv, false, sizeof(vv));
  memset(v, false, sizeof(v));
  f = false;
  for (i = 1; i < 9; i++) scanf("%d%d", &a[i].x, &a[i].y);
  for (i = 1; i < 6; i++) {
    for (j = i + 1; j < 7; j++)
      for (k = j + 1; k < 8; k++)
        for (x = k + 1; x < 9; x++)
          if (rectangle(a[i], a[j], a[k], a[x]) && di[1] == di[2]) {
            v[i] = true;
            v[j] = true;
            v[k] = true;
            v[x] = true;
            point b[4];
            if (!vv[i][j][k][x]) {
              y = 0;
              for (z = 1; z < 9; z++) {
                if (!v[z]) b[y++] = a[z];
              }
              if (rectangle(b[0], b[1], b[2], b[3])) {
                printf("YES\n");
                f = true;
                printf("%d %d %d %d\n", i, j, k, x);
                vv[i][j][k][x] = true;
                y = 0;
                int mm[4];
                for (z = 1; z < 9; z++) {
                  if (!v[z]) {
                    if (y == 3)
                      printf("%d\n", z);
                    else
                      printf("%d ", z);
                    mm[y++] = z;
                  }
                }
                vv[mm[0]][mm[1]][mm[2]][mm[3]] = true;
              }
            }
            memset(v, false, sizeof(v));
          }
  }
  if (!f) printf("NO\n");
  return 0;
}
