#include <bits/stdc++.h>
using namespace std;
const int maxt = 1000000, maxn = maxt + 7;
int h[7][7];
char s[5][maxn];
void output(int n) {
  for (int i = 1; i <= 4; i++) {
    for (int j = 1; j <= n; j++) printf("%c", s[i][j]);
    puts("");
  }
}
bool DoIt_2(int I, int n, int tot) {
  for (int i = 1; i <= n; i++)
    if (s[2][i] != s[I][i]) tot--;
  if (tot < 0) return false;
  if (tot == 0) return true;
  if (tot % 2 == 1) return false;
  vector<int> A, B;
  A.clear(), B.clear();
  for (int i = 1; i <= n; i++)
    if (s[2][i] == s[I][i]) {
      if (s[2][i] == 'a') A.push_back(i);
      if (s[2][i] == 'b') B.push_back(i);
    }
  for (int i = 0; i < min(A.size(), B.size()); i++) {
    int x = A[i], y = B[i];
    tot -= 2;
    swap(s[I][x], s[I][y]);
    if (tot == 0) return true;
  }
  return false;
}
bool DoIt_3(int I, int n, int tot) {
  for (int i = 1; i <= n; i++)
    if (s[3][i] != s[I][i]) tot--;
  if (tot < 0) return false;
  if (tot == 0) return true;
  if (tot % 2 == 1) return false;
  vector<int> AA, AB, BA, BB;
  AA.clear(), AB.clear(), BA.clear(), BB.clear();
  for (int i = 1; i <= n; i++)
    if (s[3][i] == s[I][i]) {
      if (s[2][i] == 'a' && s[3][i] == 'a') AA.push_back(i);
      if (s[2][i] == 'a' && s[3][i] == 'b') AB.push_back(i);
      if (s[2][i] == 'b' && s[3][i] == 'a') BA.push_back(i);
      if (s[2][i] == 'b' && s[3][i] == 'b') BB.push_back(i);
    }
  for (int i = 0; i < min(AA.size(), AB.size()); i++) {
    int x = AA[i], y = AB[i];
    tot -= 2;
    swap(s[I][x], s[I][y]);
    if (tot == 0) return true;
  }
  for (int i = 0; i < min(BA.size(), BB.size()); i++) {
    int x = BA[i], y = BB[i];
    tot -= 2;
    swap(s[I][x], s[I][y]);
    if (tot == 0) return true;
  }
  return false;
}
bool check(int n) {
  for (int i = 1; i <= 4; i++)
    for (int j = 1; j <= n; j++) s[i][j] = 'a';
  for (int i = 2; i <= 4; i++)
    for (int j = 1; j <= h[1][i]; j++) s[i][j] = 'b';
  for (int i = 3; i <= 4; i++)
    if (!DoIt_2(i, n, h[2][i])) return false;
  if (!DoIt_3(4, n, h[3][4])) return false;
  return true;
}
int main() {
  for (int i = 1; i <= 4; i++)
    for (int j = i + 1; j <= 4; j++) scanf("%d", &h[i][j]);
  int head = 1, tail = maxt;
  while (head <= tail) {
    int mid = (head + tail) / 2;
    if (check(mid))
      tail = mid - 1;
    else
      head = mid + 1;
  }
  int n = tail + 1;
  if (n > maxt) {
    puts("-1");
    return 0;
  }
  printf("%d\n", n);
  check(n);
  output(n);
}
