#include #include typedef struct { char name[24]; char b; float val; } list_t; list_t l[1005]; char table[1005][1005]; int main(void) { char id[15]; int N; char what[10]; while (1) { scanf("%d %s", &N, id); if (N == 0 && !strcmp(id, "END")) return 0; for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) table[i][j] = 0; for (int i = 0; i < N; i++) { scanf("%s %s %f", &l[i].name, what, &l[i].val); if (!strcmp(what, "buy")) l[i].b = 1; else l[i].b = 0; } for (int i = 0; i < N; i++) { for (int j = i + 1; j < N; j++) { if (i == j) { continue; } if (l[i].b == 1) { // buying //printf("%d buys for = %.3f; %d sells for = %.3f", i, l[i].val, j, l[j].val); if (l[j].b == 0 && l[i].val >= l[j].val) { table[i][j] = 1; table[j][i] = 1; //printf("%d %d - added to table\n", i, j); } } if (l[i].b == 0) { // selling //printf("%d sells for = %.3f; %d buys for = %.3f", i, l[i].val, j, l[j].val); if (l[j].b == 1 && l[i].val <= l[j].val) { table[i][j] = 1; table[j][i] = 1; //printf("%d %d - added to table\n", i, j); } } } } // for (int i = 0; i < N; i++) { // for (int j = 0; j < N; j++) { // printf("%d", table[i][j]); // } // printf("\n"); // } // print results printf("%s\n", id); char noone; for (int i = 0; i < N; i++) { noone = 1; printf("%s:", l[i].name); for (int j = 0; j < N; j++) { if (table[i][j] == 1) { printf(" %s", l[j].name); noone = 0; } } if (noone) printf(" NO-ONE"); printf("\n"); } } return 0; }