#include <stdio.h>

typedef struct {
	int num;
	int x[10];
	int y[10];
} oresen_t;

void oresen_seikika(oresen_t* oresen) {
	int xx=oresen->x[0];
	int yy=oresen->y[0];
	int i;
	for(i=0;i<oresen->num;i++) {
		oresen->x[i]-=xx;
		oresen->y[i]-=yy;
	}
}

void oresen_reverse(oresen_t* oresen) {
	int i;
	for(i=0;i+i+1<oresen->num;i++) {
		int temp;
		temp=oresen->x[i];
		oresen->x[i]=oresen->x[oresen->num-i-1];
		oresen->x[oresen->num-i-1]=temp;
		temp=oresen->y[i];
		oresen->y[i]=oresen->y[oresen->num-i-1];
		oresen->y[oresen->num-i-1]=temp;
	}
}

void oresen_rotate(oresen_t* oresen) {
	int i;
	for(i=1;i<oresen->num;i++) {
		int temp;
		temp=oresen->x[i];
		oresen->x[i]=-oresen->y[i];
		oresen->y[i]=temp;
	}
}

int oresen_ismatch(const oresen_t* oresen1,const oresen_t* oresen2) {
	int i;
	if(oresen1->num!=oresen2->num)return 0;
	for(i=0;i<oresen1->num;i++) {
		if(oresen1->x[i]!=oresen2->x[i])return 0;
		if(oresen1->y[i]!=oresen2->y[i])return 0;
	}
	return 1;
}

void oresen_input(oresen_t* oresen) {
	int i;
	scanf("%d",&oresen->num);
	for(i=0;i<oresen->num;i++) {
		scanf("%d%d",&oresen->x[i],&oresen->y[i]);
	}
}

int main(void) {
	int n;
	while(scanf("%d",&n)==1 && n!=0) {
		oresen_t kizyun;
		oresen_t now;
		int i,j,match;
		oresen_input(&kizyun);
		oresen_seikika(&kizyun);
		for(i=1;i<=n;i++) {
			oresen_input(&now);
			oresen_seikika(&now);
			match=0;
			for(j=0;j<4;j++) {
				if(oresen_ismatch(&kizyun,&now))match=1;
				oresen_rotate(&now);
			}
			oresen_reverse(&now);
			oresen_seikika(&now);
			for(j=0;j<4;j++) {
				if(oresen_ismatch(&kizyun,&now))match=1;
				oresen_rotate(&now);
			}
			if(match)printf("%d\n",i);
		}
		puts("+++++");
	}
	return 0;
}