#include <bits/stdc++.h>
using namespace std;
int perm[4];
vector<pair<int, int>> ret, sq;
pair<int, int> v[8];
void init() {
  for (int i = 0; i < 4; i++) {
    perm[i] = i;
  }
}
long long dist(pair<int, int> p1, pair<int, int> p2) {
  return (p1.first - p2.first) * (p1.first - p2.first) +
         (p1.second - p2.second) * (p1.second - p2.second);
}
bool noventa(pair<int, int> p1, pair<int, int> p2, pair<int, int> p3) {
  long double num1, den1, num2, den2;
  num1 = p2.second - p1.second;
  den1 = p2.first - p1.first;
  num2 = p3.first - p2.first;
  den2 = p3.second - p2.second;
  if (num1 < 0 && den1 < 0) num1 = -num1, den1 = -den1;
  if (num2 < 0 && den2 < 0) num2 = -num2, den2 = -den2;
  return (num1 * den2 == -(den1 * num2));
}
bool testDist(int quem) {
  vector<pair<int, int>> test;
  if (quem)
    test = ret;
  else
    test = sq;
  bool retu = true;
  for (int i = 0; i < 4; i++) {
    if (dist(test[perm[i]], test[perm[(i + 1) % 4]]) !=
        dist(test[perm[(i + 1) % 4]], test[perm[(i + 2) % 4]]))
      retu = false;
  }
  return retu;
}
bool testAngl(int quem) {
  vector<pair<int, int>> test;
  if (quem)
    test = ret;
  else
    test = sq;
  bool retu = true;
  for (int i = 0; i < 4; i++) {
    if (!noventa(test[perm[i]], test[perm[(i + 1) % 4]],
                 test[perm[(i + 2) % 4]]))
      retu = false;
  }
  return retu;
}
bool test(int i) {
  sq.clear();
  ret.clear();
  int aux = i;
  for (int j = 0; j < 8; j++) {
    if (aux % 2) {
      sq.push_back(v[j]);
    } else
      ret.push_back(v[j]);
    aux /= 2;
  }
  if (sq.size() != 4) return false;
  bool square = false, rectangle = false;
  sort(perm, perm + 4);
  do {
    if (testDist(0) && testAngl(0)) {
      square = true;
    }
  } while (next_permutation(perm, perm + 4));
  sort(perm, perm + 4);
  do {
    if (testAngl(1)) {
      rectangle = true;
    }
  } while (next_permutation(perm, perm + 4));
  if (square && rectangle) return true;
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  init();
  n = 8;
  for (int i = 0; i < n; i++) {
    cin >> v[i].first >> v[i].second;
  }
  for (int i = 0; i < 1 << 8; i++) {
    if (test(i)) {
      vector<int> resa, resb;
      int aux = i;
      for (int j = 0; j < 8; j++) {
        if (aux % 2) {
          resa.push_back(j);
        } else
          resb.push_back(j);
        aux /= 2;
      }
      cout << "YES"
           << "\n";
      for (int i = 0; i < resa.size(); i++) {
        cout << resa[i] + 1 << " ";
      }
      cout << "\n";
      for (int i = 0; i < resb.size(); i++) {
        cout << resb[i] + 1 << " ";
      }
      cout << "\n";
      return 0;
    }
  }
  cout << "NO"
       << "\n";
}
