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.


import java.util.*;



public class C {
	
	public static void main(String[] args)
	{
		Scanner in=new Scanner(System.in);
		int n=in.nextInt();
		int[][] arr=new int[n][5];
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<5;j++)
			{
				arr[i][j]=in.nextInt();
			}
		}
		HashSet<Integer> bads=new HashSet<Integer>();
		HashMap<Index,ArrayList<Integer>> map=new HashMap<Index,ArrayList<Integer>>();
		for(int i=0;i<n;i++)
		{
			for(int j=i+1;j<n;j++)
			{
				Index ind=new Index(i,j);
				ArrayList<Integer> ll=new ArrayList<Integer>();
				for(int k=0;k<5;k++)
				{
					ll.add(arr[j][k]-arr[i][k]);
				}
				map.put(ind, ll);
			}
		}
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<n;j++)
			{
				for(int k=0;k<n;k++)
				{
					if(i!=j && j!=k && i!=k)
					{
						if((i<j && i<k) ||(i>j && i>k))
						{
							ArrayList<Integer> arr1=map.get(new Index(Math.min(i,j),Math.max(i,j)));
							ArrayList<Integer> arr2=map.get(new Index(Math.min(i,k),Math.max(i,k)));
							int num=dot(arr1,arr2);
							double den1=dot(arr1,arr1);
							double den2=dot(arr2,arr2);
							if(den1*den2!=0)
							{
								double val=num/Math.pow((den1*den2), 0.5);
								//System.out.println(val);
								if(val>0 && val<=1)
								{
									bads.add(i);
									break;
								}
							}
							
						}
						else
						{
							ArrayList<Integer> arr1=map.get(new Index(Math.min(i,j),Math.max(i,j)));
							ArrayList<Integer> arr2=map.get(new Index(Math.min(i,k),Math.max(i,k)));
							int num=dot(arr1,arr2);
							double den1=dot(arr1,arr1);
							double den2=dot(arr2,arr2);
							if(den1*den2!=0)
							{
								double val=num/Math.pow((den1*den2), 0.5);
								//System.out.println(val);
								if(val<0 && val>=-1)
								{
									bads.add(i);
									break;
								}
							}
						}
					}
				}
				if(bads.contains(i))break;
			}
		}
		
		System.out.println(n-bads.size());
		for(int i=0;i<n;i++)
		{
			if(!bads.contains(i))System.out.println(i+1);
		}
	}

	private static int dot(ArrayList<Integer> is, ArrayList<Integer> is2)
	{
		// TODO Auto-generated method stub
		int sum=0;
		for(int i=0;i<5;i++)
		{
			sum+=is.get(i)*is2.get(i);
		}
		
		return sum;
	}

}
class Index
{
	int remainingWeights;
	int remainingItems;
	public Index(int a,int b)
	{
		this.remainingItems=a;
		this.remainingWeights=b;
	}
	@Override
	public boolean equals(Object obj) {
		// TODO Auto-generated method stub
		if(this==obj)return true;
		if(obj==null || getClass() !=obj.getClass())return false;
		
		Index index=(Index)obj;
		
		if(remainingWeights!=index.remainingWeights)return false;
		return remainingItems==index.remainingItems;
	}
	
	@Override
	public int hashCode() {
		// TODO Auto-generated method stub
		int result=remainingWeights;
		result=31*result+remainingItems;
		return result;
	}
}

