#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5;
int n;
vector<int> va, vb;
struct tr {
  struct edge {
    int to, nxt;
  } e[N << 1];
  int head[N], cnt, fa[N], dfn[N], idx, sz[N], son[N], top[N], dep[N];
  bool vis[N];
  vector<int> vec[N << 2];
  void dfs(int now) {
    sz[now] = 1;
    for (int i = head[now]; i; i = e[i].nxt)
      if (!dep[e[i].to]) {
        dep[e[i].to] = dep[now] + 1, dfs(e[i].to);
        sz[now] += sz[e[i].to];
        if (!son[now] || sz[son[now]] < sz[e[i].to]) son[now] = e[i].to;
      }
  }
  void dfs2(int now) {
    dfn[now] = ++idx;
    if (son[now]) top[son[now]] = top[now], dfs2(son[now]);
    for (int i = head[now]; i; i = e[i].nxt)
      if (e[i].to != son[now] && dep[e[i].to] > dep[now])
        dfs2(top[e[i].to] = e[i].to);
  }
  inline void init() {
    for (int i = 2; i <= n; ++i) {
      scanf("%d", fa + i);
      e[++cnt] = (edge){i, head[fa[i]]}, head[fa[i]] = cnt;
      e[++cnt] = (edge){fa[i], head[i]}, head[i] = cnt;
    }
    dfs(dep[1] = 1), dfs2(top[1] = 1);
  }
  void add(int l, int r, int o, const int& L, const int& R, const int& id) {
    if (L <= l && r <= R)
      vec[o].push_back(id);
    else {
      const int mid = l + r >> 1;
      if (L <= mid) add(l, mid, o << 1, L, R, id);
      if (mid < R) add(mid + 1, r, o << 1 | 1, L, R, id);
    }
  }
  void insert(int x, int y, int id) {
    while (top[x] != top[y])
      if (dep[top[x]] > dep[top[y]]) {
        add(1, n, 1, dfn[top[x]], dfn[x], id);
        x = fa[top[x]];
      } else {
        add(1, n, 1, dfn[top[y]], dfn[y], id);
        y = fa[top[y]];
      }
    if (dep[x] > dep[y]) swap(x, y);
    if (dfn[x] < dfn[y]) add(1, n, 1, dfn[x] + 1, dfn[y], id);
  }
  void get(int l, int r, int o, const int& pos, vector<int>& vc) {
    for (int x : vec[o])
      if (!vis[x]) vis[x] = 1, vc.push_back(x);
    vec[o].clear();
    if (l < r) {
      const int mid = l + r >> 1;
      if (pos <= mid)
        get(l, mid, o << 1, pos, vc);
      else
        get(mid + 1, r, o << 1 | 1, pos, vc);
    }
  }
} T[2];
int main() {
  scanf("%d", &n);
  T[0].init();
  T[1].init();
  for (int i = 2; i <= n; ++i) {
    int x = i, y = T[0].fa[i];
    T[1].insert(x, y, i);
    x = i, y = T[1].fa[i];
    T[0].insert(x, y, i);
  }
  int id;
  scanf("%d", &id), va.push_back(id + 1);
  for (int cur = 0; !va.empty(); cur ^= 1) {
    if (cur)
      puts("Red");
    else
      puts("Blue");
    sort(va.begin(), va.end());
    vb.clear();
    for (int dx : va) {
      printf("%d ", dx - 1);
      int x = dx, y = T[cur].fa[dx];
      T[cur ^ 1].vis[x] = 1;
      if (T[cur].dep[x] < T[cur].dep[y]) x = y;
      T[cur].get(1, n, 1, T[cur].dfn[x], vb);
    }
    putchar('\n');
    va = vb;
  }
  return 0;
}
