#include #include #include #include #include #include using namespace std; using ll = long long; void print(vector vec){ for(ll i : vec){ printf("%lld, ", i); } printf("\n"); } void iter(vector& tob){ vector prev = tob; int n = tob.size(); for(int i = 0; i < n; ++i){ if(i > 0) tob[i] += prev[i-1]; if(i < n-1) tob[i] += prev[i+1]; } } void iter(vector& tob, int k){ for(int i = 0; i < k; ++i){ iter(tob); //print(tob); } } int days = 40; // 40 int len = 2*days + 3; int mid = (len - 1)/2; vector tob(len, 0); int best(ll target){ int idx = 0; for(int i = 0; i <= mid; ++i){ if(tob[i] <= target){ idx = i; } } return idx; } vector write(ll target){ vector out; while(target > 0){ int i = best(target); //printf("%lld, ", tob[i]); target -= tob[i]; out.push_back(i); } return out; } int main(){ tob[mid] = 1; iter(tob, days); //print(tob); //printf("%lld\n", tob[mid]); ll target; scanf("%lld", &target); vector places = write(target); int rows = places.size(); printf("%d", rows * len); for(int r = 0; r < rows; ++r){ for(int i = 0; i < len; ++i){ printf("\n%d %d %d", i, 2*r, (int)(i == mid)); } } printf("\n%d %d", rows, days); for(int r = 0; r < rows; ++r){ printf("\n%d %d", 2*r, places[r]); } }