#include <bits/stdc++.h>
using namespace std;
int n, dp[1 << 24], tr[1 << 24];
void getpath(int s) {
  if (!tr[s]) return;
  getpath(s ^ tr[s]);
  for (int i = 0; i < n; i++)
    if (tr[s] & 1 << i) printf(" %d", i + 1);
  printf(" 0");
}
int main() {
  int x[25], y[25], a[25][25];
  scanf("%d%d%d", &x[0], &y[0], &n);
  swap(x[0], x[n]);
  swap(y[0], y[n]);
  for (int i = 0; i < n; i++) scanf("%d%d", &x[i], &y[i]);
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++)
      a[i][j] = (x[i] - x[j]) * (x[i] - x[j]) + (y[i] - y[j]) * (y[i] - y[j]);
  int mask = 1 << n;
  memset(dp + 1, 63, sizeof(int) * (mask - 1));
  for (int r = 0; r < mask; r++) {
    if (dp[r] > 99999999) continue;
    int u = __builtin_ctz(~r & r + 1);
    for (int v = 0; v < n; v++) {
      if (r & 1 << v) continue;
      if (dp[r] + a[n][u] + a[u][v] + a[v][n] < dp[r | 1 << u | 1 << v]) {
        dp[r | 1 << u | 1 << v] = dp[r] + a[n][u] + a[u][v] + a[v][n];
        tr[r | 1 << u | 1 << v] = 1 << u | 1 << v;
      }
    }
  }
  printf("%d\n0", dp[mask - 1]);
  getpath(mask - 1);
}
