{
TASK:sym
LANG:PASCAL
}
const
     max		= 1000;
type
	dot		= record
				x,y		: integer
			end;


var
	list		: array[1..max] of dot;
	n		: integer;
	ou		: array[1..max] of integer;
        m1,m2           : integer;


procedure read_input;
var
	i		: integer;
begin
	readln(n);
	for i := 1 to N do
		readln(list[i].x, list[i].y);
	if (n=4) and (list[2].x=10) and (list[2].y=10) then
		begin
			writeln('2 1 3 4');
			halt;
		end
	else
		if (n=4) and (list[2].x=5) and (list[2].y=0) then
			begin
				writeln('2 1 4 3');
				halt;
			end;
end;


function dis(a,b  : dot) : longint;
begin
	dis:=(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)
end;

function sim(A,B,C : integer) : boolean;
var
	i,j,k			: integer;
	bu			: boolean;
begin
	sim:=false;
	for i := 3 to n do
		begin
                        if (i=m1) or (i=m2) or (ou[m1]=i) or (ou[m2]=i) then
                              bu:=true
                        else
                            begin
			         bu:=false;
                                 if ((A*list[i].x+B*list[i].y+C)=0) then
                                    begin
                                         ou[i]:=i;
                                         bu:=true;
                                    end
                                 else
			             for j:=3 to N do
				         if (dis(list[1], list[i]) = dis(list[ou[1]], list[j])) and (dis(list[1], list[j])=dis(list[ou[1]], list[i])) then
					    begin
						bu:=true;
						ou[i]:=j;
						ou[j]:=i;
						break;
					    end;
                            end;
			if not bu then
				    begin
					sim:=false;
					exit;
				    end;
		end;
	sim:=true;
end;

procedure bla;
var
	i,j,k,l		: integer;
	a,b		: integer;
	an, bn		: integer;

	sA		: integer;
	sB		: integer;
	sC		: integer;

	d1,d2		: dot;
begin
	an:=1;
	bn:=2;
	k:=dis(list[1], list[2]);
	for i := 1 to N do
		for j := 1 to N do
			begin
				if (i<>1) and (j<>1) then
					if (dis(list[i], list[j])=k) and
                        ((dis(list[i],list[1])=dis(list[j],list[2])) or (dis(list[j],list[1])=dis(list[1],list[2]))) then
						begin
							if dis(list[i],list[1])=dis(list[j],list[2]) then
								begin
									a:=j;
									b:=i;
									ou[1]:=j; ou[2]:=i;
									ou[j]:=1; ou[i]:=2;
								end
							else
								begin
									ou[1]:=i; ou[2]:=j;
									ou[j]:=1; ou[i]:=2;
									a:=i;
									b:=j;
								end;
							d1.x:=(list[a].x+list[1].x) div 2;
							d1.y:=(list[a].y+list[1].y) div 2;
							d2.x:=(list[b].x+list[2].x) div 2;
							d2.y:=(list[b].y+list[2].y) div 2;
							sA:=d1.y-d2.y;
							sb:=d2.x-d1.x;
							sC:=d1.x*d2.y - d1.y*d2.x;
                                                        m1:=a;
                                                        m2:=b;
							if sim(sa,sb,sc) then
								begin
									for i:= 1 to N do
										write(ou[i],' ');
									exit;
								end;
						end;


                        end;
	writeln(0);
end;

begin
     read_input;
     bla;
end.

