/*
TASK: green
LANG: C++
*/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define dx (P[i].a[j].x + P[i].a[(j+1)%P[i].m].x)
#define dy (P[i].a[j].y - P[i].a[(j+1)%P[i].m].y)

const int MAXN = 102; // broi na to4kite
const int MAXM = 30000;  // broi na poligonite

typedef struct { int x, y; } point;
typedef struct { int m; point a[MAXN]; double s; } Poly;

int n;
Poly P[MAXN];
int B[MAXN];

void input ()
{
   int i=0, j;

   while (1) {
      scanf ("%d", &P[i].m);
      if (P[i].m == 0) break;

      for (j=0; j<P[i].m; j++)
	 scanf ("%d %d", &P[i].a[j].x, &P[i].a[j].y);

      i++;
   }

   n=i;
}

void init ()
{
	int i;

	for (i=0; i<n; i++)
		B[i]=i;
}

void makeS ()  // makes the Surfaces
{
   int i, j;

	for (i=0; i<n; i++) {
	   for (j=0; j<P[i].m; j++)
	      P[i].s += dx*dy;
	   P[i].s = fabs (P[i].s);
	}
}

int comp (const void *a, const void *b)
{
   int p=(*((int *)a));
   int q=(*((int *)b));

	if (P[p].s < P[q].s) return (-1);
	if (P[p].s > P[q].s) return (1);

	if (P[p].m < P[q].m) return (-1);
   if (P[p].m > P[q].m) return (1);

   if (p < q) return (-1);

   return (1);
}

void solve ()
{
	init ();
	makeS ();

   qsort (&B[0], n, sizeof(int), comp);
}

void output ()
{
   printf ("%d\n", B[0]+1);
}

int main ()
{
//   freopen ("green.in", "r", stdin);

   input ();
   solve ();
   output ();

	return 0;
}
