#include <bits/stdc++.h>
using namespace std;
bool sw;
int arr[8];
pair<int, int> points[8];
long long AB, BC, AC, BD;
long long dist(pair<int, int> a, pair<int, int> b) {
  return (a.first - b.first) * (a.first - b.first) +
         (a.second - b.second) * (a.second - b.second);
}
long long dot(int a, int b, int c, int d) {
  return (points[arr[a]].first - points[arr[b]].first) *
             (points[arr[c]].first - points[arr[d]].first) +
         (points[arr[a]].second - points[arr[b]].second) *
             (points[arr[c]].second - points[arr[d]].second);
}
void solve() {
  AB = dist(points[arr[0]], points[arr[1]]);
  BC = dist(points[arr[1]], points[arr[2]]);
  AC = dist(points[arr[0]], points[arr[2]]);
  BD = dist(points[arr[1]], points[arr[3]]);
  long long ans = dot(0, 1, 1, 2);
  if (AC != BD || !AB || !BC || dot(0, 1, 1, 2) || dot(1, 2, 2, 3) ||
      dot(2, 3, 3, 0))
    return;
  AB = dist(points[arr[4]], points[arr[5]]);
  BC = dist(points[arr[5]], points[arr[6]]);
  AC = dist(points[arr[4]], points[arr[6]]);
  BD = dist(points[arr[5]], points[arr[7]]);
  if (AB != BC || AC != BD || !AB || dot(4, 5, 5, 6) || dot(5, 6, 6, 7) ||
      dot(6, 7, 7, 4))
    return;
  sw = true;
}
int main() {
  for (int i = 0; i < 8; ++i)
    arr[i] = i, cin >> points[i].first >> points[i].second;
  do {
    sw = false;
    solve();
    if (sw) break;
  } while (next_permutation(arr, arr + 8));
  if (sw) {
    puts("YES");
    for (int i = 7; i > -1; --i)
      if (i == 4)
        cout << ++arr[i] << "\n";
      else
        cout << ++arr[i] << " ";
  } else {
    puts("NO");
  }
  return 0;
}
