#include <bits/stdc++.h>
using namespace std;
complex<int> points[8];
int sq[4];
int rect[4];
bool isOrtho(complex<int> a, complex<int> b, complex<int> c) {
  return ((b.real() - a.real()) * (b.real() - c.real()) +
          (b.imag() - a.imag()) * (b.imag() - c.imag())) == 0;
}
bool isRect(complex<int> a, complex<int> b, complex<int> c, complex<int> d) {
  return isOrtho(a, b, c) && isOrtho(b, c, d) && isOrtho(c, d, a);
}
bool test() {
  complex<int> rc0 = points[rect[0]];
  complex<int> rc1 = points[rect[1]];
  complex<int> rc2 = points[rect[2]];
  complex<int> rc3 = points[rect[3]];
  if (rc0 == rc1 || rc0 == rc2 || rc0 == rc3 || rc1 == rc2 || rc1 == rc3 ||
      rc2 == rc3)
    return false;
  complex<int> sq0 = points[sq[0]];
  complex<int> sq1 = points[sq[1]];
  complex<int> sq2 = points[sq[2]];
  complex<int> sq3 = points[sq[3]];
  if (sq0 == sq1 || sq0 == sq2 || sq0 == sq3 || sq1 == sq2 || sq1 == sq3 ||
      sq2 == sq3)
    return false;
  bool brect = false;
  brect = brect || isRect(rc0, rc1, rc2, rc3);
  brect = brect || isRect(rc1, rc2, rc0, rc3);
  brect = brect || isRect(rc2, rc0, rc1, rc3);
  bool bsq = false;
  bsq =
      bsq || (isRect(sq0, sq1, sq2, sq3) && (abs(sq0 - sq1) == abs(sq1 - sq2) &&
                                             abs(sq0 - sq1) == abs(sq2 - sq3) &&
                                             abs(sq0 - sq1) == abs(sq3 - sq0)));
  bsq =
      bsq || (isRect(sq1, sq2, sq0, sq3) && (abs(sq1 - sq2) == abs(sq2 - sq0) &&
                                             abs(sq1 - sq2) == abs(sq0 - sq3) &&
                                             abs(sq1 - sq2) == abs(sq3 - sq1)));
  bsq =
      bsq || (isRect(sq2, sq0, sq1, sq3) && (abs(sq2 - sq0) == abs(sq0 - sq1) &&
                                             abs(sq2 - sq0) == abs(sq1 - sq3) &&
                                             abs(sq2 - sq0) == abs(sq3 - sq2)));
  return bsq && brect;
}
bool search(int x, int y, int n) {
  if (n == 8) {
    if (test()) return true;
    return false;
  } else {
    if (y != 4) {
      rect[y] = n;
      if (search(x, y + 1, n + 1)) return true;
    }
    if (x != 4) {
      sq[x] = n;
      if (search(x + 1, y, n + 1)) return true;
    }
    return false;
  }
}
int main() {
  for (int i = 0; i < 8; ++i) {
    int x, y;
    cin >> x >> y;
    points[i] = complex<int>(x, y);
  }
  if (search(0, 0, 0)) {
    cout << "YES" << endl;
    cout << sq[0] + 1 << " ";
    cout << sq[1] + 1 << " ";
    cout << sq[2] + 1 << " ";
    cout << sq[3] + 1 << endl;
    cout << rect[0] + 1 << " ";
    cout << rect[1] + 1 << " ";
    cout << rect[2] + 1 << " ";
    cout << rect[3] + 1 << endl;
  } else
    cout << "NO" << endl;
}
