#include <bits/stdc++.h>
using namespace std;
struct point {
  point() {}
  point(point a, point b) : x(b.x - a.x), y(b.y - a.y) {}
  int x, y;
};
int operator*(const point& a, const point& b) { return a.x * b.x + a.y * b.y; }
int operator-(const point& a, const point& b) {
  return ((a.x - b.x) * (a.x - b.x)) + ((a.y - b.y) * (a.y - b.y));
}
point p[10];
int r[2][10];
bool used[10];
bool check1(int s) {
  for (int i = 0, j = 1, k = 2; i < 4; i++) {
    if (point(p[r[s][j]], p[r[s][i]]) * point(p[r[s][j]], p[r[s][k]]) != 0)
      return false;
    j++;
    if (j == 4) j = 0;
    k++;
    if (k == 4) k = 0;
  }
  for (int i = 0, j = 1; i < 4; i++) {
    if ((p[r[s][i]] - p[r[s][j]]) == 0) return false;
    j++;
    if (j == 4) j = 0;
  }
  return true;
}
bool check2(int s) {
  if (!check1(s)) return false;
  for (int i = 1; i < 4; i++)
    if ((p[r[s][i - 1]] - p[r[s][i]]) != (p[r[s][0]] - p[r[s][3]]))
      return false;
  return true;
}
void rec(int c, int s) {
  if (c == 4) {
    c = 0;
    s++;
  }
  if (s == 2) {
    if (check2(0) && check1(1)) {
      cout << "YES";
      for (int j = 0; j < 2; j++) {
        cout << endl;
        for (int i = 0; i < 4; i++) cout << r[j][i] + 1 << " ";
      }
      exit(0);
    }
    return;
  }
  for (int i = 0; i < 8; i++)
    if (!used[i]) {
      used[i] = true;
      r[s][c] = i;
      rec(c + 1, s);
      used[i] = false;
    }
}
int main() {
  for (int i = 0; i < 8; i++) cin >> p[i].x >> p[i].y;
  rec(0, 0);
  cout << "NO";
  return 0;
}
