#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
const double pi = 3.1415926536;
const double cg = 180.0 / pi;
int a[maxn], b[maxn], c[maxn], d[maxn], e[maxn];
vector<int> good;
bool calangle(int x, int y, int z) {
  int x1 = a[y] - a[x];
  int x2 = b[y] - b[x];
  int x3 = c[y] - c[x];
  int x4 = d[y] - d[x];
  int x5 = e[y] - e[x];
  int y1 = a[z] - a[x];
  int y2 = b[z] - b[x];
  int y3 = c[z] - c[x];
  int y4 = d[z] - d[x];
  int y5 = e[z] - e[x];
  double xy = double(x1 * y1 + x2 * y2 + x3 * y3 + x4 * y4 + x5 * y5);
  double xx = sqrt(double(x1 * x1 + x2 * x2 + x3 * x3 + x4 * x4 + x5 * x5));
  double yy = sqrt(double(y1 * y1 + y2 * y2 + y3 * y3 + y4 * y4 + y5 * y5));
  double angle = acos(xy / (xx * yy));
  if (angle * cg + 1e-9 < 90)
    return false;
  else
    return true;
}
int main() {
  int n;
  while (scanf("%d", &n) != EOF) {
    for (int i = 1; i <= n; i++)
      scanf("%d%d%d%d%d", &a[i], &b[i], &c[i], &d[i], &e[i]);
    int sum = 0;
    good.clear();
    bool isgood;
    for (int i = 1; i <= n; i++) {
      isgood = true;
      for (int j = 1; isgood && j < n; j++) {
        if (j == i) {
          continue;
        }
        for (int k = j + 1; isgood && k <= n; k++) {
          if (k == i) {
            continue;
          }
          isgood = calangle(i, j, k);
        }
      }
      if (isgood) {
        good.push_back(i);
        sum++;
      }
    }
    sort(good.begin(), good.end());
    printf("%d\n", sum);
    if (sum > 0) {
      int len = good.size();
      for (int i = 0; i < len - 1; i++) printf("%d ", good[i]);
      printf("%d\n", good[len - 1]);
    }
  }
  return 0;
}

### Prompt

Construct a cpp code solution to the problem outlined:

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 int maxn = 1e3 + 10;
const double pi = 3.1415926536;
const double cg = 180.0 / pi;
int a[maxn], b[maxn], c[maxn], d[maxn], e[maxn];
vector<int> good;
bool calangle(int x, int y, int z) {
  int x1 = a[y] - a[x];
  int x2 = b[y] - b[x];
  int x3 = c[y] - c[x];
  int x4 = d[y] - d[x];
  int x5 = e[y] - e[x];
  int y1 = a[z] - a[x];
  int y2 = b[z] - b[x];
  int y3 = c[z] - c[x];
  int y4 = d[z] - d[x];
  int y5 = e[z] - e[x];
  double xy = double(x1 * y1 + x2 * y2 + x3 * y3 + x4 * y4 + x5 * y5);
  double xx = sqrt(double(x1 * x1 + x2 * x2 + x3 * x3 + x4 * x4 + x5 * x5));
  double yy = sqrt(double(y1 * y1 + y2 * y2 + y3 * y3 + y4 * y4 + y5 * y5));
  double angle = acos(xy / (xx * yy));
  if (angle * cg + 1e-9 < 90)
    return false;
  else
    return true;
}
int main() {
  int n;
  while (scanf("%d", &n) != EOF) {
    for (int i = 1; i <= n; i++)
      scanf("%d%d%d%d%d", &a[i], &b[i], &c[i], &d[i], &e[i]);
    int sum = 0;
    good.clear();
    bool isgood;
    for (int i = 1; i <= n; i++) {
      isgood = true;
      for (int j = 1; isgood && j < n; j++) {
        if (j == i) {
          continue;
        }
        for (int k = j + 1; isgood && k <= n; k++) {
          if (k == i) {
            continue;
          }
          isgood = calangle(i, j, k);
        }
      }
      if (isgood) {
        good.push_back(i);
        sum++;
      }
    }
    sort(good.begin(), good.end());
    printf("%d\n", sum);
    if (sum > 0) {
      int len = good.size();
      for (int i = 0; i < len - 1; i++) printf("%d ", good[i]);
      printf("%d\n", good[len - 1]);
    }
  }
  return 0;
}

```