#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 79;
struct tree {
  int timer = 0;
  int tin[maxn], siz[maxn], heavy[maxn], usededge[maxn], head[maxn], p[maxn],
      usedvr[maxn << 1], depth[maxn];
  vector<int> s[maxn], my[maxn << 1], ans;
  void dfs_sizes(int v) {
    siz[v] = 1;
    heavy[v] = -1;
    for (int i : s[v]) {
      depth[i] = depth[v] + 1;
      dfs_sizes(i);
      siz[v] += siz[i];
      if (heavy[v] == -1 || siz[heavy[v]] < siz[i]) heavy[v] = i;
    }
  }
  void dfs_times(int v, int my_head) {
    head[v] = my_head, tin[v] = timer++;
    if (heavy[v] != -1) dfs_times(heavy[v], my_head);
    for (int i : s[v])
      if (i != heavy[v]) dfs_times(i, i);
  }
  void update(int l, int r, int id) {
    for (l += maxn, r += maxn + 1; l < r; l >>= 1, r >>= 1) {
      if (l & 1) my[l++].push_back(id);
      if (r & 1) my[--r].push_back(id);
    }
  }
  void query(int i, vector<int>& v) {
    for (i += maxn; i > 0; i >>= 1) {
      if (usedvr[i]) continue;
      usedvr[i] = true;
      for (int j : my[i])
        if (!usededge[j]) v.push_back(j), usededge[j] = true;
    }
  }
  void add_edge(int u, int v, int id) {
    while (head[u] != head[v]) {
      if (depth[head[u]] < depth[head[v]]) swap(u, v);
      update(tin[head[u]], tin[u], id);
      u = p[head[u]];
    }
    if (depth[u] < depth[v]) swap(u, v);
    if (u != v) update(tin[v] + 1, tin[u], id);
  }
} t[2];
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  for (int i = 0; i < 2; i++) {
    for (int j = 1; j < n; j++)
      cin >> t[i].p[j], t[i].s[--t[i].p[j]].push_back(j);
    t[i].dfs_sizes(0), t[i].dfs_times(0, 0);
  }
  for (int i = 0; i < 2; i++)
    for (int j = 1; j < n; j++) t[i].add_edge(t[i ^ 1].p[j], j, j);
  int idx, color = 0;
  cin >> idx;
  t[color].ans.push_back(idx);
  t[color ^ 1].usededge[idx] = true;
  cout << "Blue\n" << idx << "\n";
  while (true) {
    color ^= 1;
    t[color].ans.clear();
    for (int j : t[color ^ 1].ans)
      t[color ^ 1].query(t[color ^ 1].tin[j], t[color].ans);
    if (t[color].ans.empty()) break;
    cout << (color ? "Red\n" : "Blue\n");
    sort(t[color].ans.begin(), t[color].ans.end());
    for (int i : t[color].ans) cout << i << " ";
    cout << "\n";
  }
  return 0;
}
