#include <iostream>
#include <ctime>
#include <stdlib.h>
using namespace std;
const int infinity = 100000000;
typedef int vector;
vector metric(vector a, vector b){
if (a == b)
return infinity;
return (a < b) ? b - a : a - b;
}
vector vertices[10];
int graph[10][10] = {0};
int stats[10 + 1] = {0};
bool muteces[10] = {0};
int minimum = infinity;
int cur_begin;
int Prolong(int target_vertix, int sum, int starting_vertix, int step = 0){
if (sum > minimum){
++stats[step];
return infinity;
}
if (step == 9)
return sum + graph[target_vertix][starting_vertix];
int best_result = infinity;
for (int i = 0; i < 10; ++i){
if (muteces[i] != true && graph[target_vertix][i] != infinity){
muteces[i] = true;
int tmp = Prolong(i, sum + graph[target_vertix][i], starting_vertix, step + 1);
muteces[i] = false;
if (tmp < best_result)
best_result = tmp;
}
}
if (best_result < minimum)
minimum = best_result;
return minimum;
}
int Solve(){
muteces[0] = true;
int res = Prolong(0, 0, 0);
muteces[0] = false;
for (int i = 1; i < 10; ++i){
muteces[i] = true;
int tmp = Prolong(i, 0, i);
muteces[i] = false;
if (tmp < res)
res = tmp;
}
return res;
}
int main(){
srand(time(NULL));
for (int i = 0; i < 10; ++i)
vertices[i] = rand() % 1007;
for (int i = 0; i < 10; ++i)
for (int j = 0; j < 10; ++j)
graph[i][j] = metric(vertices[i],vertices[j]);
cout << Solve() << endl;
for (int i = 0; i < 10; ++i)
cout << stats[i] << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3RpbWU+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGludCBpbmZpbml0eSA9IDEwMDAwMDAwMDsKdHlwZWRlZiBpbnQgdmVjdG9yOwp2ZWN0b3IgbWV0cmljKHZlY3RvciBhLCB2ZWN0b3IgYil7CiAgICBpZiAoYSA9PSBiKQogICAgICAgIHJldHVybiBpbmZpbml0eTsKICAgIHJldHVybiAoYSA8IGIpID8gYiAtIGEgOiBhIC0gYjsKfQoKdmVjdG9yIHZlcnRpY2VzWzEwXTsKaW50IGdyYXBoWzEwXVsxMF0gPSB7MH07CmludCBzdGF0c1sxMCArIDFdID0gezB9Owpib29sIG11dGVjZXNbMTBdID0gezB9OwoKCgppbnQgbWluaW11bSA9IGluZmluaXR5OwppbnQgY3VyX2JlZ2luOwoKCmludCBQcm9sb25nKGludCB0YXJnZXRfdmVydGl4LCBpbnQgc3VtLCBpbnQgc3RhcnRpbmdfdmVydGl4LCBpbnQgc3RlcCA9IDApewogICAgaWYgKHN1bSA+IG1pbmltdW0pewogICAgICAgICsrc3RhdHNbc3RlcF07CiAgICAgICAgcmV0dXJuIGluZmluaXR5OwogICAgfQoKICAgIGlmIChzdGVwID09IDkpCiAgICAgICAgcmV0dXJuIHN1bSArIGdyYXBoW3RhcmdldF92ZXJ0aXhdW3N0YXJ0aW5nX3ZlcnRpeF07IAogICAgaW50IGJlc3RfcmVzdWx0ID0gaW5maW5pdHk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpewogICAgICAgIGlmIChtdXRlY2VzW2ldICE9IHRydWUgJiYgZ3JhcGhbdGFyZ2V0X3ZlcnRpeF1baV0gIT0gaW5maW5pdHkpewogICAgICAgICAgICBtdXRlY2VzW2ldID0gdHJ1ZTsKCiAgICAgICAgICAgIGludCB0bXAgPSBQcm9sb25nKGksIHN1bSArIGdyYXBoW3RhcmdldF92ZXJ0aXhdW2ldLCBzdGFydGluZ192ZXJ0aXgsIHN0ZXAgKyAxKTsKICAgICAgICAgICAgbXV0ZWNlc1tpXSA9IGZhbHNlOwogICAgICAgICAgICBpZiAodG1wIDwgYmVzdF9yZXN1bHQpCiAgICAgICAgICAgICAgICBiZXN0X3Jlc3VsdCA9IHRtcDsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGJlc3RfcmVzdWx0IDwgbWluaW11bSkKICAgICAgICBtaW5pbXVtID0gYmVzdF9yZXN1bHQ7CiAgICByZXR1cm4gbWluaW11bTsKfQppbnQgU29sdmUoKXsKICAgIG11dGVjZXNbMF0gPSB0cnVlOwogICAgaW50IHJlcyA9IFByb2xvbmcoMCwgMCwgMCk7CiAgICBtdXRlY2VzWzBdID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IDEwOyArK2kpewogICAgICAgIAogICAgICAgIG11dGVjZXNbaV0gPSB0cnVlOwogICAgICAgIGludCB0bXAgPSBQcm9sb25nKGksIDAsIGkpOwogICAgICAgIG11dGVjZXNbaV0gPSBmYWxzZTsKICAgICAgICBpZiAodG1wIDwgcmVzKQogICAgICAgICAgICByZXMgPSB0bXA7CiAgICB9CiAgICByZXR1cm4gcmVzOwp9CgoKaW50IG1haW4oKXsKICAgIAogICAgc3JhbmQodGltZShOVUxMKSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwOyArK2kpCiAgICAgICAgdmVydGljZXNbaV0gPSByYW5kKCkgJSAxMDA3OwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDEwOyArK2opCiAgICAgICAgICAgIGdyYXBoW2ldW2pdID0gbWV0cmljKHZlcnRpY2VzW2ldLHZlcnRpY2VzW2pdKTsKICAgIGNvdXQgPDwgU29sdmUoKSA8PCBlbmRsOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDsgKytpKQogICAgICAgIGNvdXQgPDwgc3RhdHNbaV0gPDwgZW5kbDsKICAgIHJldHVybiAwOwoKfQ==