#include <bits/stdc++.h>
using namespace std;
mt19937_64 mt_rnd_64(chrono::steady_clock::now().time_since_epoch().count());
long long rnd(long long l, long long r) {
  return (mt_rnd_64() % (r - l + 1)) + l;
}
struct Rc {
  int w;
  int h;
  int ind;
};
bool ch = 0;
vector<Rc> v;
void check(vector<Rc> a) {
  int len = a[0].w;
  if (len - a[0].h - a[1].h == 0 && a[1].h == a[2].h &&
      a[1].w + a[2].w == len) {
    cout << len << '\n';
    for (int i = 0; i < a[0].h; i++) {
      for (int j = 0; j < a[0].w; j++) cout << char('A' + a[0].ind);
      cout << '\n';
    }
    for (int i = 0; i < a[1].h; i++) {
      for (int j = 0; j < len; j++) {
        if (j < a[1].w)
          cout << char('A' + a[1].ind);
        else
          cout << char('A' + a[2].ind);
      }
      cout << '\n';
    }
    ch = 1;
  } else if (len - a[0].h - a[1].h - a[2].h == 0 &&
             a[1].w + a[2].w == 2 * len) {
    cout << len << '\n';
    for (int k = 0; k < 3; k++) {
      for (int i = 0; i < a[k].h; i++) {
        for (int j = 0; j < len; j++) cout << char('A' + a[k].ind);
        cout << '\n';
      }
    }
    ch = 1;
  }
}
void solve(int ind, vector<Rc> a) {
  if (ch) return;
  if (a.size() == 3) {
    vector<int> indexes = {0, 1, 2};
    check(a);
    while (!ch && next_permutation(indexes.begin(), indexes.end())) {
      vector<Rc> b;
      for (int i = 0; i < 3; i++) b.push_back(a[indexes[i]]);
      check(b);
    }
    return;
  }
  Rc b = v[ind];
  a.push_back(b);
  solve(ind + 1, a);
  a.pop_back();
  swap(b.w, b.h);
  a.push_back(b);
  solve(ind + 1, a);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  for (int i = 0; i < 3; i++) {
    Rc a;
    cin >> a.w >> a.h;
    a.ind = i;
    v.push_back(a);
  }
  solve(0, vector<Rc>());
  if (!ch) cout << -1;
}
