#include <bits/stdc++.h>
using namespace std;
int mod = 1000 * 1000 * 1000 + 7;
struct pt {
  long long x, y;
  pt() {}
  pt(long long a, long long b) { x = a, y = b; }
  long long sqr(long long x) { return x * x; }
  long long dis(pt &p) { return sqr(x - p.x) + sqr(y - p.y); }
};
bool square(pt p1, pt p2, pt p3, pt p4) {
  long long d2 = p1.dis(p2);
  long long d3 = p1.dis(p3);
  long long d4 = p1.dis(p4);
  if (d2 == d3 && d4 == d2 * 2) {
    long long dis = p4.dis(p2);
    return dis == d2 && p3.dis(p4) == d2;
  }
  if (d3 == d4 && d2 == d3 * 2) {
    long long dis = p3.dis(p2);
    return dis == d3 && p2.dis(p4) == d3;
  }
  if (d4 == d2 && d3 == d2 * 2) {
    long long dis = p3.dis(p2);
    return dis == d2 && p3.dis(p4) == d2;
  }
  return 0;
}
bool IsOrthogonal(pt a, pt b, pt c) {
  return (b.x - a.x) * (b.x - c.x) + (b.y - a.y) * (b.y - c.y) == 0;
}
int IsRectangle(pt a, pt b, pt c, pt d) {
  return IsOrthogonal(a, b, c) && IsOrthogonal(b, c, d) &&
         IsOrthogonal(c, d, a);
}
int rect(pt a, pt b, pt c, pt d) {
  return IsRectangle(a, b, c, d) || IsRectangle(b, c, a, d) ||
         IsRectangle(c, a, b, d);
}
int main() {
  vector<pt> pts;
  for (int i = 0; i < 8; ++i) {
    int x, y;
    scanf("%d %d", &x, &y);
    pts.push_back(pt(x, y));
  }
  for (int msk = 0; msk < (1 << 8); ++msk) {
    if (__builtin_popcount(msk) != 4) continue;
    vector<pt> sq, rec;
    vector<int> a, b;
    for (int j = 0; j < 8; ++j) {
      if (msk & (1 << j))
        sq.push_back(pts[j]), a.push_back(j + 1);
      else
        rec.push_back(pts[j]), b.push_back(j + 1);
    }
    if (square(sq[0], sq[1], sq[2], sq[3]) &&
        rect(rec[0], rec[1], rec[2], rec[3])) {
      cout << "YES\n";
      for (int k = 0; k < ((int)((a).size())); k++) cout << a[k] << " ";
      cout << endl;
      for (int k = 0; k < ((int)((b).size())); k++) cout << b[k] << " ";
      cout << endl;
      ;
      return 0;
    }
  }
  cout << "NO\n";
}
