#include <bits/stdc++.h>
using namespace std;
long long n;
long long m;
long long t;
void solve() {}
struct point {
  long long x, y;
};
bool isSquare(point a, point b, point c, point d) {
  long long dist1 =
      (long long)(b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y);
  long long dist2 =
      (long long)(b.x - c.x) * (b.x - c.x) + (b.y - c.y) * (b.y - c.y);
  long long dist3 =
      (long long)(c.x - d.x) * (c.x - d.x) + (c.y - d.y) * (c.y - d.y);
  long long dist4 =
      (long long)(a.x - d.x) * (a.x - d.x) + (a.y - d.y) * (a.y - d.y);
  return dist1 == dist2 && dist1 == dist3 && dist1 == dist4;
}
bool noZeroArea(point a, point b, point c, point d) {
  long long dist1 =
      (long long)(b.x - a.x) * (b.x - a.x) + (b.y - a.y) * (b.y - a.y);
  long long dist2 =
      (long long)(b.x - c.x) * (b.x - c.x) + (b.y - c.y) * (b.y - c.y);
  long long dist3 =
      (long long)(c.x - d.x) * (c.x - d.x) + (c.y - d.y) * (c.y - d.y);
  long long dist4 =
      (long long)(a.x - d.x) * (a.x - d.x) + (a.y - d.y) * (a.y - d.y);
  if (dist1 > 0 && dist2 > 0 && dist3 > 0 && dist4 > 0) return true;
  return false;
}
long long IsOrthogonal(point a, point b, point c) {
  return (b.x - a.x) * (b.x - c.x) + (b.y - a.y) * (b.y - c.y) == 0;
}
long long IsRectangle(point a, point b, point c, point d) {
  return IsOrthogonal(a, b, c) && IsOrthogonal(b, c, d) &&
         IsOrthogonal(c, d, a) && noZeroArea(a, b, c, d);
}
long long IsRectangleAnyOrder(point a, point b, point c, point d) {
  return IsRectangle(a, b, c, d) || IsRectangle(b, c, a, d) ||
         IsRectangle(c, a, b, d);
}
long long IsSquareAnyOrder(point a, point b, point c, point d) {
  return (IsRectangle(a, b, c, d) && isSquare(a, b, c, d)) ||
         (IsRectangle(b, c, a, d) && isSquare(b, c, a, d)) ||
         (IsRectangle(c, a, b, d) && isSquare(c, a, b, d));
}
int main() {
  ios_base::sync_with_stdio(false);
  point pt[10];
  for (int i = 1; i <= 8; i++) {
    long long x, y;
    cin >> x >> y;
    pt[i].x = x;
    pt[i].y = y;
  }
  int mtints[] = {1, 2, 3, 4, 5, 6, 7, 8};
  sort(mtints, mtints + 8);
  do {
    if (IsSquareAnyOrder(pt[mtints[0]], pt[mtints[1]], pt[mtints[2]],
                         pt[mtints[3]]) &&
        IsRectangleAnyOrder(pt[mtints[4]], pt[mtints[5]], pt[mtints[6]],
                            pt[mtints[7]])) {
      cout << "YES" << endl;
      cout << mtints[0] << " " << mtints[1] << " " << mtints[2] << " "
           << mtints[3] << endl;
      cout << mtints[4] << " " << mtints[5] << " " << mtints[6] << " "
           << mtints[7] << endl;
      return 0;
    }
  } while (next_permutation(mtints, mtints + 8));
  cout << "NO" << endl;
  return 0;
}
