Problem:
Score : 1000 points

Problem Statement

We will call a string x good if it satisfies the following condition:

Condition: x can be represented as a concatenation of two copies of another string y of length at least 1.

For example, aa and bubobubo are good; an empty string, a, abcabcabc and abba are not good.

Eagle and Owl created a puzzle on good strings.
Find one string s that satisfies the following conditions. It can be proved that such a string always exists under the constraints in this problem.

1 ≤ |s| ≤ 200

Each character of s is one of the 100 characters represented by the integers 1 through 100.

Among the 2^{|s|} subsequences of s, exactly N are good strings.

Constraints

1 ≤ N ≤ 10^{12}

Input

Input is given from Standard Input in the following format:

N

Output

In the first line, print |s|, the length of s.
In the second line, print the elements in s in order, with spaces in between. Any string that satisfies the above conditions will be accepted.

Sample Input 1

7

Sample Output 1

4
1 1 1 1

There are two good strings that appear as subsequences of s: (1,1) and (1,1,1,1). There are six occurrences of (1,1) and one occurrence of (1,1,1,1), for a total of seven.

Sample Input 2

299

Sample Output 2

23
32 11 11 73 45 8 11 83 83 8 45 32 32 10 100 73 32 83 45 73 32 11 10

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <cmath>
#include <list>
#include <chrono>
#include <thread>

using namespace std;

//template<typename T>
//using Matrix2D = std::vector<vector<T>>;

//#define cerr


#ifndef M_PI
    const double M_PI = acos(-1.0);
#endif // M_PI

#define y1 roman_kaban
#define rank oryshych_konb
#define ull unsigned long long
#define ll long long
//const int mod = int(1e9) + 7;
//const long long infLL = 1e18;
//const int MX2 = 10100500; //  e7
//const int MX = 400500; //       e5


int main()
{
    //freopen("/Users/ozzy/Documents/in.txt","r", stdin);
    //cout << c(4, 2) << endl;
    ios_base::sync_with_stdio(false);
    long long n;
    cin >> n; n++;
    vector<int> r1;
    vector<int> r2;
    int nxt = 1;
    while(n){
            if(n == 1) break;

        if(n & 1){
            r1.push_back(nxt);
            r1.push_back(nxt);
            nxt++;
        }
        r1.push_back(nxt);
        r2.push_back(nxt);
        nxt++;
        n >>= 1;
    }
    reverse(r2.begin(), r2.end());
    cout << r1.size() + r2.size() << endl;
    for(int i = 0; i < r1.size(); i++){
        cout << r1[i] << ' ';
    }
    for(int i = 0; i < r2.size(); i++){
        cout << r2[i] << ' ';
    }
    cout << endl;
    return 0;
}