#include <bits/stdc++.h>
using namespace std;
struct P {
  int x, y, n;
};
struct V {
  int x, y;
  V(P A, P B) {
    x = B.x - A.x;
    y = B.y - A.y;
  }
  V() {
    x = 0;
    y = 0;
  }
  bool per(V b) { return x * b.x + y * b.y == 0; }
  double size() { return sqrt(x * x + y * y); }
  bool operator==(V b) const { return x == b.x && y == b.y; }
};
P p[10];
P s[10];
bool mark[10];
bool ans = false;
void BT(int now) {
  if (now == 8) {
    V ab = V(s[0], s[1]);
    V bc = V(s[1], s[2]);
    V ad = V(s[0], s[3]);
    V dc = V(s[3], s[2]);
    V ab2 = V(s[4], s[5]);
    V bc2 = V(s[5], s[6]);
    V ad2 = V(s[4], s[7]);
    V dc2 = V(s[7], s[6]);
    bool sq = false;
    if (ab == dc && bc == ad && ab.size() == bc.size() && ab.per(bc) &&
        ab.size() * bc.size() > 0)
      sq = true;
    bool rect = false;
    if (ab2 == dc2 && bc2 == ad2 && ab2.per(bc2) && ab2.size() * bc2.size() > 0)
      rect = true;
    if (sq && rect) {
      ans = true;
      cout << "YES\n";
      cout << s[0].n << ' ' << s[1].n << ' ' << s[2].n << ' ' << s[3].n << endl;
      cout << s[4].n << ' ' << s[5].n << ' ' << s[6].n << ' ' << s[7].n << endl;
    }
    return;
  }
  if (!ans) {
    for (int i = 0; i < 8 && !ans; i++)
      if (!mark[i]) {
        mark[i] = true;
        s[now] = p[i];
        BT(now + 1);
        mark[i] = false;
      }
  }
}
int main() {
  for (int i = 0; i < 8; i++) {
    cin >> p[i].x >> p[i].y;
    p[i].n = i + 1;
  }
  BT(0);
  if (!ans) cout << "NO\n";
  return 0;
}
