农夫约翰坚信快乐的奶牛会产出更多的牛奶,因此他在谷仓中安装了一个巨大的迪斯科球,并计划教他的奶牛跳舞!

在查阅了一些牛的流行舞蹈后,约翰决定教他的奶牛“洗牌舞”。

洗牌舞是由他的 牛的洗牌(寒假每日一题 28)_枚举 只奶牛按一定顺序排成一行,然后连续执行三次“洗牌”,每次“洗牌”都可能会使奶牛重新排序。

为了让奶牛们更容易找到自己所处的位置,约翰用数字 牛的洗牌(寒假每日一题 28)_算法_02 对一行中奶牛所在的位置进行了标记,一行中第一头奶牛处于位置 牛的洗牌(寒假每日一题 28)_枚举_03,第二头奶牛处于位置 牛的洗牌(寒假每日一题 28)_置换_04,以此类推,直到位置 牛的洗牌(寒假每日一题 28)_枚举

每次“洗牌”用 牛的洗牌(寒假每日一题 28)_枚举 个数字 牛的洗牌(寒假每日一题 28)_置换_07 来描述,处于位置 牛的洗牌(寒假每日一题 28)_i++_08 的奶牛在一次“洗牌”过后,需要移动至位置 牛的洗牌(寒假每日一题 28)_算法_09(因此,每个 牛的洗牌(寒假每日一题 28)_算法_09牛的洗牌(寒假每日一题 28)_枚举_11 范围内)。

幸运的是,所有 牛的洗牌(寒假每日一题 28)_算法_09 都是互不相同的,因此,不会存在多头奶牛在洗牌结束后移动到同一个位置的情况。

约翰的每头奶牛都有一个属于自己的唯一 牛的洗牌(寒假每日一题 28)_枚举_13 位整数 牛的洗牌(寒假每日一题 28)_枚举_14 (不含前导 牛的洗牌(寒假每日一题 28)_枚举_15)。

给定你三轮“洗牌”过后的奶牛排列顺序,请你求出奶牛们的初始排列顺序。

输入格式
第一行包含整数 牛的洗牌(寒假每日一题 28)_枚举

第二行包含 牛的洗牌(寒假每日一题 28)_枚举 个整数,表示 牛的洗牌(寒假每日一题 28)_置换_07

第三行包含了 牛的洗牌(寒假每日一题 28)_枚举 头奶牛三轮“洗牌”过后的排列顺序,每头奶牛都用其 牛的洗牌(寒假每日一题 28)_枚举_14 指代。

输出格式
牛的洗牌(寒假每日一题 28)_枚举 行,按照 牛的洗牌(寒假每日一题 28)_枚举 头奶牛的初始排列顺序,每行输出一头奶牛的 牛的洗牌(寒假每日一题 28)_枚举_14

数据范围
牛的洗牌(寒假每日一题 28)_置换_24

输入样例:

5
1 3 4 5 2
1234567 2222222 3333333 4444444 5555555

输出样例:

1234567
5555555
2222222
3333333
4444444


#include<iostream>
#include<cstring>

using namespace std;

const int N = 110;

int n;
int mp[N], id[N], pre[N];

int main(){

cin >> n;

for(int i = 1; i <= n; i++){

int x;
cin >> x;
mp[x] = i;
}

for(int i = 1; i <= n; i++) cin >> id[i];

for(int i = 0; i < 3; i++){

memcpy(pre, id, sizeof pre);

for(int j = 1; j <= n; j++) id[mp[j]] = pre[j];
}

for(int i = 1; i <= n; i++) cout << id[i] << endl;

return 0;
}