#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007LL;
struct plakat {
  int v;
  int s;
  char c;
};
bool operator<(const plakat& lhs, const plakat& rhs) {
  return (lhs.c) < (rhs.c);
}
bool operator>(const plakat& lhs, const plakat& rhs) {
  return (lhs.c) > (rhs.c);
}
int poskusi(vector<plakat> t) {
  while (next_permutation(t.begin(), t.end())) {
    if (t[0].s != t[1].s) continue;
    if (t[0].s != t[2].s) continue;
    if (t[0].s != t[0].v + t[1].v + t[2].v) continue;
    printf("%d\n", t[0].s);
    for (int i = 0, _n = t[0].v; i < _n; i++) {
      for (int j = 0, _n = t[0].s; j < _n; j++) printf("%c", t[0].c);
      printf("\n");
    }
    for (int i = 0, _n = t[1].v; i < _n; i++) {
      for (int j = 0, _n = t[1].s; j < _n; j++) printf("%c", t[1].c);
      printf("\n");
    }
    for (int i = 0, _n = t[2].v; i < _n; i++) {
      for (int j = 0, _n = t[2].s; j < _n; j++) printf("%c", t[2].c);
      printf("\n");
    }
    return 1;
  }
  while (next_permutation(t.begin(), t.end())) {
    if (t[0].v != t[1].v) continue;
    if (t[0].v != t[2].v) continue;
    if (t[0].v != t[0].s + t[1].s + t[2].s) continue;
    printf("%d\n", t[0].v);
    for (int i = 0, _n = t[0].v; i < _n; i++) {
      for (int j = 0, _n = t[0].s; j < _n; j++) printf("%c", t[0].c);
      for (int j = 0, _n = t[1].s; j < _n; j++) printf("%c", t[1].c);
      for (int j = 0, _n = t[2].s; j < _n; j++) printf("%c", t[2].c);
      printf("\n");
    }
    return 1;
  }
  while (next_permutation(t.begin(), t.end())) {
    if (t[0].s != t[1].s + t[2].s) continue;
    if (t[0].s != t[0].v + t[1].v) continue;
    if (t[1].v != t[2].v) continue;
    printf("%d\n", t[0].s);
    for (int i = 0, _n = t[0].v; i < _n; i++) {
      for (int j = 0, _n = t[0].s; j < _n; j++) printf("%c", t[0].c);
      printf("\n");
    }
    for (int i = 0, _n = t[1].v; i < _n; i++) {
      for (int j = 0, _n = t[1].s; j < _n; j++) printf("%c", t[1].c);
      for (int j = 0, _n = t[2].s; j < _n; j++) printf("%c", t[2].c);
      printf("\n");
    }
    return 1;
  }
  while (next_permutation(t.begin(), t.end())) {
    if (t[0].v != t[1].v + t[2].v) continue;
    if (t[0].v != t[0].s + t[1].s) continue;
    if (t[1].s != t[2].s) continue;
    printf("%d\n", t[0].v);
    for (int i = 0, _n = t[0].v; i < _n; i++) {
      for (int j = 0, _n = t[0].s; j < _n; j++) printf("%c", t[0].c);
      if (t[1].v > i)
        for (int j = 0, _n = t[1].s; j < _n; j++) printf("%c", t[1].c);
      else
        for (int j = 0, _n = t[2].s; j < _n; j++) printf("%c", t[2].c);
      printf("\n");
    }
    return 1;
  }
  return 0;
}
int main() {
  vector<plakat> t;
  plakat pr;
  t.push_back(pr);
  t.push_back(pr);
  t.push_back(pr);
  scanf("%d%d%d%d%d%d", &t[0].s, &t[0].v, &t[1].s, &t[1].v, &t[2].s, &t[2].v);
  t[0].c = 'A';
  t[1].c = 'B';
  t[2].c = 'C';
  if (poskusi(t)) return 0;
  swap(t[1].v, t[1].s);
  if (poskusi(t)) return 0;
  swap(t[2].v, t[2].s);
  if (poskusi(t)) return 0;
  swap(t[1].v, t[1].s);
  if (poskusi(t)) return 0;
  printf("-1\n");
  return 0;
}
