#include <bits/stdc++.h>
using namespace std;
template <typename T, typename U>
inline void smin(T &a, U b) {
  if (a > b) a = b;
}
template <typename T, typename U>
inline void smax(T &a, U b) {
  if (a < b) a = b;
}
template <class T>
inline void gn(T &first) {
  char c, sg = 0;
  while (c = getchar(), (c > '9' || c < '0') && c != '-')
    ;
  for ((c == '-' ? sg = 1, c = getchar() : 0), first = 0; c >= '0' && c <= '9';
       c = getchar())
    first = (first << 1) + (first << 3) + c - '0';
  if (sg) first = -first;
}
template <class T, class T1>
inline void gn(T &first, T1 &second) {
  gn(first);
  gn(second);
}
template <class T, class T1, class T2>
inline void gn(T &first, T1 &second, T2 &z) {
  gn(first);
  gn(second);
  gn(z);
}
template <class T>
inline void print(T first) {
  if (first < 0) {
    putchar('-');
    return print(-first);
  }
  if (first < 10) {
    putchar('0' + first);
    return;
  }
  print(first / 10);
  putchar(first % 10 + '0');
}
template <class T>
inline void printsp(T first) {
  print(first);
  putchar(' ');
}
template <class T>
inline void println(T first) {
  print(first);
  putchar('\n');
}
template <class T, class U>
inline void print(T first, U second) {
  printsp(first);
  println(second);
}
template <class T, class U, class V>
inline void print(T first, U second, V z) {
  printsp(first);
  printsp(second);
  println(z);
}
int power(int a, int b, int m, int ans = 1) {
  for (; b; b >>= 1, a = 1LL * a * a % m)
    if (b & 1) ans = 1LL * ans * a % m;
  return ans;
}
struct point {
  double first, second;
  point(double first = 0, double second = 0) : first(first), second(second) {}
  point operator-(point a) { return point(first - a.first, second - a.second); }
  point operator+(point a) { return point(first + a.first, second + a.second); }
  point operator*(double a) { return point(first * a, second * a); }
  point operator/(double a) { return point(first / a, second / a); }
  point operator&(point a) {
    return point(first * a.first - second * a.second,
                 first * a.second + second * a.first);
  }
  point rotate(double al) { return *this & point(cos(al), sin(al)); }
  double operator^(point a) { return first * a.second - second * a.first; }
  double operator*(point a) { return first * a.first + second * a.second; }
  point norm() {
    double s = nor();
    if (s < 1e-9) return *this;
    return point(first / s, second / s);
  }
  point conj() { return point(-second, first); }
  double nor() { return sqrt(*this * *this); }
  double al() { return atan2(second, first); }
  bool operator<(const point &a) const {
    if (fabs(first - a.first) > 1e-9) return first < a.first;
    return second < a.second - 1e-9;
  }
  bool operator>(const point &a) const {
    if (fabs(first - a.first) > 1e-9) return first > a.first;
    return second > a.second + 1e-9;
  }
  bool operator==(const point &a) const {
    if (fabs(first - a.first) > 1e-9) return 0;
    return fabs(second - a.second) < 1e-9;
  }
  void input() { scanf("%lf %lf", &first, &second); }
  void print() { printf("%lf %lf\n", first, second); }
};
point dir[111], p[101010];
int a[111][11];
int main() {
  int n;
  gn(n);
  double pi = acosl(-1.0);
  double al = pi - pi / 5;
  dir[1] = point(20 * cos(pi / 5), 0);
  for (int i = 1; i < 5; i++) dir[i + 1] = dir[i].rotate(al);
  point cur;
  int nn = 0;
  p[++nn] = point(4000, 0);
  vector<int> ans;
  ans.push_back(nn);
  for (int i = 1; i <= n; i++) {
    if (i & 1) {
      a[i][1] = nn;
      ++nn;
      p[nn] = p[nn - 1] + dir[1];
      a[i][3] = nn;
      ans.push_back(nn);
      ++nn;
      p[nn] = p[nn - 1] + dir[2];
      a[i][5] = nn;
      ans.push_back(nn);
    } else {
      a[i][1] = nn;
      ++nn;
      p[nn] = p[nn - 1] - dir[1];
      a[i][3] = nn;
      ans.push_back(nn);
      ++nn;
      p[nn] = p[nn - 1] - dir[5];
      a[i][5] = nn;
      ans.push_back(nn);
    }
  }
  cur = p[nn];
  for (int i = n; i >= 1; i--) {
    if (i & 1) {
      ++nn;
      p[nn] = cur = cur + dir[3];
      a[i][2] = nn;
      ans.push_back(nn);
      ++nn;
      p[nn] = cur = cur + dir[4];
      a[i][4] = nn;
      ans.push_back(nn);
      cur = cur + dir[5];
    } else {
      ++nn;
      p[nn] = cur = cur - dir[4];
      a[i][2] = nn;
      ans.push_back(nn);
      ++nn;
      p[nn] = cur = cur - dir[3];
      a[i][4] = nn;
      ans.push_back(nn);
      cur = cur - dir[2];
    }
    ans.push_back(i * 2 - 1);
  }
  println(nn);
  for (int i = 1; i <= nn; i++)
    printf("%.10lf %.10lf\n", p[i].first, p[i].second);
  for (int i = 1; i <= n; i++, puts(""))
    for (int j = 1; j <= 5; j++) printsp(a[i][j]);
  for (int i = 0; i < ans.size(); i++) printsp(ans[i]);
  puts("");
  return 0;
}
