Problem: 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.

Examples

Input

7


Output

4
1 1 1 1


Input

299


Output

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 JAVA):

Solution:
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

class Main {
	public static void main(String[] args) {
		new Main().run();
	}

	void run() {
		Scanner sc = new Scanner(System.in);
		long N = sc.nextLong();
		++N;
		ArrayDeque<Integer> deque = new ArrayDeque<>();
		int curVal = 1;
		ArrayList<Integer> lis = new ArrayList<>();
		while (N > 0) {
			if (N % 2 == 0) {
				lis.add(0);
			} else {
				lis.add(1);
			}
			N /= 2;
		}
		for (int i = lis.size() - 2; i >= 0; --i) {
			deque.addLast(curVal);
			if (lis.get(i) == 1) {
				++curVal;
				deque.addFirst(curVal);
			}
			++curVal;

		}
		--curVal;
		System.out.println(curVal * 2);
		for (int i = 0; i < curVal; ++i) {
			System.out.print(deque.pollFirst() + " ");
		}
		for (int i = 1; i <= curVal; ++i) {
			System.out.print(i + (i == curVal ? "\n" : " "));
		}
	}

	void tr(Object... objects) {
		System.out.println(Arrays.deepToString(objects));
	}
}