#include <bits/stdc++.h>
using namespace std;
int i, w[10], s[10], x[10], y[10], vv, mask, c, ssize, wsize;
vector<int> V, v;
char ok1, ok2;
inline int sqr(int X) { return (X * X); }
char f(int n1, int n2, int n3, int n4) {
  int a = sqr(y[n1] - y[n2]) + sqr(x[n1] - x[n2]);
  int b = sqr(y[n2] - y[n3]) + sqr(x[n2] - x[n3]);
  int c = sqr(y[n3] - y[n4]) + sqr(x[n3] - x[n4]);
  int d = sqr(y[n4] - y[n1]) + sqr(x[n4] - x[n1]);
  if ((a == b) && (b == c) && (c == d)) {
    int s1 =
        (y[n2] - y[n1]) * (y[n3] - y[n2]) + (x[n2] - x[n1]) * (x[n3] - x[n2]);
    int s2 =
        (y[n3] - y[n2]) * (y[n4] - y[n3]) + (x[n3] - x[n2]) * (x[n4] - x[n3]);
    if ((s1 == 0) && (s2 == 0)) return true;
    return false;
  }
  return false;
}
char g(int n1, int n2, int n3, int n4) {
  int a = sqr(y[n1] - y[n2]) + sqr(x[n1] - x[n2]);
  int b = sqr(y[n2] - y[n3]) + sqr(x[n2] - x[n3]);
  int c = sqr(y[n3] - y[n4]) + sqr(x[n3] - x[n4]);
  int d = sqr(y[n4] - y[n1]) + sqr(x[n4] - x[n1]);
  if ((a == c) && (b == d)) {
    int s1 =
        (y[n2] - y[n1]) * (y[n3] - y[n2]) + (x[n2] - x[n1]) * (x[n3] - x[n2]);
    int s2 =
        (y[n3] - y[n2]) * (y[n4] - y[n3]) + (x[n3] - x[n2]) * (x[n4] - x[n3]);
    if ((s1 == 0) && (s2 == 0)) return true;
    return false;
  }
  return false;
}
int main() {
  for (i = 0; i < 8; i++) cin >> x[i] >> y[i];
  for (mask = 0; mask < 256; mask++) {
    vv = mask;
    c = 0;
    while (vv) {
      c += (vv % 2);
      vv /= 2;
    }
    if (c != 4) continue;
    ssize = wsize = 0;
    for (i = 0; i < 8; i++)
      if ((mask & (1 << i)) == 0)
        s[ssize++] = i;
      else
        w[wsize++] = i;
    v.clear();
    for (i = 0; i < 4; i++) v.push_back(i);
    ok1 = false;
    do {
      if (f(s[v[0]], s[v[1]], s[v[2]], s[v[3]])) {
        ok1 = true;
        break;
      }
    } while (next_permutation(v.begin(), v.end()));
    V.clear();
    for (i = 0; i < 4; i++) V.push_back(i);
    ok2 = false;
    do {
      if (g(w[V[0]], w[V[1]], w[V[2]], w[V[3]])) {
        ok2 = true;
        break;
      }
    } while (next_permutation(V.begin(), V.end()));
    if (ok1 && ok2) {
      printf("YES\n");
      for (i = 0; i < 3; i++) printf("%d ", s[v[i]] + 1);
      printf("%d\n", s[v[3]] + 1);
      for (i = 0; i < 3; i++) printf("%d ", w[V[i]] + 1);
      printf("%d\n", w[V[3]] + 1);
      return 0;
    }
  }
  printf("NO\n");
  return 0;
}
