#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int n, m, x, y, z;
vector<int> need_to_del[2];
struct Seg {
  vector<int> f[N << 2];
  int xb = N << 1, isdel[N];
  inline void push_back(int x, int y, int z) {
    for (int l = xb + x - 1, r = xb + y + 1; l >> 1 != r >> 1;
         l >>= 1, r >>= 1) {
      if (l & 1 ^ 1) f[l + 1].push_back(z);
      if (r & 1) f[r - 1].push_back(z);
    }
  }
  inline void del(int x, vector<int> &ans) {
    for (int i = xb + x; i; i >>= 1) {
      for (int v : f[i])
        if (!isdel[v]) {
          ans.push_back(v);
          isdel[v] = 1;
        }
      f[i].clear();
    }
  }
};
struct Tree {
  string s;
  int tot, fi[N], ne[N], a[N], x, dfn[N], dfs_clock;
  Seg T;
  inline void add(int x, int y) {
    a[++tot] = y;
    ne[tot] = fi[x];
    fi[x] = tot;
  }
  int tp[N], si[N], ms[N], fa[N], de[N];
  inline void get_ms(int x, int fat) {
    si[x] = 1;
    fa[x] = fat;
    de[x] = de[fat] + 1;
    for (int i = fi[x]; i; i = ne[i]) {
      get_ms(a[i], x);
      si[x] += si[a[i]];
      ms[x] = si[a[i]] > si[ms[x]] ? a[i] : ms[x];
    }
  }
  inline void get_tp(int x, int top) {
    tp[x] = top;
    dfn[x] = ++dfs_clock;
    if (ms[x]) get_tp(ms[x], top);
    for (int i = fi[x]; i; i = ne[i])
      if (a[i] != ms[x]) get_tp(a[i], a[i]);
  }
  inline void pre(string t) {
    s = t;
    for (int i = 2; i <= n; ++i) scanf("%d", &x), add(x, i);
    get_ms(1, 0);
    get_tp(1, 1);
  }
  inline void push_back(int u, int v, int val) {
    while (tp[u] != tp[v]) {
      if (de[tp[u]] < de[tp[v]]) swap(u, v);
      T.push_back(dfn[tp[u]], dfn[u], val);
      u = fa[tp[u]];
    }
    if (de[u] < de[v])
      T.push_back(dfn[u] + 1, dfn[v], val);
    else if (de[u] > de[v])
      T.push_back(dfn[v] + 1, dfn[u], val);
  }
  inline void del(int v, vector<int> &ans) { T.del(dfn[v], ans); }
} g[2];
int main() {
  scanf("%d", &n);
  g[0].pre("Blue");
  g[1].pre("Red");
  for (int i = 2; i <= n; ++i)
    g[1].push_back(i, g[0].fa[i], i), g[0].push_back(i, g[1].fa[i], i);
  scanf("%d", &x);
  ++x;
  g[1].T.isdel[x] = 1;
  need_to_del[0].push_back(x);
  for (int i = 1; i <= 2 * n - 2; ++i) {
    cout << g[i & 1 ^ 1].s << endl;
    need_to_del[i & 1].clear();
    sort(need_to_del[i & 1 ^ 1].begin(), need_to_del[i & 1 ^ 1].end());
    for (int v : need_to_del[i & 1 ^ 1])
      printf("%d ", v - 1), g[i & 1 ^ 1].del(v, need_to_del[i & 1]);
    puts("");
    if (need_to_del[i & 1].size() == 0) return 0;
  }
  return 0;
}
