#include <bits/stdc++.h>
const int MAX = 400010;
const int MOD = 1e9 + 7;
const int INF = 0x3f3f3f3f;
const long long LLINF = 0x3f3f3f3f3f3f3f3f;
const long double EPS = 1e-25;
const long double PI = acosl(-1.0);
using namespace std;
bool eq(int a, int b) { return (a == b); }
struct point {
  int x, y;
  int id;
  point(int x = 0, int y = 0) : x(x), y(y) {}
  point operator+(const point &o) const { return {x + o.x, y + o.y}; }
  point operator-(const point &o) const { return {x - o.x, y - o.y}; }
  point operator*(int t) const { return {x * t, y * t}; }
  point operator/(int t) const { return {x / t, y / t}; }
  bool operator==(const point &o) const { return eq(x, o.x) and eq(y, o.y); }
};
int cross(point a, point b) { return a.x * b.y - a.y * b.x; }
int dot(point a, point b) { return a.x * b.x + a.y * b.y; }
long double norm(point a) { return sqrt(dot(a, a)); }
vector<point> v;
bool rect(vector<int> s) {
  for (int i = 0; i < 4; i++)
    for (int j = 0; j < 4; j++)
      for (int k = 0; k < 4; k++)
        for (int l = 0; l < 4; l++)
          if (l != i and l != j and l != k and i != j and i != k and j != k)
            if (!dot(v[s[i]] - v[s[k]], v[s[j]] - v[s[k]]) and
                !dot(v[s[i]] - v[s[l]], v[s[j]] - v[s[l]]))
              return true;
  return false;
}
bool sq(vector<int> s) {
  if (!rect(s)) return false;
  long double dist = INF;
  for (int i = 0; i < 4; i++)
    for (int j = i + 1; j < 4; j++) dist = min(dist, norm(v[s[i]] - v[s[j]]));
  int count = 0;
  for (int i = 0; i < 4; i++)
    for (int j = i + 1; j < 4; j++)
      if (norm(v[s[i]] - v[s[j]]) == dist) count++;
  if (count == 4) return true;
  return false;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int x, y, n = 8;
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    v.push_back(point(x, y));
  }
  for (int i = 0; i < n; i++)
    for (int j = i + 1; j < n; j++)
      for (int k = j + 1; k < n; k++)
        for (int l = k + 1; l < n; l++) {
          vector<int> s1, s2;
          for (int m = 0; m < n; m++) {
            if (m == i or m == j or m == k or m == l)
              s1.push_back(m);
            else
              s2.push_back(m);
          }
          if (sq(s1) and rect(s2)) {
            cout << "YES\n";
            for (auto s : s1) cout << s + 1 << " ";
            cout << '\n';
            for (auto s : s2) cout << s + 1 << " ";
            cout << '\n';
            return 0;
          } else if (sq(s2) and rect(s1)) {
            cout << "YES\n";
            for (auto s : s2) cout << s + 1 << " ";
            cout << '\n';
            for (auto s : s1) cout << s + 1 << " ";
            cout << '\n';
            return 0;
          }
        }
  cout << "NO\n";
  return 0;
}
