D. 随机数据生成器

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较

题目描述

有一天zsy在出大水题的时候,他遇到了一个小问题:如何随机生成一棵树?

当然这并没有难倒zsy:既然题目都这么水了,那数据水一水也未尝不可。他决定采用一种非常naive的方式随机生成一棵 个节点的树:对于每个节点 ,从节点 中随机选择一个节点作为其父节点。

于是zsy洋洋洒洒地写下了下面这份 gen.cpp

#include<bits/stdc++.h>
using namespace std;

typedef unsigned long long int64;

int n;
int64 seed = 【数据删除】;
int64 rng(){
    seed ^= seed << 4;
    seed ^= seed >> 7;
    seed ^= seed << 11;
    return seed;
}

int main(){
    for(int i = 2; i <= n; ++i)
		fa[i] = 1 + rng() % (i - 1);
}

zsy把数据造完后,一不小心就把 gen.cpp 给删掉了。所幸的是 fa 数组被完整地保存了下来。现在zsy想知道,能否根据现有的数据来推断出 seed 的初值(代码中【数据删除】的部分)?

输入格式

输入包含两行,第一行一个正整数 ,第二行 个正整数,意义详见题目描述部分。

输出格式

输出一行一个整数表示 seed 的初值。如果有多个值符合题目条件,你可以输出任意一个。数据保证至少存在一个值符合条件。

样例

见附加文件

数据范围与提示

本题共十个测试点。

对于前八个测试点中的第 个,

对于后两个测试点,

对于所有测试点,