#include <bits/stdc++.h>
using namespace std;
pair<int, int> pp[30];
int sx, sy;
int dis(int x1, int y1, int x2, int y2) {
  return ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
int dp[(1 << 24) + 10], n, dir[(1 << 24) + 10];
bool vis[(1 << 24) + 10];
int solve(int mask) {
  if (mask == ((1 << n) - 1)) return 0;
  if (vis[mask]) return dp[mask];
  int lowbit = -1;
  for (int i = 0; i < n; i++) {
    if ((mask & (1 << i)) == 0) {
      lowbit = i;
      break;
    }
  }
  int ans = 1000000000, nmask = mask | (1 << lowbit);
  ans = min(
      ans, 2 * dis(sx, sy, pp[lowbit].first, pp[lowbit].second) + solve(nmask));
  dir[mask] = lowbit;
  for (int i = n - 1; i > lowbit; i--) {
    if ((mask & (1 << i)) == 0) {
      int tdis =
          dis(sx, sy, pp[i].first, pp[i].second) +
          dis(pp[lowbit].first, pp[lowbit].second, pp[i].first, pp[i].second) +
          dis(pp[lowbit].first, pp[lowbit].second, sx, sy);
      int tans = tdis + solve(nmask | (1 << i));
      if (tans < ans) ans = tans, dir[mask] = i;
    }
  }
  vis[mask] = 1;
  return dp[mask] = ans;
}
int main() {
  scanf("%d %d", &sx, &sy);
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d %d", &pp[i].first, &pp[i].second);
  printf("%d\n0 ", solve(0));
  for (int mask = 0; mask != (1 << n) - 1;) {
    int lowbit = -1;
    for (int i = 0; i < n; i++) {
      if ((mask & (1 << i)) == 0) {
        lowbit = i;
        break;
      }
    }
    int tmask = mask | (1 << lowbit);
    if (dir[mask] == lowbit) {
      printf("%d 0 ", lowbit + 1);
      mask = tmask;
    } else {
      printf("%d %d 0 ", dir[mask] + 1, lowbit + 1);
      mask = (tmask | (1 << dir[mask]));
    }
  }
}
