#include <bits/stdc++.h>
using namespace std;
const int inf = numeric_limits<int>::max();
const double eps = 1.0e-12;
const double pi = 3.141592653589793238462643383279;
inline string readln() {
  string _s;
  getline(cin, _s);
  return _s;
}
double ca(pair<pair<int, int>, int> a1, pair<pair<int, int>, int> a2) {
  return (double)(a1.first.second - a2.first.second) /
         (a1.first.first - a2.first.first);
}
double dist(pair<pair<int, int>, int> a1, pair<pair<int, int>, int> a2) {
  return sqrt(
      ((a1.first.first - a2.first.first) * (a1.first.first - a2.first.first)) +
      ((a1.first.second - a2.first.second) *
       (a1.first.second - a2.first.second)));
}
bool par(pair<pair<int, int>, int> a1, pair<pair<int, int>, int> a2,
         pair<pair<int, int>, int> b1, pair<pair<int, int>, int> b2) {
  if (a1.first.first == a2.first.first && b1.first.first == b2.first.first)
    return true;
  return ((ca(a1, a2) - ca(b1, b2)) >= 0 ? (ca(a1, a2) - ca(b1, b2))
                                         : (-(ca(a1, a2) - ca(b1, b2)))) < eps;
}
bool perp(pair<pair<int, int>, int> a1, pair<pair<int, int>, int> a2,
          pair<pair<int, int>, int> b1, pair<pair<int, int>, int> b2) {
  if ((a1.first.first == a2.first.first && ca(b1, b2) == 0) ||
      (b1.first.first == b2.first.first) && ca(a1, a2) == 0)
    return true;
  return ((ca(a1, a2) + (double)1 / ca(b1, b2)) >= 0
              ? (ca(a1, a2) + (double)1 / ca(b1, b2))
              : (-(ca(a1, a2) + (double)1 / ca(b1, b2)))) < eps;
}
bool equil(pair<pair<int, int>, int> a1, pair<pair<int, int>, int> a2,
           pair<pair<int, int>, int> b1, pair<pair<int, int>, int> b2) {
  return ((dist(a1, a2) - dist(b1, b2)) >= 0
              ? (dist(a1, a2) - dist(b1, b2))
              : (-(dist(a1, a2) - dist(b1, b2)))) < eps;
}
int main() {
  pair<pair<int, int>, int> v[8];
  for (int i = 0; i < 8; i++) {
    cin >> v[i].first.first >> v[i].first.second;
    v[i].second = i + 1;
  }
  sort(v, v + 8);
  bool found = false;
  do {
    if (par(v[0], v[1], v[2], v[3]) && par(v[1], v[2], v[3], v[0]) &&
        perp(v[0], v[1], v[1], v[2]) && equil(v[0], v[1], v[1], v[2]) &&
        dist(v[0], v[1]) > 0 && par(v[4], v[5], v[6], v[7]) &&
        par(v[5], v[6], v[7], v[4]) && perp(v[4], v[5], v[5], v[6]) &&
        dist(v[4], v[5]) > 0 && dist(v[5], v[6]) > 0)
      found = true;
  } while (!found && next_permutation(v, v + 8));
  if (!found)
    cout << "NO\n";
  else {
    cout << "YES\n";
    for (int i = 0; i < 4; i++) cout << v[i].second << " ";
    cout << "\n";
    for (int i = 4; i <= 7; i++) cout << v[i].second << " ";
    cout << "\n";
  }
  return 0;
}
