#include <bits/stdc++.h>
using namespace std;
double len(pair<double, pair<double, int> > a,
           pair<double, pair<double, int> > b) {
  return sqrt(pow(a.first - b.first, 2) +
              pow(a.second.first - b.second.first, 2));
}
bool area(pair<double, pair<double, int> > a,
          pair<double, pair<double, int> > b,
          pair<double, pair<double, int> > c,
          pair<double, pair<double, int> > d) {
  return len(a, b) * len(b, c) != 0;
}
bool isTriangle(double a, double b, double c) {
  return fabs(a * a + b * b - c * c) <= 1e-4;
}
bool eq(double a, double b) { return fabs(a - b) <= 1e-4; }
bool isSquare(pair<double, pair<double, int> > a,
              pair<double, pair<double, int> > b,
              pair<double, pair<double, int> > c,
              pair<double, pair<double, int> > d) {
  vector<pair<double, pair<double, int> > > v;
  double AB, BC, CD, AD, AC, BD;
  v.push_back(a);
  v.push_back(b);
  v.push_back(c);
  v.push_back(d);
  sort(v.begin(), v.end());
  a.first = v[0].first;
  a.second = v[0].second;
  b.first = v[1].first;
  b.second = v[1].second;
  c.first = v[2].first;
  c.second = v[2].second;
  d.first = v[3].first;
  d.second = v[3].second;
  if (b.second < d.second) swap(b, d);
  if (c.second < d.second) swap(c, d);
  if (b.first > c.first) swap(b, c);
  if (!area(a, b, c, d)) return 0;
  AB = len(a, b);
  BC = len(b, c);
  CD = len(c, d);
  AD = len(a, d);
  AC = len(a, c);
  BD = len(b, d);
  if (eq(AB, BC) && eq(BC, CD) && eq(CD, AD) && eq(AC, BD) &&
      isTriangle(AB, AD, BD) && isTriangle(AB, BC, AC) &&
      isTriangle(BC, CD, BD) && isTriangle(CD, AD, AC))
    return 1;
  return 0;
}
bool isRectangle(pair<double, pair<double, int> > a,
                 pair<double, pair<double, int> > b,
                 pair<double, pair<double, int> > c,
                 pair<double, pair<double, int> > d) {
  vector<pair<double, pair<double, int> > > v;
  double AB, BC, CD, AD, AC, BD;
  v.push_back(a);
  v.push_back(b);
  v.push_back(c);
  v.push_back(d);
  sort(v.begin(), v.end());
  a.first = v[0].first;
  a.second = v[0].second;
  b.first = v[1].first;
  b.second = v[1].second;
  c.first = v[2].first;
  c.second = v[2].second;
  d.first = v[3].first;
  d.second = v[3].second;
  if (b.second < d.second) swap(b, d);
  if (c.second < d.second) swap(c, d);
  if (b.first > c.first) swap(b, c);
  if (!area(a, b, c, d)) return 0;
  AB = len(a, b);
  BC = len(b, c);
  CD = len(c, d);
  AD = len(a, d);
  AC = len(a, c);
  BD = len(b, d);
  if (eq(AB, CD) && eq(BC, AD) && eq(AC, BD) && isTriangle(AB, AD, BD) &&
      isTriangle(AB, BC, AC) && isTriangle(BC, CD, BD) &&
      isTriangle(CD, AD, AC))
    return 1;
  return 0;
}
int main() {
  double x1, y1;
  vector<pair<double, pair<double, int> > > A;
  for (int i = 0; i < 8; i++) {
    cin >> x1 >> y1;
    A.push_back(make_pair(x1, make_pair(y1, i + 1)));
  }
  sort(A.begin(), A.end());
  do {
    if (isSquare(A[0], A[1], A[2], A[3]) &&
        isRectangle(A[4], A[5], A[6], A[7])) {
      cout << "YES" << endl;
      for (int i = 0; i < 3; i++) cout << A[i].second.second << " ";
      cout << A[3].second.second << endl;
      for (int i = 4; i < 7; i++) cout << A[i].second.second << " ";
      cout << A[7].second.second << endl;
      return 0;
    }
  } while (next_permutation(A.begin(), A.end()));
  cout << "NO" << endl;
}
