#include <bits/stdc++.h>
using namespace std;
const int inf = 1 << 30;
pair<int, int> p[10];
int pat[8];
inline int calc(pair<int, int> a, pair<int, int> b) {
  return (a.first - b.first) * (a.first - b.first) +
         (a.second - b.second) * (a.second - b.second);
}
bool check(pair<int, int> a, pair<int, int> b, pair<int, int> c) {
  return (((b.first - a.first) * (c.first - b.first) +
           (b.second - a.second) * (c.second - b.second)) == 0);
}
bool check_ret(pair<int, int> a, pair<int, int> b, pair<int, int> c,
               pair<int, int> d) {
  bool fa = check(a, b, c);
  bool fb = check(a, d, c);
  bool fc = check(b, c, d);
  return (fa && fb && fc);
}
bool check_sqr(pair<int, int> a, pair<int, int> b, pair<int, int> c,
               pair<int, int> d) {
  vector<int> len;
  len.clear();
  len.push_back(calc(a, b));
  len.push_back(calc(a, c));
  len.push_back(calc(a, d));
  len.push_back(calc(b, c));
  len.push_back(calc(d, b));
  len.push_back(calc(c, d));
  len.erase(unique(len.begin(), len.end()) - 1, len.end());
  sort(len.begin(), len.end());
  if (len.size() != 2 || len[0] * 2 != len[1])
    return false;
  else
    return true;
}
int main() {
  int a, b;
  for (int i = 1; i <= 8; i++) {
    pat[i - 1] = i;
    cin >> a >> b;
    p[i] = make_pair(a, b);
  }
  do {
    if (check_sqr(p[pat[0]], p[pat[1]], p[pat[2]], p[pat[3]])) {
      if (check_ret(p[pat[4]], p[pat[5]], p[pat[6]], p[pat[7]])) {
        cout << "YES" << endl;
        cout << pat[0] << " " << pat[1] << " " << pat[2] << " " << pat[3]
             << endl;
        cout << pat[4] << " " << pat[5] << " " << pat[6] << " " << pat[7]
             << endl;
        return 0;
      }
    }
  } while (next_permutation(pat, pat + 8));
  cout << "NO" << endl;
  return 0;
}
