(*
 * II Всероссийская Командная Олимпиада Школьников по Программированию
 *
 * Задача:      Триангуляция Делоне
 * Автор:       Андрей Станкевич
 * Решение:     Андрей Станкевич
 *)

{$A+,B-,D+,E+,F-,G+,I+,L+,N+,O-,P+,Q-,R-,S-,T-,V-,X+,Y+}
{$M 65520,0,655360}

program delone_triangulation;

const
    maxdig = 100;
    eps = 1e-5;

type
    tlong = array [0..maxdig] of longint;

procedure init(var z: tlong; x: longint);
var
    i: longint;
begin
    fillchar(z, sizeof(z), 0);
    i := 1;
    while x > 0 do
    begin
        z[i] := x mod 10;
        x := x div 10;
        inc(i);
    end;
end;    
    
procedure add(x, y: tlong; var z: tlong);
var
    i, c: longint;
begin
    c := 0;
    for i := 1 to maxdig do
    begin
        c := c + x[i] + y[i];
        z[i] := c mod 10;
        c := c div 10;
    end;
end;

procedure mul(x, y: tlong; var z: tlong);
var
    i, j: longint;
begin
    fillchar(z, sizeof(z), 0);
    for i := 1 to maxdig do
        for j := 1 to maxdig - i + 1 do
            z[i + j - 1] := z[i + j - 1] + x[i] * y[j];
    for i := 1 to maxdig - 1 do
    begin
        z[i + 1] := z[i + 1] + z[i] div 10;
        z[i] := z[i] mod 10;
    end;
end;

procedure outp(const x: tlong);
var
    i: longint;
begin
    i := maxdig;
    while (x[i] = 0) and (i > 1) do
        dec(i);
    while (i > 0) do
    begin
        write(x[i]);
        dec(i);
    end;
    writeln;
end;

function dist(x1, y1, x2, y2: double): double;
begin
    dist := sqrt(sqr(x1 - x2) + sqr(y1 - y2));
end;

procedure find_center(x1, y1, x2, y2, x3, y3: double; var xc, yc: double);
var
    x4, y4, x5, y5: double;
    a1, b1, c1, a2, b2, c2, d1, d2: double;
    d: double;
begin
    x4 := (x1 + x2) / 2;
    y4 := (y1 + y2) / 2;
    x5 := (x2 + x3) / 2;
    y5 := (y2 + y3) / 2;
    
    a1 := x1 - x2;
    b1 := y1 - y2;
    c1 := a1 * x4 + b1 * y4;
    a2 := x2 - x3;
    b2 := y2 - y3;
    c2 := a2 * x5 + b2 * y5;
    
    d := a1 * b2 - a2 * b1;
    if abs(d) < eps then
    begin
        writeln('3 points on a line');
        runerror(239);
    end;
    xc := (c1 * b2 - c2 * b1) / d;
    yc := (a1 * c2 - a2 * c1) / d;
end;

var
    i, j, k, l, p, n, m: longint;
    tmp, r: tlong;
    dw: array [0..100] of tlong;
    x, y: array [0..100] of double;
    a: array [0..100] of longint;
    xc, yc: double;
    d: double;
    b: boolean;
    
begin
{    assign(input, 'input.txt');
    reset(input);
    assign(output, 'output.txt');
    rewrite(output);}
    
    read(n);
    for i := 1 to n do
        read(x[i], y[i]);
        
    init(dw[0], 1);
    init(dw[1], 1);
    for i := 2 to n do
    begin
        dw[i] := dw[i - 1];
        for j := 2 to i do
        begin
            mul(dw[j - 1], dw[i - j], tmp);
            add(dw[i], tmp, dw[i]);
        end;
{        write(i + 2 :3, ' ');
        outp(dw[i]);}
    end;
    
        
    init(r, 1);
    for i := 1 to n do
        for j := i + 1 to n do
            for k := j + 1 to n do
            begin
                find_center(x[i], y[i], x[j], y[j], x[k], y[k], xc, yc);
                d := dist(x[i], y[i], xc, yc);
                p := 0;
                b := true;
                m := 0;
                for l := 1 to n do
                begin
                    if dist(x[l], y[l], xc, yc) <= d - eps then
                    begin
                        b := false;
                        break;
                    end;
                    if abs(dist(x[l], y[l], xc, yc) - d) < eps then
                    begin
                        inc(m);
                        a[m] := l;
                        inc(p);
                    end;
                end;
                if b then 
                    if (a[1] = i) and (a[2] = j) and (a[3] = k) then
                        mul(r, dw[p - 2], r);
            end;
    outp(r);
    
    close(input);
    close(output);
end.
