#include #include #include static inline constexpr uint_fast32_t check(const uint_fast32_t N, const std::vector& A, const uint_fast32_t mask) noexcept { uint_fast32_t W = 0, B = 0; for (uint_fast32_t i = 0; i != N; ++i) { if ((A[i] & mask) == A[i]) W |= A[i]; else if ((A[i] & mask) == 0) B |= A[i]; else return 0; } return W * B; } static inline constexpr std::pair solve(const uint_fast32_t N, const std::vector& A) noexcept { uint_fast32_t ans = 0, best_mask = 0; for (uint_fast32_t i = 0; i != 4096; ++i) { const uint_fast32_t result = check(N, A, i); if (ans < result) ans = result, best_mask = i; } std::string S; S.reserve(N); for (uint_fast32_t i = 0; i != N; ++i) { if ((A[i] & best_mask) == 0) S.push_back('B'); else S.push_back('W'); } return std::make_pair(std::move(ans), std::move(S)); } static inline void output(const std::pair& ans) noexcept { std::cout << ans.first << '\n' << ans.second << '\n'; } int main() { std::cin.tie(nullptr); std::ios::sync_with_stdio(false); uint_fast32_t N, i; std::cin >> N; std::vector A(N); for (i = 0; i != N; ++i) std::cin >> A[i]; output(solve(N, A)); return 0; }