#include <bits/stdc++.h>
using namespace std;
int n, finalstate, status[30], dp[1 << 25], nex[1 << 25];
pair<int, int> inde_x[30];
void pre() {
  status[0] = 1;
  for (int i = 1; i <= n; i++) {
    status[i] = status[i - 1] << 1;
    finalstate |= status[i];
  }
}
int dis(int point1, int point2) {
  return (inde_x[point1].first - inde_x[point2].first) *
             (inde_x[point1].first - inde_x[point2].first) +
         (inde_x[point1].second - inde_x[point2].second) *
             (inde_x[point1].second - inde_x[point2].second);
}
int dis(int point0, int point1, int point2) {
  int sumdis = dis(point0, point1);
  sumdis += dis(point1, point2);
  sumdis += dis(point2, point0);
  return sumdis;
}
int dfs(int state, int p) {
  if (state == finalstate) return 0;
  if (nex[state]) return dp[state];
  if (state & status[p]) return dfs(state, p + 1);
  int nexstate = (state | status[p]);
  dp[state] = (dis(0, p) << 1) + dfs(nexstate, p + 1);
  nex[state] = nexstate;
  for (int i = p + 1; i <= n; i++) {
    if (state & status[i]) continue;
    int tmp = dis(0, p, i) + dfs(nexstate | status[i], p + 1);
    if (tmp < dp[state]) {
      dp[state] = tmp;
      nex[state] = (nexstate | status[i]);
    }
  }
  return dp[state];
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> inde_x[0].first >> inde_x[0].second >> n;
  pre();
  for (int i = 1; i <= n; i++) cin >> inde_x[i].first >> inde_x[i].second;
  cout << dfs(0, 1) << endl << 0;
  for (int state = 0; state != finalstate; state = nex[state]) {
    int exstate = (state ^ nex[state]);
    for (int i = 1; i <= n; i++) {
      if (exstate & status[i]) cout << ' ' << i;
    }
    cout << ' ' << 0;
  }
  return 0;
}
