#pragma GCC optimize("O3,inline")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define int ll
using ii = pair<int, int>;
using iii = pair<int, ii>;
constexpr int MAXN = 500'000 + 5;
constexpr int INF = 1e18 + 5;
ii p[MAXN];
bool duck[MAXN];
bool vis[MAXN];
vector<int> adjlist[MAXN];
void dfs(int x) {
vis[x] = true;
for (int ch : adjlist[x]) {
if (vis[ch]) continue;
duck[ch] = !duck[x];
dfs(ch);
}
}
signed main() {
ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr);
fill(p, p + MAXN, ii{INF, INF});
int N, M; cin >> N >> M;
for (int i = 0; i < M; ++i) {
int u, v, w; cin >> u >> v >> w;
p[u] = min(p[u], ii{w, v});
p[v] = min(p[v], ii{w, u});
}
int ans = -INF;
for (int i = 1; i <= N; ++i) {
ans = max(ans, p[i].first);
adjlist[p[i].second].emplace_back(i);
adjlist[i].emplace_back(p[i].second);
}
for (int i = 1; i <= N; ++i) {
if (!vis[i]) dfs(i);
}
cout << ans << '\n';
for (int i = 1; i <= N; ++i) cout << (duck[i] ? 'D' : 'B');
}