const
  maxn = 100;

var
  x, y : array[1..maxn] of integer;
  l, r, mid, xx, yy, s, ts, ox, oy : double;
  iter, i, j, n, m : integer;
  ansx, ansy : array[1..2 * maxn] of double;
  ansn : integer;
  dx1, dy1, dx2, dy2 : integer;
  mx, my : integer;

procedure ansadd(x, y : double);
begin
  ansn := ansn + 1;
  ansx[ansn] := x + mx;
  ansy[ansn] := y + my;
end;

procedure printans;
var
  i : integer;
begin
  writeln(ansn);
  for i := 1 to ansn do begin
    writeln(ansx[i]:0:9, ' ', ansy[i]:0:9);
  end;
  ansn := 0;
end;

begin
  reset(input, 'cake.in');
  rewrite(output, 'cake.out');
  read(n, m);
  assert((1 <= n) and (n <= 15));
  assert((3 <= m) and (m <= 100));
  for i := 1 to m do begin
    read(x[i], y[i]);
    assert(abs(x[i]) <= 1000);
    assert(abs(y[i]) <= 1000);
  end;
  s := 0;
  for i := 1 to m do begin
    s := s + x[i] * y[i mod m + 1] - y[i] * x[i mod m + 1];
  end;
  assert(s > 0);
  for i := 1 to m do begin
    dx1 := x[i mod m + 1] - x[i];
    dy1 := y[i mod m + 1] - y[i];
    dx2 := x[(i + 1) mod m + 1] - x[i mod m + 1];
    dy2 := y[(i + 1) mod m + 1] - y[i mod m + 1];
    assert(dx1 * dy2 - dx2 * dy1 > 0);
  end;
  s := s / n;
  mx := x[1];
  my := y[1];
  for i := 1 to m do begin
    x[i] := x[i] - mx;
    y[i] := y[i] - my;
  end;
  ansadd(x[1], y[1]);
  ansadd(x[2], y[2]);
  j := 2;
  ts := 0;
  xx := x[2];
  yy := y[2];
  for i := 1 to n - 1 do begin
    while (ts + xx * y[j mod m + 1] - yy * x[j mod m + 1] < s - 1e-9) do begin
      ts := ts + xx * y[j mod m + 1] - yy * x[j mod m + 1];
      j := j + 1;
      xx := x[j];
      yy := y[j];
      ansadd(x[j], y[j]);
    end;
    l := 0;
    r := 1;
    ox := xx;
    oy := yy;
    for iter := 1 to 100 do begin
      mid := (l + r) / 2;
      xx := ox * (1 - mid) + x[j mod m + 1] * mid;
      yy := oy * (1 - mid) + y[j mod m + 1] * mid;
      if (ts + ox * yy - oy * xx < s) then
        l := mid
      else
        r := mid;
    end;
    ansadd(xx, yy);
    if (abs(xx - x[j + 1]) < 1e-9) and (abs(yy - y[j + 1]) < 1e-9) then begin
      j := j + 1;
    end;  
    printans;
    ansadd(x[1], y[1]);
    ansadd(xx, yy);
    ts := 0;
  end;
  j := j + 1;
  while (j <> 1) do begin
    ansadd(x[j], y[j]);
    j := j mod m + 1;
  end;
  printans;
end.