/* coder:ACboy date: 2010-3-5 result: AC description: UVa 10112 Myacm Triangles */ #include <iostream> #include <cmath> using namespace std; #define EP 1e-6 struct point{ char label; int x; int y; }; point Point[20]; int Search[500][3]; int temp[3]; int vis[30]; int c; void dfs(int pos, int n) { if (pos == 3) { Search[c][0] = temp[0]; Search[c][1] = temp[1]; Search[c][2] = temp[2]; c++; } else { for (int i = 1; i <= n; i++) { if (!vis[i] && i > temp[pos - 1]) { vis[i] = 1; temp[pos] = i; dfs(pos + 1, n); vis[i] = 0; } } } } double area(point a, point b, point c) { int x1, x2; int y1, y2; x1 = b.x - a.x; x2 = c.x - a.x; y1 = b.y - a.y; y2 = c.y - a.y; double Area = abs(x1 * y2 - x2 * y1) / 2.0; return Area; } int if_inside_triangle(point a, point b, point c, point d) { if (fabs(area(a, b, c) - area(a, b, d) - area(a, c, d) - area(b, c, d)) < EP) return 1; else return 0; } int if_in_line(point a, point b, point c) { double Area = area(a, b, c); if (Area != 0) return 0; else { if (min(a.x, b.x) <= c.x && c.x <= max(a.x, b.x) && min(a.y, b.y) <= c.y && c.y <= max(a.y, b.y)){ return 1; } else { return 0; } } } int main() { int nodeVis[20]; memset(vis, 0, sizeof(vis)); int n; int i, j; #ifndef ONLINE_JUDGE freopen("10112.txt", "r", stdin); #endif while (cin >> n) { if (n == 0) break; c = 0; dfs(0, n); point Triangle[3]; double Area = -1; char ans[3]; for (i = 1; i <= n; i++) { cin >> Point[i].label >> Point[i].x >> Point[i].y; } for (i = 0; i < c; i++) { memset(nodeVis, 0, sizeof(nodeVis)); for (j = 0; j < 3; j++) { nodeVis[Search[i][j]] = 1; Triangle[j].label = Point[Search[i][j]].label; Triangle[j].x = Point[Search[i][j]].x; Triangle[j].y = Point[Search[i][j]].y; } int ok = 1; for (j = 1; j <= n; j++) if (!nodeVis[j]){ if (if_in_line(Triangle[0], Triangle[1], Point[j]) || if_in_line(Triangle[0], Triangle[2], Point[j]) || if_in_line(Triangle[2], Triangle[1], Point[j]) ) { ok = 0; break; } if (if_inside_triangle(Triangle[0], Triangle[1], Triangle[2], Point[j])) { ok = 0; break; } } double temp = area(Triangle[0], Triangle[1], Triangle[2]); if (ok && temp > Area) { Area = temp; ans[0] = Triangle[0].label; ans[1] = Triangle[1].label; ans[2] = Triangle[2].label; } } for (i = 0; i < 3; i++) { cout << ans[i]; } cout << endl; } return 0; }