/* 20:00 - 20:29 */ #include typedef struct { int x[10], y[10]; int m; } line_t; int input_lines(line_t *t) { int i; scanf("%d", &t->m); for (i = 0; i < t->m; i++) { scanf("%d%d", &t->x[i], &t->y[i]); } } void normalize(line_t *t) { int i, minx = 10001, miny = 10001; for (i = 0; i < t->m; i++) { if (t->x[i] < minx) { minx = t->x[i]; } if (t->y[i] < miny) { miny = t->y[i]; } } for (i = 0; i < t->m; i++) { t->x[i] -= minx; t->y[i] -= miny; } } void rotate(line_t *t) { int i, tmp; for (i = 0; i < t->m; i++) { tmp = t->x[i]; t->x[i] = t->y[i]; t->y[i] = -tmp; } } void reverse(line_t *t) { int i, tmp; for (i = 0; i < t->m / 2; i++) { tmp = t->x[i]; t->x[i] = t->x[(t->m)-(i+1)]; t->x[(t->m)-(i+1)] = tmp; tmp = t->y[i]; t->y[i] = t->y[(t->m)-(i+1)]; t->y[(t->m)-(i+1)] = tmp; } } int compare(line_t *s, line_t *t) { int i; if (s->m != t->m) { return 0; } for (i = 0; i < s->m; i++) { if (s->x[i] != t->x[i] || s->y[i] != t->y[i]) { return 0; } } return 1; } void print(line_t *t) { int i; for (i = 0; i < t->m; i++) { printf("(%d,%d)\n", t->x[i], t->y[i]); } printf("-----\n"); } int main() { int I, N, i, n, j; line_t org; line_t target; while (1) { scanf("%d", &n); if (n == 0) { break; } input_lines(&org); normalize(&org); for (i = 0; i < n; i++) { input_lines(&target); for (j = 0; j < 4; j++) { normalize(&target); if (compare(&org, &target)) { printf("%d\n", i + 1); break; } reverse(&target); normalize(&target); if (compare(&org, &target)) { printf("%d\n", i + 1); break; } reverse(&target); rotate(&target); } } printf("+++++\n"); } return 0; }