#include <bits/stdc++.h>
using namespace std;
template <typename T, size_t N>
struct array {
  T val[N];
  T& operator[](size_t n) {
    if (n >= N) assert(false);
    return val[n];
  }
  T* begin() { return &val[0]; }
  T* end() { return &val[0] + N; }
};
template <typename A, typename B>
ostream& operator<<(ostream& os, const pair<A, B>& p) {
  return os << '(' << p.first << ", " << p.second << ')';
}
const int inf = 0x3f3f3f3f;
const long long inf64 = 0x3f3f3f3f3f3f3f3fLL;
const double eps = 1e-8;
const double pi = acos(-1.0);
const double t = 10.0;
const double r = sqrt(10.0) * sqrt(5.0 + sqrt(5.0));
const double h = sqrt(5.0 + 2.0 * sqrt(5.0)) * 5.0 - r;
const double xshift = sqrt(r * r - h * h);
const int maxn = 111;
vector<int> nums[maxn];
int main() {
  ;
  ;
  ;
  int n;
  cin >> n;
  vector<pair<double, double> > ps;
  double midx = 0, midy = 0;
  vector<int> res;
  res.push_back(1);
  vector<int> bres;
  ps.push_back(pair<double, double>(0, r));
  int startnum = 1;
  for (int i = 0; i < n; i++) {
    for (int jj = 1; jj < 5; jj++) {
      int j = jj;
      if (j == 2)
        j = 4;
      else if (j == 4)
        j = 2;
      double phi = (2 * pi * j / 5.0) + (pi / 2.0);
      ;
      double x = midx + r * cos(phi);
      double y = midy + r * sin(phi);
      ps.push_back(pair<double, double>(x, y));
    }
    res.push_back(startnum + 3);
    res.push_back(startnum + 1);
    res.push_back(startnum + 2);
    res.push_back(startnum + 4);
    bres.push_back(startnum + 0);
    midy -= r + h;
    midx -= xshift;
    startnum += 4;
  }
  reverse((bres).begin(), (bres).end());
  res.insert(res.end(), bres.begin(), bres.end());
  cout << (int((ps).size())) << endl;
  for (auto i : ps) printf("%.10lf %.10lf\n", i.first, i.second);
  for (int i = 0; i < n; i++) {
    int s = i * 4;
    printf("%d %d %d %d %d\n", s + 1, s + 2, s + 5, s + 4, s + 3);
  }
  for (int i : res) printf("%d ", i);
  puts("");
  return 0;
}
