#include <iostream>
using namespace std;

int main() {
    long long n;
    cin>>n;
    unsigned long long mask = 1;
    while(mask<n){
        mask = (mask<<1)|1;
    }//通过按位或运算,找到一个二进制数有效位和n一样长的mask
    n = n | mask;//纯属多余,直接输出mask即可。
    cout<<n;
}

对于一个长度为n的排列,最大值n的二进制数的有效位一定是最长的,而且排列中的所有数通过任意的按位异或运算,得到的二进制数有效位不会超过n的二进制数有效位,所有只需要让n中所有的0通过按位异或运算变成1,那么这个数一定是最大的;