#include <bits/stdc++.h>
using namespace std;
int in() {
  int a;
  scanf("%d", &a);
  return a;
}
double din() {
  double a;
  scanf("%lf", &a);
  return a;
}
long long gcd(long long a, long long b) {
  if (!b)
    return a;
  else
    return gcd(b, a % b);
}
int lcm(int a, int b) { return a / gcd(a, b) * b; }
const int mod = 1000000007;
const double eps = 1e-9;
int f(long double x) {
  if (fabs(x) < eps) return 0;
  return (x < 0) ? -1 : 1;
}
int or_area(int x1, int y1, int x2, int y2, int x3, int y3, long long &s) {
  s = (x2 - x1) * (y3 - y1) - (y2 - y1) * (x3 - x1);
  if (s < 0) return -1;
  if (s > 0) return 1;
  return 0;
}
long long dist2(int x1, int y1, int x2, int y2) {
  return (x1 - x2) * (x1 - x2) + (y2 - y1) * (y2 - y1);
}
long long sc(int x1, int y1, int x2, int y2, int x3, int y3) {
  return (x2 - x1) * (x3 - x2) + (y2 - y1) * (y3 - y2);
}
int a[8];
vector<pair<int, int> > v;
bool rec(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
  int r = !sc(x1, y1, x2, y2, x3, y3) + !sc(x2, y2, x3, y3, x4, y4) +
          !sc(x3, y3, x4, y4, x1, y1) + !sc(x4, y4, x1, y1, x2, y2);
  if (r == 4) {
    long long ab = dist2(x1, y1, x2, y2), bc = dist2(x2, y2, x3, y3),
              cd = dist2(x3, y3, x4, y4), ad = dist2(x4, y4, x1, y1),
              ac = dist2(x1, y1, x3, y3), bd = dist2(x2, y2, x4, y4);
    return (ab == cd && bc == ad && ab + bc == ac && ab + ad == bd &&
            ad + cd == ac && bc + cd == bd);
  }
  return 0;
}
bool square(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
  if (rec(x1, y1, x2, y2, x3, y3, x4, y4)) {
    long long ab = dist2(x1, y1, x2, y2), bc = dist2(x2, y2, x3, y3),
              cd = dist2(x3, y3, x4, y4), ad = dist2(x4, y4, x1, y1);
    return (ab == bc && bc == cd && cd == ad && ad == ab);
  }
  return 0;
}
int main() {
  for (int i = 0; i < 8; ++i) {
    a[i] = i;
    pair<int, int> cur;
    cur.first = in();
    cur.second = in();
    v.push_back(cur);
  }
  do {
    if (square(v[a[0]].first, v[a[0]].second, v[a[1]].first, v[a[1]].second,
               v[a[2]].first, v[a[2]].second, v[a[3]].first, v[a[3]].second) &&
        rec(v[a[4]].first, v[a[4]].second, v[a[5]].first, v[a[5]].second,
            v[a[6]].first, v[a[6]].second, v[a[7]].first, v[a[7]].second)) {
      puts("YES");
      for (int i = 0; i < 4; ++i) {
        printf("%d ", a[i] + 1);
      }
      printf("\n");
      for (int i = 4; i < 8; ++i) {
        printf("%d ", a[i] + 1);
      }
      printf("\n");
      return 0;
    }
  } while (next_permutation(a, a + 8));
  puts("NO");
  return 0;
}
