//首先让a[i] = i,如果把a[1]和a[2]调换,发现到奇数位置时就会是它本身,于是n为奇数的情况直接出来了
//而如果n为偶数,例如10,我们直接让111放在最后或,只要保证前面几个数全都有最高位的1,那么最后的答案肯定是最大的。
//但是n为偶数出现了特殊情况,例如8,此时如果还把111放在最后,我们没法保证前面最高位的1不会被吞掉,但是根据第一条性质,由于2的i次方前一个数就已经是除最高位外全都为1的了,而最后一个操作又是或,所以构造方式跟第一种情况一样
#include<bits/stdc++.h>using namespace std;long long t;
const long long N = 2e5 + 10;
long long n;void solve() {cin >> n;long long res = 0;vector<long long> a(n + 1);a[1] = 2,a[2] = 1;if(n & 1) {cout << n << '\n';cout << a[1] << ' ' << a[2] << ' ';for(long long i = 3;i <= n;i++) cout << i << ' ';cout << '\n';}else {long long ans = (1ll << (64 - __builtin_clzll(n))) - 1;cout << ans << '\n';if(n == (n & (-n))) {cout << a[1] << ' ' << a[2] << ' ';for(long long i = 3;i <= n;i++) cout << i << ' ';cout << '\n';}else {long long tmp = (1ll << (63 - __builtin_clzll(n))) - 1;a[n] = tmp;long long r = n;for(long long i = n;i > tmp;i--) a[--r] = i;for(long long i = 3;i < tmp;i++) a[i] = i;for(long long i = 1;i <= n;i++) cout << a[i] << ' ';cout << '\n';}}
}signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> t;while(t--) solve();return 0;
}