马里奥世界
马里奥(Mario)和路易吉(Luigi)正在进行《超级马里奥:奥德赛》的速通比赛,以决定谁是更优秀的速通选手。在《超级马里奥:奥德赛》中,一共有 $N$ 个世界,其中世界 $i$ 含有 $a_i$ 个金币,且需要花费 $t_i$ 秒来通关。如果马里奥或路易吉中有人率先进入某个世界,他将收集该世界中的全部 $a_i$ 个金币,不给另一人留下任何金币。如果马里奥和路易吉在同一时间进入同一个世界,则两人各有 $50\%$ 的概率获得该世界的全部金币(换句话说,马里奥有 $50\%$ 的概率获得全部金币,路易吉也是如此)。注意,在任何时刻,两位玩家都不知道哪些世界还剩有金币。一旦他们进入一个世界,无论该世界是否还留有金币,他们都必须花费 $t_i$ 秒将其通关。
幸运的是,路易吉的计划泄露了,他将要进入的世界顺序已为马里奥所知。也就是说,路易吉将从他列表中的第一个世界开始,然后移动到下一个世界,依此类推。得知此事后,马里奥请求你帮助他确定进入世界的最佳顺序。请确定一个进入世界的排列,以最大化他击败路易吉的概率。如果马里奥获得的金币数严格大于路易吉,则马里奥获胜。
输入格式
输入的第一行包含一个整数 $N$ ($1 \le N \le 100,000$),表示世界的数量。
第二行包含 $N$ 个空格分隔的整数 $a_1, a_2, \dots, a_N$ ($1 \le a_i \le 10^9$),表示每个世界中的金币数量。
第三行包含 $N$ 个空格分隔的整数 $t_1, t_2, \dots, t_N$ ($1 \le t_i \le 10^9$),表示通关每个世界所需的时间。
第四行包含 $N$ 个空格分隔的整数 $p_1, p_2, \dots, p_N$ ($1 \le p_i \le N$),表示路易吉探索世界的顺序:路易吉将首先探索世界 $p_1$,然后是世界 $p_2$,依此类推。保证 $p$ 是 $1$ 到 $N$ 的一个排列。
输出格式
输出第一行包含一个双精度浮点数 $r$,表示马里奥获胜的最大概率。该概率与真实值之间的绝对误差不应超过 $10^{-5}$。
第二行输出 $N$ 个空格分隔的整数,表示最佳的排列。如果有多个正确的排列,输出其中任意一个即可。
样例
输入样例 1
3 10 10 10 2 3 1 1 2 3
输出样例 1
1 3 2 1
输入样例 2
1 10 5 1
输出样例 2
0.5 1