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

#define MAX 600

#define X 0
#define Y 1

int pts[MAX][2];
int n;

int ord[MAX];
int imin;

int casco[MAX];
int nc;

int area2(int ia, int ib, int ic) {
  return (pts[ia][X] - pts[ic][X])*(pts[ib][Y] - pts[ic][Y]) -
    (pts[ia][Y] - pts[ic][Y])*(pts[ib][X] - pts[ic][X]);
}

int righton(int ia, int ib, int ic) {
  return (area2(ia, ib, ic) <= 0);
}

int between(int ia, int ib, int ic) {
  if(area2(ia, ib, ic) != 0)
    return 0;
  if(pts[ia][X] != pts[ib][X]) {
    if (pts[ia][X] <= pts[ic][X] && pts[ic][X] <= pts[ib][X])
      return 1;
    if (pts[ib][X] <= pts[ic][X] && pts[ic][X] <= pts[ia][X])
      return 1;
  }
  else {
    if (pts[ia][Y] <= pts[ic][Y] && pts[ic][Y] <= pts[ib][Y])
      return 1;
    if (pts[ib][Y] <= pts[ic][Y] && pts[ic][Y] <= pts[ia][Y])
      return 1;
  }
  return 0;
}

int cmp(const void* a, const void* b) {
  int ia = *(int*)a;
  int ib = *(int*)b;
  int ret;

  if(ia == imin) return -1;
  if(ib == imin) return 1;

  ret = -area2(imin, ia, ib);
  if(ret == 0) {
    if(between(imin, ia, ib))
      ret = 1;
    else
      ret = -1;
  }
  return ret;
}

void ordena_ang() {
  int i;

  imin = 0;
  ord[0] = 0;
  for(i = 1; i < n; i++) {
    if(pts[i][Y] < pts[imin][Y] || 
       (pts[i][Y] == pts[imin][Y] && pts[i][X] < pts[imin][X])) {
      imin = i;
    }
    ord[i] = i;
  }

  qsort(ord, n, sizeof(int), cmp);
}

void calc_casco() {
  int i = 0;

  casco[0] = imin;
  nc = 1;
  for(i = 1; i < n; i++) {
    while(nc > 1 && righton(casco[nc-2], casco[nc-1], ord[i])) {
      nc--;
    }

    casco[nc] = ord[i];
    nc++;
  }

  while(nc > 1 && righton(casco[nc-2], casco[nc-1], imin)) {
    nc--;
  }
}

int main() {
  int k;
  int m;
  int i;
  int x, y;

  scanf(" %d ", &k);
  printf("%d\n", k);
  while(k > 0) {
    k--;

    scanf(" %d ", &m);
    n = m-1;
    for(i = 0; i < m; i++) {
      scanf(" %d %d ", &x, &y);
      pts[i][X] = x;
      pts[i][Y] = y;
    }

    ordena_ang();
    calc_casco();

    printf("%d\n", nc+1);
    for(i = 0; i < nc; i++) {
      printf("%d %d\n", pts[casco[i]][X], pts[casco[i]][Y]);
    }
    printf("%d %d\n", pts[casco[0]][X], pts[casco[0]][Y]);

    if(k > 0) {
      scanf("-1");
      printf("-1\n");
    }
  }

  return 0;
}

