#include <bits/stdc++.h>
using namespace std;
struct co {
  long long x, y;
};
long long dsq(co a, co b) {
  return ((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
bool squarecheck(co a, co b, co c, co d) {
  if (dsq(a, b) == dsq(c, d) && dsq(a, d) == dsq(d, b) &&
      dsq(d, b) == dsq(b, c) && dsq(c, a) == dsq(a, d) && dsq(a, d) != 0)
    return 1;
  if (dsq(a, c) == dsq(b, d) && dsq(a, b) == dsq(b, c) &&
      dsq(b, c) == dsq(c, d) && dsq(c, d) == dsq(d, a) && dsq(d, a) != 0)
    return 1;
  if (dsq(a, d) == dsq(b, c) && dsq(a, c) == dsq(c, d) &&
      dsq(d, b) == dsq(c, d) && dsq(d, b) == dsq(b, a) && dsq(b, a) != 0)
    return 1;
  return 0;
}
bool rectcheck(co a, co b, co c, co d) {
  if (dsq(a, b) == dsq(c, d) && dsq(b, c) == dsq(a, d) &&
      dsq(a, c) == dsq(b, d) && dsq(a, c) != 0)
    return 1;
  return 0;
}
string s(8, '0');
void increment() {
  int i = 7;
  while (s[i] != '0' && i >= 0) {
    s[i] = '0';
    i--;
  }
  if (i >= 0) s[i] = '1';
}
int main() {
  vector<co> v, v1, v2;
  co c;
  long long i, j;
  for (i = 1; i <= 8; i++) {
    cin >> c.x >> c.y;
    v.push_back(c);
  }
  i = 0;
  while (i != 256) {
    increment();
    i++;
    if (__builtin_popcount(i) == 4) {
      v1.clear();
      v2.clear();
      for (j = 0; j < 8; j++) {
        if (s[j] == '1')
          v1.push_back(v[j]);
        else if (s[j] == '0')
          v2.push_back(v[j]);
      }
      if (squarecheck(v1[0], v1[1], v1[2], v1[3]) &&
          rectcheck(v2[0], v2[1], v2[2], v2[3])) {
        cout << "YES" << endl;
        for (j = 0; j < 8; j++) {
          if (s[j] == '1') cout << j + 1 << " ";
        }
        cout << endl;
        for (j = 0; j < 8; j++) {
          if (s[j] == '0') cout << j + 1 << " ";
        }
        cout << endl;
        return 0;
      }
    }
  }
  cout << "NO";
  return 0;
}
