#include <bits/stdc++.h>
using namespace std;
const double exps = 1e-6;
pair<double, double> p[10];
int id[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
bool st[10];
vector<pair<double, double> > v1, v2;
vector<int> res;
bool flag = false;
bool check(double a, double b) { return fabs(a - b) <= exps; }
double dist(pair<double, double> a, pair<double, double> b) {
  return (a.first - b.first) * (a.first - b.first) +
         (a.second - b.second) * (a.second - b.second);
}
bool ver(pair<double, double> a, pair<double, double> b,
         pair<double, double> c) {
  return (c.first - a.first) * (b.first - a.first) +
             (c.second - a.second) * (b.second - a.second) ==
         0;
}
bool pd() {
  bool flag = false;
  if (dist(p[id[1]], p[id[2]]) == dist(p[id[2]], p[id[3]]) &&
      dist(p[id[2]], p[id[3]]) == dist(p[id[3]], p[id[4]]) &&
      dist(p[id[3]], p[id[4]]) == dist(p[id[4]], p[id[1]]) &&
      dist(p[id[1]], p[id[3]]) == dist(p[id[4]], p[id[2]]) &&
      ver(p[id[1]], p[id[2]], p[id[4]]))
    flag = true;
  if (!flag) return false;
  flag = false;
  if (dist(p[id[5]], p[id[6]]) == dist(p[id[7]], p[id[8]]) &&
      dist(p[id[5]], p[id[8]]) == dist(p[id[6]], p[id[7]]) &&
      dist(p[id[5]], p[id[7]]) == dist(p[id[6]], p[id[8]]) &&
      ver(p[id[5]], p[id[6]], p[id[8]]))
    flag = true;
  if (flag) {
    cout << "YES" << endl;
    for (int i = 1; i <= 4; i++) cout << id[i] << " ";
    cout << endl;
    for (int i = 5; i <= 8; i++) cout << id[i] << " ";
    cout << endl;
    return true;
  }
  return false;
}
int main() {
  for (int i = 1; i <= 8; i++) cin >> p[i].first >> p[i].second;
  while (next_permutation(id + 1, id + 9)) {
    if (pd()) return 0;
  }
  cout << "NO" << endl;
}
