#pragma GCC optimize("Ofast")
#pragma GCC target("sse4")
#include <bits/stdc++.h>
#define f(i,a,b) for( ll i = a; i < b ; i++ )
#define af(i,a,b) for( ll i = a; i >= b ; i--)
#define rep(i,a,b,k) for(ll i = a; i < b ; i+= k )
#define arep(i,a,b,k) for( ll i = a; i >= b ; i-= k)
#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define sz(a) (int) a.size()
#define all(a) a.begin(), a.end()
#define sor(a) sort( a.begin(), a.end() )
#define fastio ios_base::sync_with_stdio(false);cin.tie(NULL)
#define inter ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr)
#define ln '\n'
#define nwln cout<<ln;
#define v(T) vector<T>
#define mins(i, j) (i = min(i, j))
// policy-based
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;
using namespace std;
typedef bool oo;
typedef long long ll; // int or long long
typedef long double ld;
typedef pair<ll,ll> ii ;
typedef pair<ll,ii> iii;
typedef vector<ll> vi ;
typedef vector<ii> vii ;
/*
typedef tree<
ll,
null_type,
less<ll>,
rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;
*/
const ll MAX = 100;
const ll inf = 1e18;
const ll mod = 1e9 + 7;
const ld EPS = 1e-9;
vi val[MAX+1][MAX+1];
set<vi> s;
bool vis[MAX][MAX],c[MAX][MAX];
int cc = 0;
bool valid(int x,int y){
if(x<0 || y<0 || x>=MAX || y>=MAX || !c[x][y] || vis[x][y])
return false;
return true;
}
void dfs(int x,int y){
cc++;
// cout << x << " -" << y << endl;
vis[x][y] = true;
if(valid(x-1,y))
dfs(x-1,y);
if(valid(x+1,y))
dfs(x+1,y);
if(valid(x,y-1))
dfs(x,y-1);
if(valid(x,y+1))
dfs(x,y+1);
}
void comprobe(vii v){
for(int i = 0; i < MAX; i++)
for(int j = 0; j < MAX; j++) c[i][j] = vis[i][j] = false;
for(auto it:v){
c[it.first][it.second] = true;
}
// cout << endl;
// f(i,0,MAX){
// f(j,0,MAX) cout << (int) (c[i][j]);
// cout << endl;
// }
dfs(v[0].first,v[0].second);
cout << cc << " " << v.size() << endl;
cc = 0;
}
int main(){
int n;
cin >> n;
int k = 0;
while( (1<<k) < n ) k++;
cout << k << endl;
for(int b = 0; b < 6; b++){
if(!k) break;
k--;
vii p;
for(int i = 0; i < MAX; i++){
p.push_back({i,0});
}
for(int i = 0; i < MAX; i++){
if(i&(1<<b)){
for(int j = 1; j < MAX; j++){
p.push_back({i,j});
}
}
}
comprobe(p);
// cout << p.size();
// for(auto it:p) cout << " " << it.first << " " << it.second;
// cout << endl;
for(auto it:p){
val[it.first][it.second].push_back(b);
}
}
for(int b = 0; b < 6; b++){
if(!k) break;
k--;
vii p;
for(int i = 0; i < MAX; i++){
p.push_back({0,i});
}
for(int i = 0; i < MAX; i++){
if(i&(1<<b)){
for(int j = 1; j < MAX; j++){
p.push_back({j,i});
}
}
}
comprobe(p);
// cout << p.size();
// for(auto it:p) cout << " " << it.first << " " << it.second;
// cout << endl;
for(auto it:p){
val[it.first][it.second].push_back(6+b);
}
}
for(int i = 0; i < MAX; i++)
for(int j = 0; j < MAX; j++) s.insert(val[i][j]);
cout << s.size() << endl;
// for(auto it:s) {
// for(auto x:it) cout << x << " ";
// cout << endl;
// }
return 0;
}
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0MgdGFyZ2V0KCJzc2U0IikKI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiAKI2RlZmluZSBmKGksYSxiKSBmb3IoIGxsIGkgPSBhOyBpIDwgYiA7IGkrKyApIAojZGVmaW5lIGFmKGksYSxiKSBmb3IoIGxsIGkgPSBhOyBpID49IGIgOyBpLS0pCiNkZWZpbmUgcmVwKGksYSxiLGspIGZvcihsbCBpID0gYTsgaSA8IGIgOyBpKz0gayApCiNkZWZpbmUgYXJlcChpLGEsYixrKSBmb3IoIGxsIGkgPSBhOyBpID49IGIgOyBpLT0gaykKI2RlZmluZSBmZiBmaXJzdAojZGVmaW5lIHNzIHNlY29uZAojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIG1wIG1ha2VfcGFpcgojZGVmaW5lIHN6KGEpIChpbnQpIGEuc2l6ZSgpCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSwgYS5lbmQoKQojZGVmaW5lIHNvcihhKSBzb3J0KCBhLmJlZ2luKCksIGEuZW5kKCkgKQojZGVmaW5lIGZhc3RpbyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTtjaW4udGllKE5VTEwpCiNkZWZpbmUgaW50ZXIgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUobnVsbHB0cik7Y291dC50aWUobnVsbHB0cikKI2RlZmluZSBsbiAnXG4nCiNkZWZpbmUgbndsbiBjb3V0PDxsbjsKI2RlZmluZSB2KFQpIHZlY3RvcjxUPgojZGVmaW5lIG1pbnMoaSwgaikgKGkgPSBtaW4oaSwgaikpCiAKLy8gcG9saWN5LWJhc2VkCi8vI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgovLyNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgovL3VzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOyAgIAogCiAKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgYm9vbCBvbzsKdHlwZWRlZiBsb25nIGxvbmcgbGw7IC8vIGludCBvciBsb25nIGxvbmcKdHlwZWRlZiBsb25nIGRvdWJsZSBsZDsKdHlwZWRlZiBwYWlyPGxsLGxsPiBpaSA7CnR5cGVkZWYgcGFpcjxsbCxpaT4gaWlpOwp0eXBlZGVmIHZlY3RvcjxsbD4gIHZpIDsKdHlwZWRlZiB2ZWN0b3I8aWk+IHZpaSA7CiAKLyoKdHlwZWRlZiB0cmVlPApsbCwKbnVsbF90eXBlLApsZXNzPGxsPiwKcmJfdHJlZV90YWcsCnRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4Kb3JkZXJlZF9zZXQ7CiovCgpjb25zdCBsbCBNQVggPSAxMDA7CmNvbnN0IGxsIGluZiA9IDFlMTg7CmNvbnN0IGxsIG1vZCA9IDFlOSArIDc7CmNvbnN0IGxkIEVQUyA9IDFlLTk7Cgp2aSB2YWxbTUFYKzFdW01BWCsxXTsKc2V0PHZpPiBzOwoKYm9vbCB2aXNbTUFYXVtNQVhdLGNbTUFYXVtNQVhdOwoKaW50IGNjID0gMDsKCmJvb2wgdmFsaWQoaW50IHgsaW50IHkpewoJaWYoeDwwIHx8IHk8MCB8fCB4Pj1NQVggfHwgeT49TUFYIHx8ICFjW3hdW3ldIHx8IHZpc1t4XVt5XSkKCQlyZXR1cm4gZmFsc2U7CglyZXR1cm4gdHJ1ZTsKfQoKdm9pZCBkZnMoaW50IHgsaW50IHkpewoJY2MrKzsKLy8JY291dCA8PCB4IDw8ICIgLSIgIDw8IHkgIDw8IGVuZGw7Cgl2aXNbeF1beV0gPSB0cnVlOwoJaWYodmFsaWQoeC0xLHkpKQoJCWRmcyh4LTEseSk7CglpZih2YWxpZCh4KzEseSkpCgkJZGZzKHgrMSx5KTsKCWlmKHZhbGlkKHgseS0xKSkKCQlkZnMoeCx5LTEpOwoJaWYodmFsaWQoeCx5KzEpKQoJCWRmcyh4LHkrMSk7Cn0KCnZvaWQgY29tcHJvYmUodmlpIHYpewoJZm9yKGludCBpID0gMDsgaSA8IE1BWDsgaSsrKQoJCWZvcihpbnQgaiA9IDA7IGogPCBNQVg7IGorKykgY1tpXVtqXSA9IHZpc1tpXVtqXSA9IGZhbHNlOwkJCglmb3IoYXV0byBpdDp2KXsKCQljW2l0LmZpcnN0XVtpdC5zZWNvbmRdID0gdHJ1ZTsKCX0KLy8JY291dCA8PCAgZW5kbDsKLy8JZihpLDAsTUFYKXsKLy8JCWYoaiwwLE1BWCkgY291dCA8PCAoaW50KSAoY1tpXVtqXSk7Ci8vCQljb3V0IDw8IGVuZGw7Ci8vCX0KCWRmcyh2WzBdLmZpcnN0LHZbMF0uc2Vjb25kKTsKCWNvdXQgPDwgY2MgPDwgIiAiIDw8IHYuc2l6ZSgpIDw8IGVuZGw7CgljYyA9IDA7Cn0KCmludCBtYWluKCl7CglpbnQgbjsKCWNpbiA+PiBuOwoJaW50IGsgPSAwOwoJd2hpbGUoICgxPDxrKSA8IG4gKSBrKys7Cgljb3V0IDw8IGsgPDwgZW5kbDsKCWZvcihpbnQgYiA9IDA7IGIgPCA2OyBiKyspewkKCQlpZighaykgYnJlYWs7CgkJay0tOwoJCXZpaSBwOwoJCWZvcihpbnQgaSA9IDA7IGkgPCBNQVg7IGkrKyl7CgkJCXAucHVzaF9iYWNrKHtpLDB9KTsKCQl9CgkJZm9yKGludCBpID0gMDsgaSA8IE1BWDsgaSsrKXsKCQkJaWYoaSYoMTw8YikpewoJCQkJZm9yKGludCBqID0gMTsgaiA8IE1BWDsgaisrKXsKCQkJCQlwLnB1c2hfYmFjayh7aSxqfSk7CgkJCQl9CgkJCX0KCQl9CgkJCgkJY29tcHJvYmUocCk7CgkvLwljb3V0IDw8IHAuc2l6ZSgpOwoJLy8JZm9yKGF1dG8gaXQ6cCkgY291dCA8PCAiICIgPDwgaXQuZmlyc3QgPDwgIiAiIDw8IGl0LnNlY29uZDsKCS8vCWNvdXQgPDwgZW5kbDsKCgkJZm9yKGF1dG8gaXQ6cCl7CgkJCXZhbFtpdC5maXJzdF1baXQuc2Vjb25kXS5wdXNoX2JhY2soYik7CgkJfQoKCX0KCWZvcihpbnQgYiA9IDA7IGIgPCA2OyBiKyspewkKCQlpZighaykgYnJlYWs7CgkJay0tOwoJCXZpaSBwOwoJCWZvcihpbnQgaSA9IDA7IGkgPCBNQVg7IGkrKyl7CgkJCXAucHVzaF9iYWNrKHswLGl9KTsKCQl9CgkJZm9yKGludCBpID0gMDsgaSA8IE1BWDsgaSsrKXsKCQkJaWYoaSYoMTw8YikpewoJCQkJZm9yKGludCBqID0gMTsgaiA8IE1BWDsgaisrKXsKCQkJCQlwLnB1c2hfYmFjayh7aixpfSk7CgkJCQl9CgkJCX0KCQl9CgkJY29tcHJvYmUocCk7CgkvLwljb3V0IDw8IHAuc2l6ZSgpOwoJLy8JZm9yKGF1dG8gaXQ6cCkgY291dCA8PCAiICIgPDwgaXQuZmlyc3QgPDwgIiAiIDw8IGl0LnNlY29uZDsKCS8vCWNvdXQgPDwgZW5kbDsKCgkJZm9yKGF1dG8gaXQ6cCl7CgkJCXZhbFtpdC5maXJzdF1baXQuc2Vjb25kXS5wdXNoX2JhY2soNitiKTsKCQl9Cgl9Cglmb3IoaW50IGkgPSAwOyBpIDwgTUFYOyBpKyspIAoJCWZvcihpbnQgaiA9IDA7IGogPCBNQVg7IGorKykgcy5pbnNlcnQodmFsW2ldW2pdKTsKCgljb3V0IDw8IHMuc2l6ZSgpIDw8IGVuZGw7Ci8vCWZvcihhdXRvIGl0OnMpIHsKLy8JCWZvcihhdXRvIHg6aXQpIGNvdXQgPDwgeCA8PCAiICI7Ci8vCQkJY291dCA8PCBlbmRsOwovLwl9CglyZXR1cm4gMDsKfQ==