#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
signed main() {
int n,m; cin>>n>>m;
char shop[n];
for (int i=0;i<n;i++) shop[i]='0';
int cost[n];
for (int i=0;i<n;i++) cost[i]=INT_MAX;
vector<pii> adj[n];
for (int i = 0; i<m; i++) {
int a,b,w;cin>>a>>b>>w;a--;b--;
adj[a].push_back({b,w});
adj[b].push_back({a,w});
}
vector<int> min_edge[n];
for (int i=0;i<n;i++) min_edge[i].resize(3);
// each shortest edge stored as {weight, from, to}
for (int i=0;i<n;i++) {
int min = INT_MAX;
pii edge;
for (pii e: adj[i]) {
if (min>e.second) {
min = e.second;
edge = e;
}
}
min_edge[i][0]=edge.second;
min_edge[i][1]=i;
min_edge[i][2]=edge.first;
}
sort(min_edge, min_edge+n);
int max_cost = min_edge[n-1][0];
for (int i=n-1;i>=0;i--) {
int from=min_edge[i][1], to=min_edge[i][2], weight=min_edge[i][0];
if (shop[from]=='0'&&shop[to]=='0') {
shop[from]='B';
shop[to]='D';
}
else if (shop[from]=='D'&&shop[to]=='0') {
shop[to]='B';
}
else if (shop[from]=='B'&&shop[to]=='0') {
shop[to]='D';
}
else if (shop[from]=='0'&&shop[to]=='D') {
shop[from]='B';
}
else if (shop[from]=='0'&&shop[to]=='B') {
shop[from]='D';
}
}
cout<<max_cost<<"\n";
for (int i=0;i<n;i++) cout<<shop[i];
return 0;
}