source_code: import java.util.*;
  import static java.lang.Math.*;
  
  public class C {
  	public static void main(String[] args){
  		Scanner sc = new Scanner(System.in);
  		hx = sc.nextInt();
  		hy = sc.nextInt();
  		N = sc.nextInt();
  		X = new int[N];
  		Y = new int[N];
  		for(int i = 0; i < N;i++){
  			X[i] = sc.nextInt();
  			Y[i] = sc.nextInt();
  		}
  		DP = new int[1<<N];
  		Arrays.fill(DP,-1);
  		int ans = recur(0);
  		ArrayList<Integer> aa = new ArrayList<Integer>();
  		int U = 0;
  		aa.add(0);
  		int test = 0;
  		while(U != (1<<N)-1){
  			int a = 0;
  			for(int i = 0; i < N;i++)
  				if(((1<<i)&U) == 0){
  					a = i;
  					break;
  				}		
  			int ans2 = recur(U|(1<<a))+2*(pw(X[a]-hx)+pw(Y[a]-hy));
  			int temp = 2*(pw(X[a]-hx)+pw(Y[a]-hy));
  			int best = -1;
  			for(int i = a+1;i<N;i++){
  				if(((1<<i)&U) == 0){
  					int ans3 = pw(X[a]-X[i])+pw(Y[a]-Y[i])+pw(X[a]-hx)+pw(Y[a]-hy)+pw(X[i]-hx)+pw(Y[i]-hy)+recur(U|(1<<a)|(1<<i));
  					if(ans3 < ans2){
  						ans2 = ans3;
  						best = i;
  						temp = pw(X[a]-X[i])+pw(Y[a]-Y[i])+pw(X[a]-hx)+pw(Y[a]-hy)+pw(X[i]-hx)+pw(Y[i]-hy);
  					}
  				}
  			}
  			if(best == -1){
  				aa.add(a+1);
  				aa.add(0);
  				U |= (1<<a);
  			}else{
  				aa.add(a+1);
  				aa.add(best+1);
  				aa.add(0);
  				U |= (1<<a) | (1<<best);
  			}
  			test += temp;
  		}
  //		System.out.println(test);
  		if(test != ans)
  			throw new RuntimeException();
  		System.out.println(ans);
  		for(int i = 0; i < aa.size();i++)
  			System.out.print(aa.get(i)+(i == aa.size()-1?"":" "));
  		System.out.println();
  	}
  	private static int recur(int U) {
  		if(DP[U] != -1)
  			return DP[U];
  		if(U == (1<<N)-1)
  			return 0;
  		int a = 0;
  		for(int i = 0; i < N;i++)
  			if(((1<<i)&U) == 0){
  				a = i;
  				break;
  			}		
  		int ans = recur(U|(1<<a))+2*(pw(X[a]-hx)+pw(Y[a]-hy));
  		for(int i = a+1;i<N;i++){
  			if(((1<<i)&U) == 0){
  				ans = min(ans,pw(X[a]-X[i])+pw(Y[a]-Y[i])+pw(X[a]-hx)+pw(Y[a]-hy)+pw(X[i]-hx)+pw(Y[i]-hy)+recur(U|(1<<a)|(1<<i)));
  			}
  		}
  		DP[U] = ans;
  		return ans;
  	}
  	static int pw(int a){
  		return a*a;
  	}
  	static int hx,hy;
  	static int[] X,Y;
  	static int N;
  	static int[] DP;
  }
  