#include <bits/stdc++.h>
using namespace std;
vector<complex<double> > up, down;
void init() {
  complex<double> mv(10, 0);
  up.push_back(complex<double>(0, 0));
  for (int i = 1; i < 5; ++i) {
    up.push_back(up.back() + mv);
    mv *= polar(1.0, 72.0 / 180 * 3.141592653589793238462643);
  }
  mv = complex<double>(10, 0);
  down.push_back(complex<double>(0, 0));
  for (int i = 1; i < 5; ++i) {
    down.push_back(down.back() + mv);
    mv *= polar(1.0, -72.0 / 180 * 3.141592653589793238462643);
  }
}
struct compare {
  bool operator()(const complex<double>& f, const complex<double>& s) const {
    return make_pair(f.real(), f.imag()) < make_pair(s.real(), s.imag());
  }
};
vector<complex<double> > out;
map<complex<double>, int, compare> M;
int id(complex<double> w) {
  if (!M.count(w)) {
    M[w] = ((int)(out).size());
    out.push_back(w);
  }
  return M[w];
}
int main() {
  init();
  int N;
  scanf("%d", &N);
  complex<double> last(0, 0);
  for (int i = 0; i < N; ++i) {
    if (i & 1) {
      for (int i = 0; i < 5; ++i) id(last + down[i]);
      last += down[1];
    } else {
      for (int i = 0; i < 5; ++i) id(last + up[i]);
      last += up[1];
    }
  }
  printf("%d\n", ((int)(out).size()));
  for (int i = 0; i < ((int)(out).size()); ++i)
    printf("%.12lf %.12lf\n", out[i].real(), out[i].imag());
  int lpos = 1, st = 2;
  for (int i = 0; i < N; ++i) {
    vector<int> tmp;
    tmp.push_back(lpos);
    for (int i = 0; i < 4; ++i) tmp.push_back(st + i);
    if (lpos == 1)
      lpos = 2;
    else
      lpos += 4;
    st += 4;
    for (int i = 0; i < ((int)(tmp).size()); ++i)
      printf("%d%c", tmp[i], (i + 1 == ((int)(tmp).size())) ? '\n' : ' ');
  }
  vector<int> pr, obr;
  pr.push_back(1);
  pr.push_back(4);
  pr.push_back(2);
  for (int i = 1; i < N; ++i)
    pr.push_back(pr[((int)(pr).size()) - 2] + 4),
        pr.push_back(pr[((int)(pr).size()) - 2] + 4);
  int cur = ((int)(pr).size()) - 2;
  while (cur >= 0) {
    obr.push_back(pr[cur] + 1);
    obr.push_back(pr[cur] - 1);
    obr.push_back(pr[cur - 1]);
    cur -= 2;
  }
  for (int i = 0; i < ((int)(obr).size()); ++i) pr.push_back(obr[i]);
  for (int i = 0; i < ((int)(pr).size()); ++i)
    printf("%d%c", pr[i], (i + 1 == ((int)(pr).size())) ? '\n' : ' ');
  return 0;
}
