#include <bits/stdc++.h>
using namespace std;
int diss[15];
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return x * f;
}
struct node {
  int x;
  int y;
} star[15];
int pand(const struct node a, const struct node b, const struct node c,
         const struct node d) {
  int cp = (a.x - b.x) * (c.x - d.x) + (a.y - b.y) * (c.y - d.y);
  if (cp == 0)
    return 1;
  else
    return 0;
}
int dis(const struct node a, const struct node b) {
  return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
int cmp(const struct node a, const struct node b) {
  if (a.x == b.x)
    return a.y < b.y;
  else
    return a.x < b.x;
}
int main() {
  while (~scanf("%d %d", &star[1].x, &star[1].y)) {
    for (int i = 2; i <= 8; ++i) {
      star[i].x = read();
      star[i].y = read();
    }
    bool vis[15] = {false};
    int flag = 0;
    int cnt;
    struct node t_star[15];
    for (int i = 1; i <= 8; ++i) {
      for (int j = i + 1; j <= 8; ++j) {
        for (int c = j + 1; c <= 8; ++c) {
          for (int z = c + 1; z <= 8; ++z) {
            diss[1] = dis(star[i], star[j]);
            diss[2] = dis(star[i], star[c]);
            diss[3] = dis(star[i], star[z]);
            diss[4] = dis(star[j], star[c]);
            diss[5] = dis(star[j], star[z]);
            diss[6] = dis(star[c], star[z]);
            sort(diss + 1, diss + 7);
            if (diss[1] == diss[2] && diss[2] == diss[3] &&
                diss[3] == diss[4] && diss[5] == diss[6] &&
                (diss[1] + diss[2] == diss[5])) {
              flag = 1;
              vis[i] = true;
              vis[j] = true;
              vis[c] = true;
              vis[z] = true;
              break;
            }
          }
          if (flag) break;
        }
        if (flag) break;
      }
      if (flag) break;
    }
    if (!flag)
      cout << "NO" << endl;
    else {
      int zc1[10], zc2[10], z1 = 1, z2 = 1;
      cnt = 1;
      for (int i = 1; i <= 8; ++i) {
        if (!vis[i]) {
          t_star[cnt++] = star[i];
          zc2[z2++] = i;
        } else
          zc1[z1++] = i;
      }
      sort(t_star + 1, t_star + cnt + 1, cmp);
      if (pand(t_star[1], t_star[2], t_star[1], t_star[3]) &&
          pand(t_star[1], t_star[3], t_star[3], t_star[4]) &&
          pand(t_star[3], t_star[4], t_star[4], t_star[2])) {
        cout << "YES" << endl;
        for (int i = 1; i < z1 - 1; ++i) cout << zc1[i] << " ";
        cout << zc1[z1 - 1] << endl;
        for (int i = 1; i < z2 - 1; ++i) cout << zc2[i] << " ";
        cout << zc2[z2 - 1] << endl;
      } else
        cout << "NO" << endl;
    }
  }
  return 0;
}
