#include <bits/stdc++.h>
using namespace std;
long long dist(pair<pair<long long, long long>, long long> a,
               pair<pair<long long, long long>, long long> b) {
  return (
      ((a.first.first - b.first.first) * (a.first.first - b.first.first)) +
      ((a.first.second - b.first.second) * (a.first.second - b.first.second)));
}
bool is_sqaure(vector<pair<pair<long long, long long>, long long> > a) {
  long long d2 = dist(a[0], a[1]);
  long long d3 = dist(a[0], a[2]);
  long long d4 = dist(a[0], a[3]);
  if (d2 == d3 && 2 * d2 == d4) {
    long long d = dist(a[1], a[3]);
    return (d == dist(a[2], a[3]) && d == d2);
  }
  if (d3 == d4 && 2 * d3 == d2) {
    long long d = dist(a[1], a[2]);
    return (d == dist(a[1], a[3]) && d == d3);
  }
  if (d2 == d4 && 2 * d2 == d3) {
    long long d = dist(a[1], a[2]);
    return (d == dist(a[2], a[3]) && d == d2);
  }
  return false;
}
bool is_rect(vector<pair<pair<long long, long long>, long long> > a) {
  long double cx = (a[4].first.first + a[5].first.first + a[6].first.first +
                    a[7].first.first) /
                   4.0;
  long double cy = (a[4].first.second + a[5].first.second + a[6].first.second +
                    a[7].first.second) /
                   4.0;
  long double dd1, dd2, dd3, dd4;
  dd1 = (cx - a[4].first.first) * (cx - a[4].first.first) +
        (cy - a[4].first.second) * (cy - a[4].first.second);
  dd2 = (cx - a[5].first.first) * (cx - a[5].first.first) +
        (cy - a[5].first.second) * (cy - a[5].first.second);
  dd3 = (cx - a[6].first.first) * (cx - a[6].first.first) +
        (cy - a[6].first.second) * (cy - a[6].first.second);
  dd4 = (cx - a[7].first.first) * (cx - a[7].first.first) +
        (cy - a[7].first.second) * (cy - a[7].first.second);
  return abs(dd1 - dd2) <= 0.0000001 && abs(dd1 - dd3) <= 0.0000001 &&
         abs(dd1 - dd4) <= 0.0000001;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  vector<pair<pair<long long, long long>, long long> > a(8);
  for (int i = 0; i < 8; i++) {
    cin >> a[i].first.first >> a[i].first.second;
    a[i].second = i + 1;
  }
  sort(a.begin(), a.end());
  long long flag = 0;
  do {
    if (is_sqaure(a) && is_rect(a)) {
      flag = 1;
      break;
    }
  } while (next_permutation(a.begin(), a.end()));
  if (!flag) {
    cout << "NO";
    return 0;
  }
  cout << "YES\n";
  for (int i = 0; i < 4; i++) {
    cout << a[i].second << " ";
  }
  cout << "\n";
  for (int i = 4; i < 8; i++) {
    cout << a[i].second << " ";
  }
  return 0;
}
