#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5;
struct config {
  int z1, z2, z3, z4;
};
int h[10][10];
char a[MAXN], b[MAXN], c[MAXN], d[MAXN];
void reset(int n) {
  for (int i = 0; i < n; i++) {
    a[i] = b[i] = c[i] = d[i] = 'a';
  }
}
bool solveB(int n) {
  for (int i = 0; i < n - h[1][2]; i++) {
    b[i] = 'a';
  }
  for (int i = n - h[1][2]; i < n; i++) {
    b[i] = 'b';
  }
  return true;
}
bool solveC(int n) {
  int a = n - h[1][2];
  int toAdd = n - h[1][3];
  for (int i = 0; i <= min(n - h[1][2], n - toAdd); i++) {
    if (i + toAdd - min(a, toAdd) == h[2][3]) {
      for (int j = 0; j < i; j++) {
        c[j] = 'b';
      }
      for (int j = i; j < i + toAdd; j++) {
        c[j] = 'a';
      }
      for (int j = i + toAdd; j < n; j++) {
        c[j] = 'b';
      }
      return true;
    }
    a--;
  }
  return false;
}
bool solveD(int n) {
  config limit = {0, 0, 0, 0};
  for (int i = 0; i < n; i++) {
    if (b[i] == 'a' && c[i] == 'b') limit.z1++;
    if (b[i] == 'a' && c[i] == 'a') limit.z2++;
    if (b[i] == 'b' && c[i] == 'a') limit.z3++;
    if (b[i] == 'b' && c[i] == 'b') limit.z4++;
  }
  config C = {-1, -1, -1, -1};
  for (int i = 0; i <= limit.z1; i++) {
    int z1 = i;
    int z4 = (n - h[1][4] + h[3][4] - limit.z3 - limit.z2 - 2 * z1) / 2;
    int z3 = (n - h[1][4] + h[2][4] - limit.z1 - limit.z2 - 2 * z4) / 2;
    int z2 = n - h[1][4] - z1 - z3 - z4;
    if (z1 < 0 || z1 > limit.z1) continue;
    if (z2 < 0 || z2 > limit.z2) continue;
    if (z3 < 0 || z3 > limit.z3) continue;
    if (z4 < 0 || z4 > limit.z4) continue;
    if (z3 + z4 + limit.z1 - z1 + limit.z2 - z2 != h[2][4]) continue;
    if (z1 + z4 + limit.z3 - z3 + limit.z2 - z2 != h[3][4]) continue;
    C = {z1, z2, z3, z4};
  }
  if (C.z1 == -1) return false;
  for (int i = 0; i < n; i++) {
    if (b[i] == 'a' && c[i] == 'b') {
      if (C.z1 > 0) {
        d[i] = 'a';
        C.z1--;
      } else
        d[i] = 'b';
    } else if (b[i] == 'a' && c[i] == 'a') {
      if (C.z2 > 0) {
        d[i] = 'a';
        C.z2--;
      } else
        d[i] = 'b';
    } else if (b[i] == 'b' && c[i] == 'a') {
      if (C.z3 > 0) {
        d[i] = 'a';
        C.z3--;
      } else
        d[i] = 'b';
    } else if (b[i] == 'b' && c[i] == 'b') {
      if (C.z4 > 0) {
        d[i] = 'a';
        C.z4--;
      } else
        d[i] = 'b';
    }
  }
  return true;
}
void print(int n) {
  cout << n << '\n';
  for (int i = 0; i < n; i++) cout << a[i];
  cout << '\n';
  for (int i = 0; i < n; i++) cout << b[i];
  cout << '\n';
  for (int i = 0; i < n; i++) cout << c[i];
  cout << '\n';
  for (int i = 0; i < n; i++) cout << d[i];
  cout << '\n';
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int maxNum = 0, minNum = MAXN;
  for (int i = 1; i <= 4; i++) {
    for (int j = i + 1; j <= 4; j++) {
      cin >> h[i][j];
      maxNum = max(maxNum, h[i][j]);
      minNum = min(minNum, h[i][j]);
    }
  }
  for (int i = max(maxNum + minNum / 2 - 1500, maxNum);
       i <= maxNum + minNum / 2 + 200; i++) {
    reset(i);
    if (solveB(i) == true && solveC(i) == true && solveD(i) == true) {
      print(i);
      return 0;
    }
  }
  for (int i = max(maxNum + maxNum / 2 - 1500, maxNum);
       i <= maxNum + maxNum / 2 + 200; i++) {
    reset(i);
    if (solveB(i) == true && solveC(i) == true && solveD(i) == true) {
      print(i);
      return 0;
    }
  }
  cout << "-1" << '\n';
}
