#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
} plist[8], pa[4], pb[4];
int perpendicular(point u1, point u2, point v1, point v2) {
  return (u1.x - u2.x) * (v1.x - v2.x) == -(u1.y - u2.y) * (v1.y - v2.y);
}
int d(point a, point b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
int xd(point a[]) {
  if (d(a[0], a[1]) == d(a[1], a[2]) && d(a[1], a[2]) == d(a[2], a[3]) &&
      d(a[2], a[3]) == d(a[3], a[0]) && d(a[3], a[0]) == d(a[0], a[1])) {
    return 1;
  }
  return 0;
}
int cz(point a[]) {
  if (perpendicular(a[0], a[1], a[1], a[2]) &&
      perpendicular(a[1], a[2], a[2], a[3]) &&
      perpendicular(a[2], a[3], a[3], a[0]) &&
      perpendicular(a[3], a[0], a[0], a[1])) {
    return 1;
  }
  return 0;
}
int main() {
  for (int i = 0; i < 8; i++) {
    scanf("%d%d", &plist[i].x, &plist[i].y);
  }
  int id[8] = {0, 1, 2, 3, 4, 5, 6, 7}, ans = 0;
  do {
    for (int i = 0; i < 4; i++) {
      pa[i] = plist[id[i]];
    }
    for (int i = 4; i < 8; i++) {
      pb[i - 4] = plist[id[i]];
    }
    if (cz(pa) && cz(pb) && xd(pa)) {
      if (xd(pa)) {
        ans = 1;
        break;
      }
    }
  } while (next_permutation(id, id + 8));
  if (ans) {
    puts("YES");
    for (int i = 0; i < 8; i++) {
      printf("%d%c", id[i] + 1, (i == 3 || i == 7) ? '\n' : ' ');
    }
  } else {
    puts("NO");
  }
  return 0;
}
