#include <bits/stdc++.h>
using namespace std;
void io() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
}
const int MAXN = 8 + 5;
const long long INF = 0x3f3f3f3f3f3f3f;
const long long MOD = 1e9 + 7;
struct Point {
  int x;
  int y;
  Point(int _x = 0, int _y = 0) : x(_x), y(_y) {}
  Point operator+(const Point& oth) { return Point(x + oth.x, y + oth.y); }
  Point operator-(const Point& oth) { return Point(x - oth.x, y - oth.y); }
  Point operator-() { return Point(-x, -y); }
  int operator*(const Point& oth) { return x * oth.x + y * oth.y; }
  int length() { return x * x + y * y; }
} p[MAXN];
bool choose[MAXN];
int p1[MAXN], p2[MAXN];
int cross(const Point& a, const Point& b) { return a.x * b.y - b.x * a.y; }
bool cmp(const Point& a, const Point& b) { return a.x == b.x && a.y == b.y; }
bool check1() {
  Point l1 = p[p1[1]] - p[p1[0]];
  Point l2 = p[p1[2]] - p[p1[1]];
  Point l3 = p[p1[3]] - p[p1[2]];
  return (l1 * l2 == 0) && (l2 * l3 == 0) && (l1.length() == l2.length()) &&
         l1.length() && l2.length() && cmp(l1, -l3);
}
bool check2() {
  Point l1 = p[p2[1]] - p[p2[0]];
  Point l2 = p[p2[2]] - p[p2[1]];
  Point l3 = p[p2[3]] - p[p2[2]];
  return (l1 * l2 == 0) && (l2 * l3 == 0) && l1.length() && l2.length() &&
         cmp(l1, -l3);
}
bool solve() {
  bool flag1 = check1();
  if (!flag1) {
    swap(p1[0], p1[1]);
    flag1 = check1();
    swap(p1[0], p1[1]);
  }
  if (!flag1) {
    swap(p1[1], p1[2]);
    flag1 = check1();
    swap(p1[1], p1[2]);
  }
  if (!flag1) {
    swap(p1[2], p1[3]);
    flag1 = check1();
    swap(p1[2], p1[3]);
  }
  bool flag2 = check2();
  if (!flag2) {
    swap(p2[0], p2[1]);
    flag2 = check2();
    swap(p2[0], p2[1]);
  }
  if (!flag2) {
    swap(p2[1], p2[2]);
    flag2 = check2();
    swap(p2[1], p2[2]);
  }
  if (!flag2) {
    swap(p2[2], p2[3]);
    flag2 = check2();
    swap(p2[2], p2[3]);
  }
  return flag1 && flag2;
}
bool dfs(int p, int cnt) {
  if (cnt == 0) {
    int cnt1 = 0, cnt2 = 0;
    for (int i = 0; i < 8; i++) {
      if (choose[i]) {
        p1[cnt1++] = i;
      } else {
        p2[cnt2++] = i;
      }
    }
    return solve();
  }
  for (int i = p; i < 8; i++) {
    choose[i] = true;
    if (dfs(i + 1, cnt - 1)) {
      return true;
    }
    choose[i] = false;
  }
  return false;
}
int main() {
  io();
  for (int i = 0; i < 8; i++) {
    cin >> p[i].x >> p[i].y;
  }
  if (dfs(0, 4)) {
    cout << "YES\n";
    for (int i = 0; i < 4; i++) {
      cout << p1[i] + 1 << ' ';
    }
    cout << '\n';
    for (int i = 0; i < 4; i++) {
      cout << p2[i] + 1 << ' ';
    }
    cout << '\n';
  } else {
    cout << "NO\n";
  }
}
