#include #include #include #include using namespace std; vector > parse2(vector nums) { vector > ret; ret.resize(2); ret[0].resize(2); ret[1].resize(2); ret[0][1] = nums[0]; ret[1][0] = nums[1]; return ret; } vector > parse6(vector nums) { vector > ret; ret.resize(3); ret[0].resize(3); ret[1].resize(3); ret[2].resize(3); ret[0][1] = nums[0]; ret[1][0] = nums[1]; ret[0][2] = nums[2]; ret[2][0] = nums[3]; ret[1][2] = nums[4]; ret[2][1] = nums[5]; return ret; } vector > parse12(vector nums) { vector > ret; ret.resize(4); ret[0].resize(4); ret[1].resize(4); ret[2].resize(4); ret[3].resize(4); ret[0][1] = nums[0]; ret[1][0] = nums[1]; ret[0][2] = nums[2]; ret[2][0] = nums[3]; ret[0][3] = nums[4]; ret[3][0] = nums[5]; ret[1][2] = nums[6]; ret[2][1] = nums[7]; ret[1][3] = nums[8]; ret[3][1] = nums[9]; ret[2][3] = nums[10]; ret[3][2] = nums[11]; return ret; } void checkWinner(vector >& graph, int& winner) { for (int i = 0 ; i < graph.size(); i++) { bool isGood = true; for (int j = 0; j < graph[i].size(); j++) { if (i != j and graph[i][j] <= graph[j][i]) isGood = false; } if (isGood) { winner = i; return; } } } void solve(vector nums) { vector > graph; if (nums.size() == 2) graph = parse2(nums); if (nums.size() == 6) graph = parse6(nums); if (nums.size() == 12) graph = parse12(nums); int winner = -1; checkWinner(graph, winner); if (winner != -1) { cout << winner + 1 << endl; return; } set valids; for (int i = 0; i < graph.size(); i++) valids.insert(i); while (1) { vector counts; counts.resize(graph.size()); for (int i = 0; i < graph.size(); i++) { if (not valids.count(i)) continue; for (int j = 0; j < graph[i].size(); j++) { counts[i] += graph[i][j]; } } int minInd = -1; for (int i = 0; i < counts.size(); i++) { if (not valids.count(i)) continue; if (minInd == -1 or counts[i] < counts[minInd]) minInd = i; } // Make sure it isn't an all-way tie bool tie = true; for (int i = 0; i < counts.size(); i++) { if (not valids.count(i)) continue; if (counts[i] > counts[minInd]) tie = false; } // It was an all-way-tie if (tie) { vector done; for (int i = 0; i < counts.size(); i++) { if (valids.count(i)) done.push_back(i + 1); } cout << done[0]; for (int i = 1; i < done.size();i ++) cout << " " << done[i]; cout << endl; return; } for (int i = 0; i < graph.size(); i++) { if (counts[i] == counts[minInd] and valids.count(i)) valids.erase(i); } for (int i = 0; i < graph.size(); i++) { if (not valids.count(i)) { for (int j = 0; j < graph.size(); j++) { graph[j][i] = 0; graph[i][j] = 0; } } } } cout << nums.size() << endl; } int main() { string line; getline(cin, line); while (cin) { string name = line; cout << name << endl; getline(cin, line); istringstream sin(line); vector nums; int num; while (sin >> num) nums.push_back(num); if (cin) solve(nums); getline(cin, line); } }