Random Shuffle

시간 제한1초메모리 제한1024 MB

요약
xorshift 기반 셔플이 만든 순열이 주어질 때, 그 순열을 만드는 64비트 시드를 복원한다.
난이도

어려움10점 중 8점

유형
수학, 완전 탐색, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

Prof. Pang is selecting teams that advance to the world final contest. As the regionals are cancelled, he uses random shuffle to rank the teams. There are nn teams in total. His code is as follows:

uint64_t x;//uint64_t represents 64-bit unsigned integer
int n;
uint64_t rand() {//this is a xor-shift random generator
    x ^= x << 13;
    x ^= x >> 7;
    x ^= x << 17;
    return x;
}
int main() {
    cin >> n;
    cin >> x;
    for (int i = 1; i ≤ n; i++) {//random shuffle [1, 2,..., n]
        a[i] = i;
        swap(a[i], a[rand() % i + 1]);
    }
    for (int i = 1; i ≤ n; i++) {//print the result
        cout << a[i] << (i == n ? '\n' : ' ');
    }
}

He compiled and ran his code and then entered nn and some special nonnegative integer xx. He printed the result on paper.

One day later, Prof. Pang forgot his choice for xx. You are given the result of the code and the integer nn. Please recover the number xx that Prof. Pang had entered.

입력

The first line contains a single integer nn (50≤n≤10000050\le n\le 100000) -- the number of teams.

The next line contains nn integers -- the result printed by Prof. Pang's code. It is guaranteed that the result is correct, i.e., there exists an integer xx (0≤x≤264−10\le x\le 2^{64}-1) that leads to the result.

출력

Output the integer xx (0≤x≤264−10\le x\le 2^{64}-1) Prof. Pang had entered. If there are multiple possible xx's, print any one.

힌트

Note that the second line of the sample input is wrapped to fit in the width of page.

예제1

  1. 예제 1

    입력
    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