CF8C Looking for Order

题目描述

Lena 喜欢秩序井然的生活。一天,她要去上大学了。突然,她发现整个房间乱糟糟的——她的手提包里的物品都散落在了地上。她想把所有的物品都放回她的手提包。但是,这里有一点问题:她一次最多只能拿两个物品,她也不能移动她的手提包。并且,因为她爱整洁的习惯,如果她拿起了一个物品,她也不能将它放在其他地方,除非放回她的手提包。 Lena 把她的房间划分为了一个平面直角坐标系。现在 Lena 给你她的手提包和每个散落的物品的坐标(当然,一开始的时候她就和手提包站在一个地方)。她从坐标 $(x_1,y_1)$ 走到坐标 $(x_2,y_2)$ 需要用 $(x_1-x_2)^2+(y_1-y_2)^2$ 单位的时间。现在,Lena 将告诉你她的房间的情况,请你为 Lena 找到一个拾起每个物品的顺序,使她拾起所有物品所需的总时间最小。当然,Lena 最后需要返回她的手提包。

输入格式

输入文件的第一行为 Lena 的手提包的坐标 $(x_s,y_s)$。第二行为一个正整数 $n$($1\le n\le24$),表示总的需要拾起的物品数。接下来的 $n$ 行每行包括两个整数,表示每个物品的坐标。

输出格式

输出的第一行为一个正整数,表示 Lena 拾起所有物品所需的最小时间。 输出的第二行为 Lena 拾起每个物品的顺序。(每一个物品由它的编号代表,$0$ 表示手提包)她应该从手提包 $0$ 出发,在手提包 $0$ 结束。 如,`0 1 2 0 3 0` 表示她从手提包出发,先拾起 $1$ 号物品,再拾起 $2$ 号物品,然后返回手提包(并放下 $1$ 和 $2$),再拾起 $3$ 号物品,最后返回手提包。 如果有多条允许的路径,输出任一条。

说明/提示

感谢 @星烁晶熠辉 提供的翻译。