#include <bits/stdc++.h>
using namespace std;
double pi = acos(-1.0);
double len = sqrt(200 - 200 * cos(108.0 / 180 * pi));
double si = -144.0 / 180 * pi;
struct Seg {
  double x, y;
  Seg() {}
  Seg(double x, double y) : x(x), y(y) {}
  Seg rotate() {
    return Seg(x * cos(si) - y * sin(si), x * sin(si) + y * cos(si));
  }
  Seg operator+(const Seg a) const { return Seg(x + a.x, y + a.y); }
  void out() { printf("%.15f %.15f\n", x, y); }
};
int n;
vector<Seg> vec;
vector<int> num[110], ans;
void dfs(int k, Seg p, Seg seg) {
  vec.push_back(p);
  int s = vec.size();
  num[k].push_back(s);
  ans.push_back(s);
  if (k == n) return;
  dfs(k + 1, Seg(p.x + len, p.y), seg);
  p = p + Seg(seg.x * len, seg.y * len);
  num[k].push_back(s + 1);
  for (int i = 0; i < 3; ++i) {
    seg = seg.rotate();
    p = p + Seg(seg.x * len, seg.y * len);
    vec.push_back(p);
    ans.push_back(vec.size());
    num[k].push_back(vec.size());
  }
  ans.push_back(s);
}
int ID[] = {0, 3, 1, 4, 2};
int main() {
  scanf("%d", &n);
  dfs(0, Seg(0, 0), Seg(1, 0));
  printf("%d\n", vec.size());
  for (int i = 0; i < vec.size(); ++i) vec[i].out();
  for (int i = 0; i < n; ++i) {
    printf("%d", num[i][0]);
    for (int j = 1; j < 5; ++j) {
      printf(" %d", num[i][ID[j]]);
    }
    printf("\n");
  }
  for (int i = 0; i < ans.size(); ++i) printf("%d ", ans[i]);
  printf("\n");
  return 0;
}
