#include <bits/stdc++.h>
using namespace std;
struct Logos {
  int w;
  int h;
  int id;
};
Logos l[3];
Logos h[3];
int v[3];
bool judge() {
  if (l[0].w == l[1].w) {
    if (l[1].w == l[2].w && l[0].h + l[1].h + l[2].h == l[0].w) {
      printf("%d\n", l[0].w);
      for (int k = 0; k < 3; k++) {
        for (int i = 0; i < l[k].h; i++) {
          for (int j = 0; j < l[k].w; j++) {
            printf("%c", 'A' + l[k].id);
          }
          printf("\n");
        }
      }
      return true;
    } else if (l[0].h + l[1].h == l[2].h && l[0].w + l[2].w == l[2].h) {
      printf("%d\n", l[2].h);
      for (int j = 0; j < l[2].h; j++) {
        for (int i = 0; i < l[0].w + l[2].w; i++) {
          if (i >= l[0].w)
            printf("%c", 'A' + l[2].id);
          else if (j < l[0].h)
            printf("%c", 'A' + l[0].id);
          else
            printf("%c", 'A' + l[1].id);
        }
        printf("\n");
      }
      return true;
    }
  }
  return false;
}
bool dfs(int x) {
  if (x == 3) {
    return judge();
  }
  for (int i = 0; i < 3; i++) {
    if (v[i]) continue;
    v[i] = 1;
    l[x] = h[i];
    if (dfs(x + 1)) return true;
    swap(l[x].h, l[x].w);
    if (dfs(x + 1)) return true;
    swap(l[x].h, l[x].w);
    v[i] = 0;
  }
  return false;
}
int main() {
  for (int i = 0; i < 3; i++) {
    scanf("%d%d", &h[i].w, &h[i].h);
    h[i].id = i;
  }
  if (!dfs(0)) printf("-1");
  return 0;
}
