#P10818. [EC Final 2020] Random Shuffle

[EC Final 2020] Random Shuffle

Description

庞教授正在选择晋级世界总决赛的队伍。由于地区赛被取消,他使用随机打乱来对队伍进行排名。总共有 nn 支队伍。他的代码如下:

uint64_t x;//uint64_t 表示 64 位无符号整数
int n;
uint64_t rand() {//这是一个异或移位随机生成器
    x ^= x << 13;
    x ^= x >> 7;
    x ^= x << 17;
    return x;
}
int main() {
    cin >> n;
    cin >> x;
    for (int i = 1; i <= n; i++) {//随机打乱 [1, 2,..., n]
         a[i] = i;
         swap(a[i], a[rand() % i + 1]);
     }
     for (int i = 1; i <= n; i++) {//打印结果
       cout << a[i] << (i == n ? '\n' : ' ');
    }
}

他编译并运行了他的代码,然后输入了 nn 和某个特殊的非负整数 xx。他将结果打印在纸上。 一天后,庞教授忘记了他选择的 xx。给定代码的结果和整数 nn。请恢复庞教授输入的数字 xx

Input Format

第一行包含一个整数 nn (50n10000050\le n\le 100000) —— 队伍的数量。 下一行包含 nn 个整数 —— 庞教授代码打印的结果。保证结果是正确的,即存在一个整数 xx (0x26410\le x\le 2^{64}-1) 导致该结果。

Output Format

输出庞教授输入的整数 xx (0x26410\le x\le 2^{64}-1)。如果有多个可能的 xx,输出其中任意一个。

50
36 22 24 21 27 50 28 14 25 34 18 43 47
13 30 7 10 48 20 16 29 9 8 15 3 31 12
38 19 49 37 1 46 32 4 44 11 35 6 33 26
5 45 17 39 40 2 23 42 41
16659580358178468547

Hint

注意样例输入的第二行被换行以适应页面宽度。(由 ChatGPT 4o 翻译)