#include <bits/stdc++.h>
using namespace std;
struct quji {
  int l, r, mid;
  vector<int> v;
  bool vis;
} c[200002 << 2][2];
struct edge {
  int to, nxxt;
} e[200002 << 1][2];
bool vis[200002][2];
vector<int> ans, nw;
int n, fa[200002][2], dep[200002][2], siz[200002][2], son[200002][2],
    tot[200002][2], dfn[200002][2], rev[200002][2], head[200002][2], cnt[2], cn;
inline void ins(int u, int v, int w) {
  e[cnt[w]][w] = (edge){v, head[u][w]};
  head[u][w] = cnt[w]++;
}
void df5(int te, int o) {
  siz[te][o] = 1;
  for (int i = head[te][o]; i; i = e[i][o].nxxt) {
    int j = e[i][o].to;
    dep[j][o] = dep[te][o] + 1;
    df5(j, o);
    siz[te][o] += siz[j][o];
    if (siz[j][o] > siz[son[te][o]][o]) son[te][o] = j;
  }
}
void dfs(int te, int o) {
  if (te == son[fa[te][o]][o])
    tot[te][o] = tot[fa[te][o]][o];
  else
    tot[te][o] = te;
  dfn[te][o] = ++cn;
  rev[cn][o] = te;
  if (son[te][o]) dfs(son[te][o], o);
  for (int i = head[te][o]; i; i = e[i][o].nxxt)
    if (e[i][o].to ^ son[te][o]) dfs(e[i][o].to, o);
}
void bt(int ind, int l, int r, int o) {
  c[ind][o].l = l;
  c[ind][o].r = r;
  c[ind][o].mid = (l + r) >> 1;
  if (l == r) return;
  bt(ind << 1, l, c[ind][o].mid, o);
  bt(ind << 1 | 1, c[ind][o].mid + 1, r, o);
}
void chng(int ind, int l, int r, int x, int o) {
  if (l > r) return;
  if (l <= c[ind][o].l && c[ind][o].r <= r) {
    c[ind][o].v.push_back(x);
    return;
  }
  if (l <= c[ind][o].mid) chng(ind << 1, l, r, x, o);
  if (r > c[ind][o].mid) chng(ind << 1 | 1, l, r, x, o);
}
void ljs(int x, int y, int o, int va) {
  while (tot[x][o] ^ tot[y][o]) {
    if (dep[tot[x][o]][o] < dep[tot[y][o]][o]) swap(x, y);
    chng(1, dfn[tot[x][o]][o], dfn[x][o], va, o);
    x = fa[tot[x][o]][o];
  }
  if (dep[x][o] > dep[y][o]) swap(x, y);
  chng(1, dfn[x][o] + 1, dfn[y][o], va, o);
}
void ask(int ind, int x, int o) {
  if (!c[ind][o].vis) {
    for (int i = 0; i < c[ind][o].v.size(); i++) {
      int te = c[ind][o].v[i];
      if (!vis[te][o]) nw.push_back(te), vis[te][o] = 1;
    }
    c[ind][o].vis = 1;
  }
  if (c[ind][o].l == c[ind][o].r) return;
  ask(x <= c[ind][o].mid ? (ind << 1) : (ind << 1 | 1), x, o);
}
int main() {
  cnt[0] = cnt[1] = 1;
  scanf("%d", &n);
  for (int i = 2; i <= n; i++) {
    scanf("%d", &fa[i][0]);
    ins(fa[i][0], i, 0);
  }
  df5(1, 0);
  dfs(1, 0);
  for (int i = 2; i <= n; i++) {
    scanf("%d", &fa[i][1]);
    ins(fa[i][1], i, 1);
  }
  cn = 0;
  df5(1, 1);
  dfs(1, 1);
  bt(1, 1, n, 0);
  bt(1, 1, n, 1);
  for (int i = 2; i <= n; i++) ljs(i, fa[i][0], 1, i), ljs(i, fa[i][1], 0, i);
  int st, t = 0;
  scanf("%d", &st);
  ans.push_back(st + 1);
  vis[st + 1][1] = 1;
  while (!ans.empty()) {
    puts(t ? "Red" : "Blue");
    for (int i = 0; i < ans.size(); i++) {
      int x = ans[i];
      printf("%d ", x - 1);
      ask(1, dfn[x][t], t);
    }
    puts("");
    ans = nw;
    nw.clear();
    t ^= 1;
    sort(ans.begin(), ans.end());
  }
}
