#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
inline long long getint() {
  long long _x = 0, _tmp = 1;
  char _tc = getchar();
  while ((_tc < '0' || _tc > '9') && _tc != '-') _tc = getchar();
  if (_tc == '-') _tc = getchar(), _tmp = -1;
  while (_tc >= '0' && _tc <= '9') _x *= 10, _x += (_tc - '0'), _tc = getchar();
  return _x * _tmp;
}
inline long long add(long long _x, long long _y,
                     long long _mod = 1000000007LL) {
  _x += _y;
  return _x >= _mod ? _x - _mod : _x;
}
inline long long sub(long long _x, long long _y,
                     long long _mod = 1000000007LL) {
  _x -= _y;
  return _x < 0 ? _x + _mod : _x;
}
inline long long mul(long long _x, long long _y,
                     long long _mod = 1000000007LL) {
  _x *= _y;
  return _x >= _mod ? _x % _mod : _x;
}
long long mypow(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 1LL;
  long long _ret = mypow(mul(_a, _a, _mod), _x >> 1, _mod);
  if (_x & 1) _ret = mul(_ret, _a, _mod);
  return _ret;
}
long long mymul(long long _a, long long _x, long long _mod) {
  if (_x == 0) return 0LL;
  long long _ret = mymul(add(_a, _a, _mod), _x >> 1, _mod);
  if (_x & 1) _ret = add(_ret, _a, _mod);
  return _ret;
}
inline bool equal(double _x, double _y) {
  return _x > _y - 1e-9 && _x < _y + 1e-9;
}
int __ = 1, _cs;
pair<double, double> operator+(const pair<double, double>& p1,
                               const pair<double, double>& p2) {
  return {p1.first + p2.first, p1.second + p2.second};
}
pair<double, double> operator-(const pair<double, double>& p1,
                               const pair<double, double>& p2) {
  return {p1.first - p2.first, p1.second - p2.second};
}
pair<double, double> operator*(const pair<double, double>& tp,
                               const double& tk) {
  return {tp.first * tk, tp.second * tk};
}
pair<double, double> operator/(const pair<double, double>& tp,
                               const double& tk) {
  return {tp.first / tk, tp.second / tk};
}
double operator*(const pair<double, double>& p1,
                 const pair<double, double>& p2) {
  return p1.first * p2.first + p1.second * p2.second;
}
double operator^(const pair<double, double>& p1,
                 const pair<double, double>& p2) {
  return p1.first * p2.second - p1.second * p2.first;
}
double norm2(const pair<double, double>& tp) { return tp * tp; }
double norm(const pair<double, double>& tp) { return sqrt(norm2(tp)); }
pair<double, double> perp(const pair<double, double>& tp) {
  return {tp.second, -tp.first};
}
pair<double, double> rotate(const pair<double, double>& tp, const double& ang) {
  return {tp.first * cos(ang) - tp.second * sin(ang),
          tp.first * sin(ang) + tp.second * cos(ang)};
}
void print(const pair<double, double>& tp) {
  printf("(%.6f, %.6f)\n", tp.first, tp.second);
}
const double pi = acos(-1);
double dd;
pair<double, double> bs[5];
void build() {
  dd = sqrt(100. + 100. - 2. * 100. * cos(108. / 180. * pi));
  bs[4] = {-dd, 0};
  bs[0] = rotate(bs[4] * -1, -36. / 180. * pi);
  bs[1] = rotate(bs[0] * -1, -36. / 180. * pi);
  bs[2] = rotate(bs[1] * -1, -36. / 180. * pi);
  bs[3] = rotate(bs[2] * -1, -36. / 180. * pi);
}
int n;
void init() { n = getint(); }
vector<pair<double, double> > wt;
void solve() {
  pair<double, double> st = {0, 0};
  wt.push_back(st);
  vector<int> fans = {0};
  for (int i = 0; i < n; i++)
    for (int j = 0; j < 4; j++) {
      st = st + bs[j];
      fans.push_back(wt.size());
      wt.push_back(st);
    }
  printf("%d\n", (int)wt.size());
  for (auto p : wt) printf("%.12f %.12f\n", p.first, p.second);
  for (int i = 0; i < n; i++) {
    int aa = i * 4 + 1;
    printf("%d %d %d %d %d\n", aa, aa + 2, aa + 4, aa + 1, aa + 3);
  }
  int lst = wt.size() - 1;
  while (lst) {
    fans.push_back(lst - 4);
    lst -= 4;
  }
  for (auto i : fans) printf("%d ", i + 1);
  puts("");
}
int main() {
  build();
  while (__--) {
    init();
    solve();
  }
}
