#include<bits/stdc++.h>
using namespace std;
int n,x[25],y[25];
map<int,int> dp[25],nxt[25];
inline int f(int x){
return x*x;
}
int dfs(int lst,int s){
if(s==(1<<n)-1)
return f(x[lst]-x[0])+f(y[lst]-y[0]);
if(dp[lst].count(s))
return dp[lst][s];
dp[lst][s]=1e9+7;
for(int i=1;i<=n;++i)
if(!(s&(1<<i-1))){
int w=dfs(i,s|(1<<i-1))+min(f(x[lst]-x[i])+f(y[lst]-y[i]),f(x[lst]-y[0])+f(y[lst]-y[0])+f(x[i]-x[0])+f(y[i]-y[0]));
if(w<dp[lst][s]){
dp[lst][s]=w;
nxt[lst][s]=i;
}
}
return dp[lst][s];
}
void ask(int lst,int s){
int t=nxt[lst][s];
if(!t)
return;
if(f(x[lst]-x[t])+f(y[lst]-y[t])>f(x[lst]-y[0])+f(y[lst]-y[0])+f(x[t]-x[0])+f(y[t]-y[0]))
putchar(' '),putchar('0');
printf(" %d",t);
ask(t,s|(1<<t-1));
}
int main(){
cin>>x[0]>>y[0];
cin>>n;
for(int i=1;i<=n;++i)
cin>>x[i]>>y[i];
cout<<dfs(0,0)<<endl;
putchar('0');
ask(0,0);
putchar(' '),putchar('0');
return 0;
}