#include <bits/stdc++.h>
using namespace std;
const int N = 8;
const double eps = 1e-10;
struct Point {
  int x, y;
  int id;
};
Point a[N], b[N], c[N];
bool vis[N];
int A[N];
double calcDis(Point a, Point b) {
  return sqrt((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
double calcDot(Point a, Point b, Point c) {
  double x1 = b.x - a.x;
  double y1 = b.y - a.y;
  double x2 = c.x - a.x;
  double y2 = c.y - a.y;
  return x1 * x2 + y1 * y2;
}
bool isRec() {
  for (int i = 0; i < N / 2; ++i)
    if (calcDot(a[(i + 1) % 4], a[i], a[(i + 2) % 4]) != 0) return false;
  return true;
}
bool isSqu() {
  if (!isRec()) return false;
  double L = calcDis(a[3], a[0]);
  for (int i = 0; i < 3; ++i)
    if (fabs(calcDis(a[i], a[i + 1]) - L) > eps) return false;
  return true;
}
void Solve() {
  for (int i = 0; i < N / 2; ++i) a[i] = c[A[i]];
  if (!isSqu()) return;
  for (int i = N / 2; i < N; ++i) a[i - N / 2] = c[A[i]];
  if (!isRec()) return;
  cout << "YES" << endl;
  for (int i = 0; i < N / 2; ++i) cout << A[i] + 1 << ' ';
  cout << endl;
  for (int i = N / 2; i < N; ++i) cout << A[i] + 1 << ' ';
  cout << endl;
  exit(0);
}
void DFS(int x) {
  if (x == N) {
    Solve();
    return;
  }
  for (int i = 0; i < N; ++i)
    if (!vis[i]) {
      vis[i] = true;
      A[x] = i;
      DFS(x + 1);
      vis[i] = false;
    }
}
int main() {
  for (int i = 0; i < N; ++i) {
    cin >> c[i].x >> c[i].y;
    c[i].id = i;
  }
  DFS(0);
  cout << "NO" << endl;
}
