#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
vector<int> bfs(int start, vector<vector<int>>& graf, int n){
vector<int> ki(n+1, -1);
vector<bool> volt(n+1, false);
queue<int> q;
q.push(start);
volt[start] = true;
int akt_meret = 1, kov_meret = 0, tav = 0;
int akt;
while(!q.empty()){
akt = q.front();
ki[akt] = tav;
akt_meret--;
q.pop();
for(int kov : graf[akt]){
if(volt[kov]) continue;
q.push(kov);
kov_meret++;
volt[kov] = true;
}
if(akt_meret == 0){
swap(akt_meret, kov_meret);
tav++;
}
}
return ki;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, m, r1, r2;
cin >> n >> m >> r1 >> r2;
vector<vector<int>> graf(n+1, vector<int>());
int a, b;
for(int i = 0; i < m; i++){
cin >> a >> b;
graf[a].push_back(b);
graf[b].push_back(a);
}
vector<int> tav1 = bfs(r1, graf, n);
vector<int> tav2 = bfs(r2, graf, n);
vector<pii> kul(n);
for(int i = 1; i <= n; i++){
kul[i-1] = {tav1[i]-tav2[i], i};
}
long long ossz = 0;
sort(kul.begin(), kul.end());
vector<char> mo(n+1);
for(int i = 0; i < n/2; i++){
ossz += tav1[kul[i].second];
mo[kul[i].second] = 'A';
}
for(int i = n/2; i < n; i++){
ossz += tav2[kul[i].second];
mo[kul[i].second] = 'B';
}
cout << ossz << "\n";
for(int i = 1; i <= n; i++){
cout << mo[i];
}
cout << "\n";
}