#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10, M = 2e5 + 10;
int d[N], u[M], v[M];
vector<int> g[N];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int n, m;
  cin >> n >> m;
  for (int i = 1; i <= n; ++i) {
    cin >> d[i];
  }
  for (int i = 1; i <= m; ++i) {
    cin >> u[i] >> v[i];
    g[u[i]].push_back(v[i]);
    g[v[i]].push_back(u[i]);
  }
  vector<int> ids(n);
  iota(ids.begin(), ids.end(), 1);
  sort(ids.begin(), ids.end(),
       [&](int i, int j) { return tie(d[i], i) < tie(d[j], j); });
  string colors(n, 'B');
  for (auto& i : ids) {
    sort(g[i].begin(), g[i].end(),
         [&](int x, int y) { return tie(d[x], x) < tie(d[y], y); });
    if (d[g[i][0]] > d[i]) {
      cout << -1 << endl;
      return 0;
    } else if (g[i][0] < i) {
      colors[i - 1] = 'B' ^ 'W' ^ colors[g[i][0] - 1];
    }
  }
  cout << colors << '\n';
  for (int i = 1; i <= m; ++i) {
    if (colors[u[i] - 1] == colors[v[i] - 1]) {
      cout << max(1, abs(d[u[i]] - d[v[i]])) << '\n';
    } else {
      cout << max(d[u[i]], d[v[i]]) << '\n';
    }
  }
}
