#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
pair<int, int> arr[30];
pair<int, int> origin;
int checkdist[30][30], n;
bool is_set(int i, int mask) { return mask & (1 << i); }
int dist[30][30], dp[1 << 25];
int sq(int x) { return x * x; }
int calc_dist(pair<int, int> a, pair<int, int> b) {
  return sq(a.first - b.first) + sq(a.second - b.second);
}
int check_dist(int i, int j) {
  return dist[i][j] + calc_dist(origin, arr[i]) + calc_dist(origin, arr[j]);
}
int solve(int mask) {
  int j;
  if (mask == (1 << n) - 1) {
    dp[mask] = 0;
    return 0;
  }
  int res = 1e9 + 5, res2 = 1e9 + 5;
  if (dp[mask] != -1) return dp[mask];
  int mini = 1e9 + 5;
  int i = 0;
  while (i < n && is_set(i, mask)) ++i;
  res = solve(mask | (1 << i));
  res += 2 * calc_dist(arr[i], origin);
  mini = res;
  for (j = i + 1; j < n; ++j) {
    if (!is_set(j, mask)) {
      int tmpmask = mask;
      tmpmask |= (1 << i);
      tmpmask |= (1 << j);
      res2 = solve(tmpmask);
      res2 += check_dist(i, j);
      mini = min(mini, res);
      mini = min(mini, res2);
    }
  }
  return (dp[mask] = mini);
}
void preprocess() {
  int i, j;
  for (i = 0; i < n; ++i) {
    for (j = 0; j < n; ++j) {
      dist[i][j] = dist[j][i] = calc_dist(arr[i], arr[j]);
      checkdist[i][j] = checkdist[j][i] = check_dist(i, j);
    }
  }
}
int main() {
  int t, m, l, k, ans, i, j, res = 0, fl;
  scanf("%d", &origin.first);
  scanf("%d", &origin.second);
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    scanf("%d", &arr[i].first);
    scanf("%d", &arr[i].second);
  }
  preprocess();
  int maxi = (1 << n);
  for (i = 0; i <= maxi; ++i) dp[i] = -1;
  res = solve(0);
  cout << res << endl;
  cout << "0 ";
  int mask = 0;
  while (1) {
    if (mask == (1 << n) - 1) break;
    for (i = 0; i < n; ++i) {
      if (!is_set(i, mask)) {
        if (dp[mask | (1 << i)] == dp[mask] - 2 * calc_dist(origin, arr[i])) {
          cout << i + 1 << ' ' << "0 ";
          mask |= (1 << i);
          continue;
        }
        for (j = i + 1; j < n; ++j) {
          if (!is_set(j, mask)) {
            int tmp = mask;
            tmp |= (1 << i);
            tmp |= (1 << j);
            if (dp[tmp] + check_dist(i, j) == dp[mask]) {
              cout << i + 1 << ' ' << j + 1 << " 0 ";
              mask = tmp;
              break;
            }
          }
        }
        break;
      }
    }
  }
  return 0;
}
