#include <bits/stdc++.h>
using namespace std;
struct pt {
  double x, y;
  pt(const double &_x = 0.0, const double &_y = 0.0) : x(_x), y(_y) {}
};
pt operator+(const pt &a, const pt &b) { return pt(a.x + b.x, a.y + b.y); }
int n, m, id[102][5];
pt verts[500], radius, pent[2][5], centre;
const double PI = 3.141592653589793L;
const double D2R = PI / 180.0L;
inline int vertid(const int &i, const int &j) { return id[i][j] + 1; }
inline int addvert(const pt &p) {
  verts[m] = p;
  return m++;
}
int main() {
  scanf("%d", &n);
  double radius = 10.0L * sinl(54.0L * D2R) / sinl(72.0L * D2R);
  for (int i = 0; i < (5); ++i) {
    double theta = i * 2.0L * 3.141592653589793L / 5.0L;
    pent[0][i].x = radius * cosl(theta);
    pent[0][i].y = radius * sinl(theta);
    pent[1][i].x = -pent[0][i].x;
    pent[1][i].y = pent[0][i].y;
  }
  memset(id, -1, sizeof id);
  for (int i = 0; i < (n); ++i) {
    bool odd = i & 1;
    if (i) centre = centre + pent[!odd][0] + pent[!odd][1];
    for (int j = 0; j < (5); ++j)
      if (id[i][j] == -1) {
        id[i][j] = addvert(centre + pent[odd][j]);
        if (j == 0) id[i + 1][4] = id[i][j];
        if (j == 1) id[i + 1][0] = id[i + 2][4] = id[i][j];
      }
  }
  printf("%d\n", m);
  for (int i = 0; i < (m); ++i)
    printf("%.15lf %.15lf\n", verts[i].x, verts[i].y);
  for (int i = 0; i < (n); ++i)
    for (int j = 0; j < (5); ++j)
      printf("%d%c", vertid(i, j), (j < 4) ? ' ' : '\n');
  printf("%d", vertid(0, 4));
  for (int i = 0; i < (n); ++i)
    printf(" %d %d %d", vertid(i, 1), vertid(i, 3), vertid(i, 0));
  for (int i = (n)-1; i >= 0; --i) printf(" %d %d", vertid(i, 2), vertid(i, 4));
  printf("\n");
  return 0;
}
