#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7;
const long long int maxn = 1e3 + 10;
long long int maxnn = 1e18;
double pie = 3.1415926535;
vector<long long int> v[maxn];
long long int cancel[maxn], n;
bool check(long long int x) {
  long long int a, b, c, d, e, a1, a2, b1, b2, c1, c2, d1, d2, e1, e2, i, j;
  a = v[x][0];
  b = v[x][1];
  c = v[x][2];
  d = v[x][3];
  e = v[x][4];
  for (i = 1; i <= n; i++) {
    if (x == i) continue;
    a1 = a - v[i][0];
    b1 = b - v[i][1];
    c1 = c - v[i][2];
    d1 = d - v[i][3];
    e1 = e - v[i][4];
    for (j = i + 1; j <= n; j++) {
      if (x == j) continue;
      a2 = a - v[j][0];
      b2 = b - v[j][1];
      c2 = c - v[j][2];
      d2 = d - v[j][3];
      e2 = e - v[j][4];
      double p = a1 * a2 + b1 * b2 + c1 * c2 + d1 * d2 + e1 * e2;
      double x1 = sqrt(a1 * a1 + b1 * b1 + c1 * c1 + d1 * d1 + e1 * e1);
      double x2 = sqrt(a2 * a2 + b2 * b2 + c2 * c2 + d2 * d2 + e2 * e2);
      double param = p / (x1 * x2);
      double result = acos(param) * 180.0 / pie;
      if (result >= 90) {
        cancel[i] = 1;
        cancel[j] = 1;
      } else {
        return false;
      }
    }
  }
  return true;
}
int main() {
  long long int i, a, b, c, d, e;
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> a >> b >> c >> d >> e;
    v[i].push_back(a);
    v[i].push_back(b);
    v[i].push_back(c);
    v[i].push_back(d);
    v[i].push_back(e);
  }
  if (n == 2) {
    cout << "2" << endl;
    cout << "1 2" << endl;
    exit(0);
  }
  for (i = 1; i <= n; i++) {
    if (cancel[i] == 1) continue;
    if (check(i)) {
      cout << "1" << endl;
      cout << i << endl;
      exit(0);
    }
  }
  cout << 0 << endl;
}

### Prompt

Please formulate a Cpp solution to the following problem:

You are given set of n points in 5-dimensional space. The points are labeled from 1 to n. No two points coincide.

We will call point a bad if there are different points b and c, not equal to a, from the given set such that angle between vectors <image> and <image> is acute (i.e. strictly less than <image>). Otherwise, the point is called good.

The angle between vectors <image> and <image> in 5-dimensional space is defined as <image>, where <image> is the scalar product and <image> is length of <image>.

Given the list of points, print the indices of the good points in ascending order.

Input

The first line of input contains a single integer n (1 ≤ n ≤ 103) — the number of points.

The next n lines of input contain five integers ai, bi, ci, di, ei (|ai|, |bi|, |ci|, |di|, |ei| ≤ 103) — the coordinates of the i-th point. All points are distinct.

Output

First, print a single integer k — the number of good points.

Then, print k integers, each on their own line — the indices of the good points in ascending order.

Examples

Input

6
0 0 0 0 0
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1


Output

1
1


Input

3
0 0 1 2 0
0 0 9 2 0
0 0 5 9 0


Output

0

Note

In the first sample, the first point forms exactly a <image> angle with all other pairs of points, so it is good.

In the second sample, along the cd plane, we can see the points look as follows:

<image>

We can see that all angles here are acute, so no points are good.

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7;
const long long int maxn = 1e3 + 10;
long long int maxnn = 1e18;
double pie = 3.1415926535;
vector<long long int> v[maxn];
long long int cancel[maxn], n;
bool check(long long int x) {
  long long int a, b, c, d, e, a1, a2, b1, b2, c1, c2, d1, d2, e1, e2, i, j;
  a = v[x][0];
  b = v[x][1];
  c = v[x][2];
  d = v[x][3];
  e = v[x][4];
  for (i = 1; i <= n; i++) {
    if (x == i) continue;
    a1 = a - v[i][0];
    b1 = b - v[i][1];
    c1 = c - v[i][2];
    d1 = d - v[i][3];
    e1 = e - v[i][4];
    for (j = i + 1; j <= n; j++) {
      if (x == j) continue;
      a2 = a - v[j][0];
      b2 = b - v[j][1];
      c2 = c - v[j][2];
      d2 = d - v[j][3];
      e2 = e - v[j][4];
      double p = a1 * a2 + b1 * b2 + c1 * c2 + d1 * d2 + e1 * e2;
      double x1 = sqrt(a1 * a1 + b1 * b1 + c1 * c1 + d1 * d1 + e1 * e1);
      double x2 = sqrt(a2 * a2 + b2 * b2 + c2 * c2 + d2 * d2 + e2 * e2);
      double param = p / (x1 * x2);
      double result = acos(param) * 180.0 / pie;
      if (result >= 90) {
        cancel[i] = 1;
        cancel[j] = 1;
      } else {
        return false;
      }
    }
  }
  return true;
}
int main() {
  long long int i, a, b, c, d, e;
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  cin >> n;
  for (i = 1; i <= n; i++) {
    cin >> a >> b >> c >> d >> e;
    v[i].push_back(a);
    v[i].push_back(b);
    v[i].push_back(c);
    v[i].push_back(d);
    v[i].push_back(e);
  }
  if (n == 2) {
    cout << "2" << endl;
    cout << "1 2" << endl;
    exit(0);
  }
  for (i = 1; i <= n; i++) {
    if (cancel[i] == 1) continue;
    if (check(i)) {
      cout << "1" << endl;
      cout << i << endl;
      exit(0);
    }
  }
  cout << 0 << endl;
}

```