x1, y1, x2, y2, x3, y3=[int(k) for k in input().split()]
iota=[((x1, y1), "A"), ((x2, y2), "B"), ((x3, y3), "C")]
for j in range(3):
iota[j]=tuple([tuple(sorted(list(iota[j][0]))), iota[j][1]])
iota.sort(key=lambda x: max(x[0]))
rho=[iota[j][1] for j in range(3)]
iota=[iota[j][0] for j in range(3)]
y=iota.pop()
c, d=y[1], y[0]
if iota[1][1]==c:
if iota[0][1]==c:
if iota[0][0]+iota[1][0]==c-d:
print(c)
for j in range(d):
print(rho[2]*c)
for j in range(iota[0][0]):
print(rho[0]*c)
for j in range(iota[1][0]):
print(rho[1]*c)
else:
print(-1)
else:
print(-1)
else:
d=c-d
if (d not in iota[0]) or (d not in iota[1]):
print(-1)
else:
if iota[0][0]==d:
iota[0]=(iota[0][1], iota[0][0])
if iota[1][0]==d:
iota[1]=(iota[1][1], iota[1][0])
if iota[0][0]+iota[1][0]!=c:
print(-1)
else:
print(c)
for j in range(c-d):
print(rho[2]*c)
for j in range(d):
print(rho[0]*iota[0][0]+rho[1]*iota[1][0])
#include <bits/stdc++.h>
#include <algorithm>
using namespace std;
namespace IO{
void setIn(string s) {freopen(s.c_str(), "r", stdin);}
void setOut(string s) {freopen(s.c_str(), "w", stdout);}
void setIO(string s = ""){
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
#endif // ONLINE_JUDGE
if (s.size()){
setIn(s+".inp");
setOut(s+".out");
} else{
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
#endif // ONLINE_JUDGE
}
}
}
using namespace IO;
namespace Function{
template <typename T1, typename T2> bool amax(T1 &a, T2 b){
if (a < b) {
a = b;
return 1;
}
return 0;
}
template <typename T1, typename T2> bool amin(T1 &a, T2 b){
if (a > b){
a = b;
return 1;
}
return 0;
}
template <typename T> void compress(T &a){
sort(a.begin(), a.end());
a.resize(unique(a.begin(), a.end()) - a.begin());
}
template <typename T1, typename T2, typename T3> int position(T1 Begin, T2 End, T3 val, bool type = 0){
if (type == 0){
return lower_bound(Begin, End, val) - Begin;
}
return upper_bound(Begin, End, val) - Begin;
}
template <typename T> long long sqr(T x) {return 1LL * x * x;}
template <typename T1, typename T2> long long pow_mod(T1 a, T2 b, long long mod = 1){ //a ^ b % mod
if(b == 0){return 1 % mod;}
else{
if(b % 2 == 0){
return sqr(pow_mod(a, b / 2, mod)) % mod;
}else{
return a * (sqr(pow_mod(a, b / 2, mod)) % mod) % mod;
}
}
}
template <typename T1, typename T2> long long GCD(T1 a, T2 b) {return b == 0 ? a : GCD(b, a % b);}
template <typename T1, typename T2> long long LCM(T1 a, T2 b) {return 1LL * a / GCD(a, b) * b;}
}
using namespace Function;
namespace Output{
char End_Of_Stream = '\n';
void print(int x) {cout << x << End_Of_Stream;}
void print(unsigned int x) {cout << x << End_Of_Stream;}
void print(long unsigned int x) {cout << x << End_Of_Stream;}
void print(long long x) {cout << x << End_Of_Stream;}
void print(unsigned long long x) {cout << x << End_Of_Stream;}
void print(float x) {cout << x << End_Of_Stream;}
void print(double x) {cout << x << End_Of_Stream;}
void print(long double x) {cout << x << End_Of_Stream;}
void print(char x) {cout << x << End_Of_Stream;}
void print(const char* x) {cout << x << End_Of_Stream;}
void print(string x) {cout << x << End_Of_Stream;}
void print(bool x) {cout << x << End_Of_Stream;}
template <typename T1, typename T2> void print(pair <T1, T2> a) {cout << a.first << " " << a.second << End_Of_Stream;}
template <size_t sz> void print(bitset<sz> a) {
for(int i = 0; i < sz; i++){
cout << a[i];
}
cout << End_Of_Stream;
}
template <typename T> void write(T x) {print(x);}
template <class T, class... Ts> void write(T t, Ts... ts){
write(t);
write(ts...);
}
template <class T, class... Ts> void print(T t, Ts... ts){
End_Of_Stream = ' ';
write(t, ts...);
cout << '\n';
End_Of_Stream = '\n';
}
template <typename T> void print(T a){
for(auto it : a){
cout << it << " ";
}
cout << "\n";
}
template <typename T> void prints(T a){
for(auto it : a){
print(it);
}
}
template <class T, class... Ts> void prine(T t, Ts... ts){
print(t, ts...);
exit(0);
}
}
using namespace Output;
typedef pair <int, int> pii;
typedef long long ll;
#define fi first
#define se second
const int dx[] = {1, -1, 0, 0};
const int dy[] = {0, 0, 1, -1};
const int dx1[] = {1, -1, 0, 0, -1, 1, -1, 1};
const int dy1[] = {0, 0, 1, -1, -1, -1, 1, 1};
const int INF = 1e9 + 10;
const long long INFL = 1e18 + 1e15;
const long long MOD = 1e9 + 7;
const long long MOD1 = (119 << 23) + 1;
const int N = 2e5 + 5;
int x[3];
int y[3];
char c[3] = {'A', 'B', 'C'};
int main(){
// setIO();
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
for(int i = 0; i < 3; i++){
cin >> x[i] >> y[i];
}
if(max(x[1], y[1]) > max(x[0], y[0])){
swap(x[1], x[0]);
swap(y[1], y[0]);
swap(c[1], c[0]);
}
if(max(x[2], y[2]) > max(x[0], y[0])){
swap(x[2], x[0]);
swap(y[2], y[0]);
swap(c[2], c[0]);
}
for(int mask = 0; mask < 8; mask++){
int x_temp[3];
int y_temp[3];
for(int bit = 0; bit < 3; bit++){
x_temp[bit] = x[bit];
y_temp[bit] = y[bit];
if(mask & (1 << bit)){
swap(x_temp[bit], y_temp[bit]);
}
}
// print(mask, x_temp[0], y_temp[0], x_temp[1], y_temp[1], x_temp[2], y_temp[2]);
if(y_temp[1] == y_temp[2] && y_temp[1] == y_temp[0] && x_temp[0] + x_temp[1] + x_temp[2] == y_temp[0]){
print(y_temp[0]);
for(int k = 0; k < 3; k++){
for(int i = 0; i < x_temp[k]; i++){
for(int j = 0; j < y_temp[k]; j++){
cout << c[k];
}
cout << "\n";
}
}
return 0;
}else if(x_temp[1] == x_temp[2] && y_temp[1] + y_temp[2] == y_temp[0] && x_temp[1] + x_temp[0] == y_temp[0]){
print(y_temp[0]);
for(int k = 0; k < 1; k++){
for(int i = 0; i < x_temp[k]; i++){
for(int j = 0; j < y_temp[k]; j++){
cout << c[k];
}
cout << "\n";
}
}
for(int i = 0; i < x_temp[1]; i++){
for(int j = 0; j < y_temp[0]; j++){
if(j < y_temp[1]){
cout << c[1];
}else{
cout << c[2];
}
}
cout << "\n";
}
return 0;
}
}
prine(-1);
return 0;
}
492A - Vanya and Cubes | 217A - Ice Skating |
270A - Fancy Fence | 181A - Series of Crimes |
1638A - Reverse | 1654C - Alice and the Cake |
369A - Valera and Plates | 1626A - Equidistant Letters |
977D - Divide by three multiply by two | 1654B - Prefix Removals |
1654A - Maximum Cake Tastiness | 1649A - Game |
139A - Petr and Book | 1612A - Distance |
520A - Pangram | 124A - The number of positions |
1041A - Heist | 901A - Hashing Trees |
1283A - Minutes Before the New Year | 1654D - Potion Brewing Class |
1107B - Digital root | 25A - IQ test |
785A - Anton and Polyhedrons | 1542B - Plus and Multiply |
306A - Candies | 1651C - Fault-tolerant Network |
870A - Search for Pretty Integers | 1174A - Ehab Fails to Be Thanos |
1169A - Circle Metro | 780C - Andryusha and Colored Balloons |