#include <bits/stdc++.h>
#define maxN 17
#define maxP (1 << 17) + 2
#define mp make_pair
#define pii pair < int, int >
#define f first
#define s second
#define inf 2000000000
using namespace std;
int t, n, m, all, ans, s, dp[maxN][maxP], a[maxN][maxN];
struct coord
{
int x, y;
} v[maxN], w[maxN];
void solve();
void write();
void read()
{
int x = 0;
n = 0;
while (1)
{
scanf("%d", &x);
if (x == 2)
exit(0);
if (x == 1)
{
++ t;
break;
}
scanf("%d %d", &v[n].x, &v[n].y);
++ n;
}
if (t == 1)
++ n;
solve();
write();
read();
}
void init()
{
int i, j;
all = (1 << n) - 1;
ans = inf;
for (i = 0; i < n; ++ i)
for (j = 1; j <= all; ++ j)
dp[i][j] = inf;
for (i = 0; i < n - 1; ++ i)
for (j = i + 1; j < n; ++ j)
a[i][j] = a[j][i] = (v[i].x - v[j].x) * (v[i].x - v[j].x) + (v[i].y - v[j].y) * (v[i].y - v[j].y);
}
int dist(coord a, coord b)
{
return (a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y);
}
int get_dp()
{
int i, j, x;
for (i = 0; i < m; ++ i)
for (j = 0; j < n; ++ j)
dp[j][1 << j] = min(dp[j][1 << j], dp[i][0] + dist(w[i], v[j]));
for (i = 1; i < (1 << n) - 1; ++ i)
for (x = 0; x < n; ++ x)
if (i & (1 << x))
for (j = 0; j < n; ++ j)
if (x != j)
if (!(i & (1 << j)))
dp[j][i ^ (1 << j)] = min(dp[x][i] + a[x][j], dp[j][i ^ (1 << j)]);
m = n;
for (i = 0; i < n; ++ i)
{
if (dp[i][all] < ans)
ans = dp[i][all];
dp[i][0] = dp[i][all];
w[i] = v[i];
}
}
void solve()
{
int i, j, p, val = 0;
init();
get_dp();
m = n;
for (i = 1; i <= m; ++ i)
w[i] = v[i];
}
void write()
{
printf("%d\n", ans);
}
int main()
{
freopen("bibel.in", "r", stdin);
freopen("bibel.out", "w", stdout);
++ m;
read();
return 0;
}