#include <bits/stdc++.h>
using namespace std;
const int maxn = 25;
inline int getDis(pair<int, int> a, pair<int, int> b) {
  return (b.first - a.first) * (b.first - a.first) +
         (b.second - a.second) * (b.second - a.second);
}
pair<int, int> G[maxn];
int dp[1 << maxn];
int dis[maxn][maxn], route[1 << maxn];
int n;
int main() {
  scanf("%d%d", &G[0].first, &G[0].second);
  scanf("%d", &n);
  for (register int i = 1; i <= n; i++)
    scanf("%d%d", &G[i].first, &G[i].second);
  for (register int i = 0; i <= n; i++)
    for (register int j = i; j <= n; j++)
      dis[i][j] = dis[j][i] = getDis(G[i], G[j]);
  memset(route, -1, sizeof route);
  for (register int i = 0; i < (1 << maxn); i++) dp[i] = 0x3f3f3f3f;
  dp[0] = 0;
  for (register int i = 0; i < (1ll << n); i++) {
    if (dp[i] == 0x3f3f3f3f) continue;
    for (register int j = 1; j <= n; j++) {
      if (i & (1ll << (j - 1))) continue;
      for (register int k = 1; k <= n; k++) {
        if (i & (1ll << (k - 1))) continue;
        if (dp[i] + dis[0][j] + dis[j][k] + dis[k][0] <
            dp[i | (1ll << (j - 1)) | (1ll << (k - 1))]) {
          route[i | (1ll << (j - 1) | (1ll << (k - 1)))] = i;
          dp[i | (1ll << (j - 1)) | (1ll << (k - 1))] =
              min(dp[i | (1ll << (j - 1)) | (1ll << (k - 1))],
                  dp[i] + dis[0][j] + dis[j][k] + dis[k][0]);
        }
      }
      break;
    }
  }
  printf("%d\n", dp[(1 << n) - 1]);
  int now = (1 << n) - 1, last = -1;
  printf("0 ");
  while (true) {
    if (last == -1) {
      last = now;
      now = route[now];
      continue;
    } else {
      int change = now ^ last;
      for (register int i = 1; i <= n; i++) {
        if (change & (1ll << (i - 1))) {
          printf("%d ", i);
        }
      }
      last = now;
      now = route[now];
      if (now == -1) {
        for (register int i = 1; i <= n; i++) {
          if (last & (1 << (i - 1))) {
            printf("%d ", i);
          }
        }
        break;
      }
    }
    printf("0 ");
  }
  printf("0");
  return 0;
}
