#include <bits/stdc++.h>
using namespace std;
struct point {
  int x, y;
};
int dist(const point &a, const point &b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
int main(int argc, char *argv[]) {
  point p[8];
  int a[8] = {0, 1, 2, 3, 4, 5, 6, 7};
  for (int i = 0; i < 8; i++) scanf("%d %d", &p[i].x, &p[i].y);
  bool found = false;
  do {
    int d = dist(p[a[0]], p[a[1]]);
    if (d != dist(p[a[0]], p[a[2]]) || d != dist(p[a[1]], p[a[3]]) ||
        d != dist(p[a[2]], p[a[3]]))
      continue;
    if (2 * d != dist(p[a[0]], p[a[3]]) || 2 * d != dist(p[a[1]], p[a[2]]))
      continue;
    int d1 = dist(p[a[4]], p[a[5]]);
    int d2 = dist(p[a[4]], p[a[6]]);
    if (d1 != dist(p[a[6]], p[a[7]]) || d2 != dist(p[a[5]], p[a[7]])) continue;
    if (d1 + d2 != dist(p[a[5]], p[a[6]]) || d1 + d2 != dist(p[a[4]], p[a[7]]))
      continue;
    found = true;
    break;
  } while (next_permutation(a, a + 8));
  if (found) {
    printf("YES\n");
    for (int i = 0; i < 4; i++) printf("%s%d", i > 0 ? " " : "", a[i] + 1);
    printf("\n");
    for (int i = 4; i < 8; i++) printf("%s%d", i > 4 ? " " : "", a[i] + 1);
    printf("\n");
  } else {
    printf("NO\n");
  }
  return 0;
}
