#include typedef struct { int x1, y1, x2, y2; int label; } slide; typedef struct { int x, y; int slide; } label; int main(void) { FILE* f; int job, nslides, i, j, flag, ns, ls; label labels[30]; slide slides[30]; f = fopen("slides.in", "r"); job = 1; for (;;) { fscanf(f, "%d ", &nslides); if (nslides == 0) return 0; printf("Heap %d\n", job++); for (i = 0; i < nslides; i++) { fscanf(f, "%d %d %d %d ", &slides[i].x1, &slides[i].x2, &slides[i].y1, &slides[i].y2); slides[i].label = -1; } for (i = 0; i < nslides; i++) { fscanf(f, "%d %d ", &labels[i].x, &labels[i].y); labels[i].slide = -1; } flag = 1; while (flag) { flag = 0; for (i = 0; i < nslides; i++) { ns = 0; for (j = 0; j < nslides; j++) { if (slides[j].label < 0 && labels[i].slide < 0 && labels[i].x > slides[j].x1 && labels[i].x < slides[j].x2 && labels[i].y > slides[j].y1 && labels[i].y < slides[j].y2) { ns++; ls = j; } } if (ns == 1) { slides[ls].label = i; labels[i].slide = ls; flag = 1; } } for (j = 0; j < nslides; j++) { ns = 0; for (i = 0; i < nslides; i++) { if (slides[j].label < 0 && labels[i].slide < 0 && labels[i].x > slides[j].x1 && labels[i].x < slides[j].x2 && labels[i].y > slides[j].y1 && labels[i].y < slides[j].y2) { ns++; ls = i; } } if (ns == 1) { slides[j].label = ls; labels[ls].slide = j; flag = 1; } } } flag = 0; for (i = 0; i < nslides; i++) { if (slides[i].label >= 0) { if (flag) printf(" "); flag = 1; printf("(%c,%d)", 'A' + i, slides[i].label + 1); } } if (!flag) printf("none"); printf("\n\n"); } return 0; }