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.
from sys import exit

from itertools import combinations

class Vector5D:
    def __init__(self, xs):
        if len(xs) != 5:
            raise Exception("pidor")

        self.xs = xs

    def __sub__(self, other):
        return Vector5D([a - b for a, b in zip(self.xs, other.xs)])

    def __abs__(self):
        return sum(x ** 2 for x in self.xs)

    def dot(self, other):
        return sum(a * b for a, b in zip(self.xs, other.xs))

    def __repr__(self):
        return '(%s)' % (' '.join(str(x) for x in self.xs), )

n = int(raw_input())

if n > 2 ** (5 + 1):
    print 0

    exit(0)

vs = []

for _ in xrange(n):
    xs = map(int, raw_input().split(' '))

    vs.append(Vector5D(xs))

good_points = []

for i in xrange(len(vs)):
    for j, k in combinations(range(len(vs)), 2):
        if j == i or k == i or j > k:
            continue

        ab = vs[j] - vs[i]
        ac = vs[k] - vs[i]

        if ab.dot(ac) > 0:
            break
    else:
        good_points.append(i)

print len(good_points)

for i in good_points:
    print i + 1
