#include <bits/stdc++.h>
using namespace std;
template <typename T>
inline void Int(T &n) {
  n = 0;
  int f = 1;
  register int ch = getchar();
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') f = -1;
  for (; isdigit(ch); ch = getchar()) n = (n << 3) + (n << 1) + ch - '0';
  n = n * f;
}
template <typename T>
T gcd(T a, T b) {
  return !b ? a : gcd(b, a % b);
}
template <typename T>
inline void umin(T &a, T b) {
  a = a < b ? a : b;
}
template <typename T>
inline void umax(T &a, T b) {
  a = a > b ? a : b;
}
template <typename T, typename W>
inline void Int(T &x, W &y) {
  Int(x), Int(y);
}
template <typename T, typename W, typename Q>
inline void Int(T &x, W &y, Q &z) {
  Int(x, y), Int(z);
}
const int N = 1e5 + 7;
const int inf = 1e9 + 7;
pair<int, int> p[10];
inline int sq(int x) { return x * x; }
inline int dist(int i, int j) {
  int x1 = p[i].first, y1 = p[i].second;
  int x2 = p[j].first, y2 = p[j].second;
  return sq(x1 - x2) + sq(y1 - y2);
}
inline bool isRightAngledTriangle(int i, int j, int k) {
  return dist(i, j) + dist(j, k) == dist(i, k);
}
inline bool isSquare(vector<int> &S) {
  bool ok = true;
  ok &= isRightAngledTriangle(S[0], S[1], S[2]);
  ok &= isRightAngledTriangle(S[1], S[2], S[3]);
  ok &= isRightAngledTriangle(S[2], S[3], S[0]);
  ok &= isRightAngledTriangle(S[3], S[0], S[1]);
  S.push_back(S[0]);
  for (int i = 1; i <= 3; ++i)
    ok &= dist(S[i - 1], S[i]) == dist(S[i], S[i + 1]);
  return ok;
}
inline bool isRectangle(vector<int> &R) {
  bool ok = true;
  ok &= isRightAngledTriangle(R[0], R[1], R[2]);
  ok &= isRightAngledTriangle(R[1], R[2], R[3]);
  ok &= isRightAngledTriangle(R[2], R[3], R[0]);
  ok &= isRightAngledTriangle(R[3], R[0], R[1]);
  return ok;
}
int solve() {
  vector<int> idx;
  for (int i = 1; i <= 8; ++i) {
    idx.push_back(i);
    Int(p[i].first, p[i].second);
  }
  do {
    vector<int> S, R;
    for (int i = 0; i <= 3; ++i) S.push_back(idx[i]);
    for (int i = 4; i <= 7; ++i) R.push_back(idx[i]);
    if (isSquare(S) and isRectangle(R)) {
      printf("YES\n");
      printf("%d %d %d %d\n", idx[0], idx[1], idx[2], idx[3]);
      printf("%d %d %d %d\n", idx[4], idx[5], idx[6], idx[7]);
      return 0;
    }
  } while (next_permutation(idx.begin(), idx.end()));
  printf("NO\n");
  return 0;
}
int main() {
  int tests = 1, CaseNo = 0;
  while (tests--) {
    solve();
  }
  return 0;
}
