#include <bits/stdc++.h>
using namespace std;
const int INF = 1000000000;
const long long INFLL = 100000000000000000ll;
const long long MOD = 1000000007;
bool U[10];
int X[10], Y[10];
vector<pair<int, int>> R, S;
bool isSquare() {
  int dx = S[1].first - S[0].first;
  int dy = S[1].second - S[0].second;
  for (int i = (2); i <= (4); i++) {
    swap(dx, dy);
    dy *= -1;
    if (S[i - 1].first + dx != S[i % 4].first ||
        S[i - 1].second + dy != S[i % 4].second)
      return false;
  }
  return true;
}
bool isRect() {
  if (R[1].first - R[0].first != R[2].first - R[3].first) return false;
  if (R[1].second - R[0].second != R[2].second - R[3].second) return false;
  if (R[0].first - R[3].first != R[1].first - R[2].first) return false;
  if (R[0].second - R[3].second != R[1].second - R[2].second) return false;
  int vx1 = R[1].first - R[0].first;
  int vy1 = R[1].second - R[0].second;
  int vx2 = R[1].first - R[2].first;
  int vy2 = R[1].second - R[2].second;
  return vx1 * vx2 + vy1 * vy2 == 0;
}
bool square() {
  int r = 0;
  do {
    r++;
    next_permutation(S.begin(), S.end());
    if (isSquare()) return true;
  } while (r < 24);
  return false;
}
bool rect() {
  int r = 0;
  do {
    r++;
    next_permutation(R.begin(), R.end());
    if (isRect()) return true;
  } while (r < 24);
  return false;
}
bool ok() { return square() && rect(); }
void print() {
  cout << "YES\n";
  for (int x = (0); x <= (3); x++)
    for (int i = (1); i <= (8); i++)
      if (make_pair(X[i], Y[i]) == S[x] && !U[i]) {
        cout << i << " ", U[i] = true;
        break;
      }
  cout << "\n";
  for (int x = (0); x <= (3); x++)
    for (int i = (1); i <= (8); i++)
      if (make_pair(X[i], Y[i]) == R[x] && !U[i]) {
        cout << i << " ", U[i] = true;
        break;
      }
  exit(0);
}
void dfs(int i) {
  if (i > 8) {
    if (ok()) print();
    return;
  }
  if (((int)R.size()) < 4) {
    R.push_back({X[i], Y[i]});
    dfs(i + 1);
    R.pop_back();
  }
  if (((int)S.size()) < 4) {
    S.push_back({X[i], Y[i]});
    dfs(i + 1);
    S.pop_back();
  }
}
int main() {
  for (int i = (1); i <= (8); i++) cin >> X[i] >> Y[i];
  dfs(1);
  cout << "NO";
}
