#include <bits/stdc++.h>
using namespace std;
const int oo = 0x3f3f3f3f;
const double eps = 1e-9;
vector<pair<int, int> > pnts(8);
double dist(pair<int, int> p1, pair<int, int> p2) {
  double dx = p1.first - p2.first;
  double dy = p1.second - p2.second;
  return sqrt(dx * dx + dy * dy);
}
bool is_square(vector<int> p) {
  double v1 = dist(pnts[p[0]], pnts[p[1]]);
  double v2 = dist(pnts[p[1]], pnts[p[2]]);
  return (abs(v1 - v2) < eps);
}
pair<double, double> arthm(pair<int, int> p1, pair<int, int> p2) {
  double px = double(p1.first + p2.first) / 2;
  double py = double(p1.second + p2.second) / 2;
  return make_pair(px, py);
}
bool is_rect(vector<int> p, bool type) {
  sort((p).begin(), (p).end());
  do {
    pair<double, double> m1 = arthm(pnts[p[0]], pnts[p[2]]);
    pair<double, double> m2 = arthm(pnts[p[1]], pnts[p[3]]);
    double d1 = dist(pnts[p[0]], pnts[p[2]]);
    double d2 = dist(pnts[p[1]], pnts[p[3]]);
    if (abs(m1.first - m2.first) < eps && abs(m1.second - m2.second) < eps &&
        abs(d1 - d2) < eps) {
      if (!type)
        return true;
      else if (is_square(p))
        return true;
    }
  } while (next_permutation((p).begin(), (p).end()));
  return false;
}
int main() {
  for (int i = (0); i < (8); ++i) cin >> pnts[i].first >> pnts[i].second;
  vector<int> p(8), pp(4), pd(4);
  for (int i = (0); i < (8); ++i) p[i] = i;
  do {
    for (int i = (0); i < (4); ++i) pp[i] = p[i];
    for (int i = (0); i < (4); ++i) pd[i] = p[i + 4];
    if (is_rect(pp, true) && is_rect(pd, false)) {
      cout << "YES" << endl;
      for (int i = (0); i < (4); ++i) cout << pp[i] + 1 << " ";
      cout << endl;
      for (int i = (0); i < (4); ++i) cout << pd[i] + 1 << " ";
      cout << endl;
      return 0;
    }
  } while (next_permutation((p).begin(), (p).end()));
  cout << "NO" << endl;
  return 0;
}
