#include using namespace std; #include using namespace atcoder; using ll = long long; int main () { int N; cin >> N; std::vector A(N); for (auto& a : A) cin >> a; int lg = 0; { int mA = *max_element(A.begin(), A.end()); while ((1 << lg) <= mA) lg ++; } dsu D(N + lg); for (int i = 0; i < N; i ++) { int a = A[i]; for (int j = 0; j < lg; j ++) { if ((a >> j) & 1) { D.merge(N + j, i); } } } auto gr = D.groups(); string ret(N, 'B'); vector> ids; vector val; for (auto& v : gr) { vector v2; int x = 0; for (int a : v) { if (a >= N) { x |= (1 << (a - N)); } else { v2.push_back(a); } } if (x) { ids.push_back(v2); val.push_back(x); } } ll ans = 0; int M = ids.size(); int mv = 0; for (int s = 0; s < (1 << M); s ++) { ll w = 0, b = 0; for (int i = 0; i < M; i ++) { (((s >> i) & 1) ? w : b) |= val[i]; } if (ans < w * b) { ans = w * b; mv = s; } } cout << ans << endl; for (int i = 0; i < M; i ++) { if ((mv >> i) & 1) { for (int u : ids[i]) { ret[u] = 'W'; } } } cout << ret << endl; }