#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-10;
const long long mod = 1000000007;
const int INF = INT_MAX;
char mp[510][510];
struct node {
  int x, y, id;
  node(int x, int y, int id) : x(x), y(y), id(id){};
  node() {}
};
vector<node> vec;
int main() {
  for (int i = 0; i <= 500; i++) {
    for (int j = 0; j <= 500; j++) {
      mp[i][j] = 'c';
    }
  }
  int a, b;
  int sum_size = 0, L_size = -1, pos = -1;
  for (int i = 0; i < 3; i++) {
    scanf("%d%d", &a, &b);
    if (a > b) swap(a, b);
    if (L_size < b) {
      L_size = b;
      pos = i;
    }
    vec.push_back(node(a, b, i));
    sum_size += a * b;
  }
  if (sum_size != L_size * L_size) {
    puts("-1");
    return 0;
  }
  for (int i = 1; i <= vec[pos].x; i++) {
    for (int j = 1; j <= vec[pos].y; j++) {
      mp[i][j] = ('A' + pos);
    }
  }
  int L = vec[pos].x, R = vec[pos].y;
  vector<node>::iterator it = vec.begin();
  for (int i = 0; i < 3; i++, it++) {
    if (i == pos) {
      vec.erase(it);
      break;
    }
  }
  bool isok = true;
  if (vec[0].y == L_size) {
    for (int i = 1 + L; i <= 1 + L + vec[0].x; i++) {
      for (int j = 1; j <= vec[0].y; j++) {
        mp[i][j] = ('A' + vec[0].id);
      }
    }
    for (int i = 1 + L + vec[0].x; i <= 1 + L + vec[0].x + vec[1].x; i++) {
      for (int j = 1; j <= vec[1].y; j++) {
        mp[i][j] = ('A' + vec[1].id);
      }
    }
  } else {
    if (vec[0].x + vec[1].x == L_size && vec[0].y == vec[1].y) {
      swap(vec[0].x, vec[0].y);
      swap(vec[1].x, vec[1].y);
    } else if (vec[0].x + vec[1].y == L_size && vec[0].y == vec[1].x) {
      swap(vec[0].x, vec[0].y);
    } else if (vec[1].x + vec[0].y == L_size && vec[1].y == vec[0].x) {
      swap(vec[1].x, vec[1].y);
    }
    for (int i = 1 + L; i <= 1 + L + vec[0].x; i++) {
      for (int j = 1; j <= vec[0].y; j++) {
        mp[i][j] = ('A' + vec[0].id);
      }
    }
    for (int i = 1 + L; i <= 1 + L + vec[1].x; i++) {
      for (int j = 1 + vec[0].y; j <= 1 + vec[0].y + vec[1].y; j++) {
        mp[i][j] = ('A' + vec[1].id);
      }
    }
    for (int i = 1; i <= L_size; i++) {
      for (int j = 1; j <= L_size; j++) {
        if (mp[i][j] == 'c') isok = false;
      }
    }
  }
  if (isok == false) {
    puts("-1");
    return 0;
  }
  printf("%d\n", L_size);
  for (int i = 1; i <= L_size; i++) {
    for (int j = 1; j <= L_size; j++) {
      printf("%c", mp[i][j]);
    }
    puts("");
  }
  return 0;
}
