#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define fr(i,n) for(int i=0;i<(n);++i)
#define Fr(i,n) for(int i=1;i<=(n);++i)
#define ifr(i,n) for(int i=(n)-1;i>=0;--i)
#define iFr(i,n) for(int i=(n);i>0;--i)

int n,m,a,b;
vector<int> d,ans;
vector<vector<pair<int,int>>> v;
vector<bool> vs,c;

void rec(int i,bool f=false){
    if(vs[i]) return;
    vs[i]=true;
    c[i]=f;
    for(auto&j:v[i]) if(ans[j.second]!=-1){
        rec(j.first,!f);
    }
}

int main(){
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    istream& in(cin);
    ostream& out(cout);
    in>>n>>m;
    d.resize(n);v.resize(n);
    for(auto&i:d) in>>i;
    fr(i,m){
        in>>a>>b;
        --a,--b;
        v[a].emplace_back(b,i);
        v[b].emplace_back(a,i);
    }
    fr(i,n){
        sort(v[i].begin(),v[i].end(),[&](pair<int,int> x,pair<int,int> y){
            return d[x.first]<d[y.first];
        });
        if(d[i]<d[v[i][0].first]) return cout<<-1<<endl,0;
    }
    c.resize(n);
    ans.resize(m,-1);
    vector<int> vis(n,-1);
    fr(i,n){
        if(vis[i]==d[i]) continue;
        int j,e;
        tie(j,e)=v[i][0];
        vis[j]=ans[e]=d[i];
    }
    vs.resize(n);
    fr(i,n) rec(i);
    fr(i,n) cout<<(c[i]?"B":"W");
    cout<<endl;
    fr(i,m) cout<<(ans[i]==-1?1000000000:ans[i])<<endl;
}