#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:200000000")
using namespace std;
template <typename T>
inline T Abs(T x) {
  return (x >= 0) ? x : -x;
}
template <typename T>
inline T sqr(T x) {
  return x * x;
}
const int INF = (int)1E9;
const long long INF64 = (long long)1E18;
const long double EPS = 1E-9;
const long double PI = 3.1415926535897932384626433832795;
const int MAXN = 11000;
const long double L = 10;
int n;
long double R, a, d, a2;
vector<pair<long double, long double> > p;
vector<int> g[MAXN];
void getPoints(int v, long double x, int id) {
  if (v == n) return;
  long double xc = x + d / 2, yc = -sqrt(R * R - d * d / 4);
  if (v == 0) {
    g[v].push_back((int)p.size());
    p.push_back(make_pair(x, 0));
  } else
    g[v].push_back(id);
  {
    g[v].push_back((int)p.size());
    p.push_back(make_pair(xc, yc + R));
  }
  g[v].push_back((int)p.size());
  p.push_back(make_pair(x + d, 0));
  getPoints(v + 1, x + d, g[v].back());
  long double dx = L / 2, dy = sqrt(R * R - dx * dx);
  {
    g[v].push_back((int)p.size());
    p.push_back(make_pair(xc + dx, yc - dy));
  }
  {
    g[v].push_back((int)p.size());
    p.push_back(make_pair(xc - dx, yc - dy));
  }
}
void paint(int v) {
  if (v == n) return;
  if (v == 0) cout << g[v][0] + 1 << " ";
  cout << g[v][2] + 1 << " ";
  paint(v + 1);
  cout << g[v][4] + 1 << " ";
  cout << g[v][1] + 1 << " ";
  cout << g[v][3] + 1 << " ";
  cout << g[v][0] + 1 << " ";
}
int main() {
  a = 2.0 * PI / 5;
  a2 = a * 2;
  R = L / sqrt(2 * (1 - cos(a)));
  d = R * sqrt(2 * (1 - cos(a2)));
  cin >> n;
  getPoints(0, 0, -1);
  cout.precision(15);
  cout << p.size() << endl;
  for (int i = 0; i < (int)(p.size()); i++)
    cout << fixed << p[i].first << " " << p[i].second << endl;
  for (int i = 0; i < (int)(n); i++) {
    for (int j = 0; j < (int)(g[i].size()); j++) cout << g[i][j] + 1 << " ";
    cout << endl;
  }
  paint(0);
  return 0;
}
