#include <bits/stdc++.h>   using namespace std;   template <typename T>   T abs(T a) {     return a < 0 ? -a : a;   }   template <typename T>   T sqr(T a) {     return a * a;   }   const int INF = (int)1e9;   const long double EPS = 1e-9;   const long double PI = 3.1415926535897932384626433832795;   const int N = 1000;   pair<long double, long double> operator-(       const pair<long double, long double>& a,       const pair<long double, long double>& b) {     return pair<long double, long double>(a.first - b.first, a.second - b.second);   }   pair<long double, long double> operator+(       const pair<long double, long double>& a,       const pair<long double, long double>& b) {     return pair<long double, long double>(a.first + b.first, a.second + b.second);   }   inline pair<long double, long double> rotate(       const pair<long double, long double>& a, const long double& ang) {     return pair<long double, long double>(         a.first * cos(ang) - a.second * sin(ang),         a.first * sin(ang) + a.second * cos(ang));   }   int m;   int n;   pair<long double, long double> p[N];   vector<int> g[N];   vector<int> pol[N];   const long double ROT_ANG = 2 * PI / 5;   void draw(int cnt, int s1, int s2) {     int cp[10];     cp[0] = s1;     cp[1] = s2;     pair<long double, long double> v = p[s2] - p[s1];     int prev = s2;     for (int i = 0; i < int(3); ++i) {       v = rotate(v, ROT_ANG);       p[n] = p[prev] + v;       cp[2 + i] = n;       prev = n;       n++;     }     v = rotate(v, ROT_ANG);     pair<long double, long double> u = p[n - 1] + v;     if (abs(p[s1].first - u.first) > 1e-1 || abs(p[s1].second - u.second) > 1e-1)       throw;     for (int i = 0; i < int(5); ++i) {       int i1 = (i + 1) % 5;       int i2 = (i + 4) % 5;       for (int j = 0; j < int(5); ++j) {         if (j != i1 && j != i && j != i2) g[cp[i]].push_back(cp[j]);       }     }     for (int i = 0; i < int(5); ++i) pol[m - cnt].push_back(cp[i]);     if (cnt > 1) {       int i1 = 0;       for (int i = 1; i < 5; ++i)         if (p[cp[i1]] < p[cp[i]]) i1 = i;       int i2 = i1 + 1;       if (i2 == 5) i2 = 0;       draw(cnt - 1, cp[i2], cp[i1]);     }   }   set<pair<long double, long double> > visited;   vector<int> ans;   void fleury(int v) {     while (!g[v].empty()) {       int u = g[v].back();       g[v].pop_back();       if (visited.count(pair<long double, long double>(min(v, u), max(v, u))))         continue;       visited.insert(pair<long double, long double>(min(v, u), max(v, u)));       fleury(u);       ans.push_back(u);     }   }   int main() {     cin >> m;     p[0] = pair<long double, long double>(0, 0);     p[1] = pair<long double, long double>(10, 0);     n = 2;     draw(m, 0, 1);     long double minY = 1e100, minX = 1e100;     for (int i = 0; i < int(n); ++i) {       minY = min(minY, p[i].second);       minX = min(minX, p[i].first);     }     for (int i = 0; i < int(n); ++i) {       p[i].first -= minX + 4999;       p[i].second -= minY + 4999;     }     cout << n << endl;     for (int i = 0; i < int(n); ++i) {       printf( %0.10lf %0.10lf n , (double)p[i].first, (double)p[i].second);     }     for (int i = 0; i < int(m); ++i) {       for (int j = 0; j < int(5); ++j) {         if (j != 0) printf(   );         printf( %d , pol[i][j] + 1);       }       puts(  );     }     fleury(0);     ans.push_back(0);     for (int i = 0; i < int(int((ans).size())); ++i) {       if (i != 0) printf(   );       printf( %d , ans[i] + 1);     }     puts(  );     return 0;   }