#include <bits/stdc++.h>
using namespace std;
struct node {
  char x, y;
} q[100];
char a[1010], b[1010];
int main() {
  scanf("%s %s", a, b);
  int i, flag = 0, ps = 0, j;
  int len = strlen(a);
  map<char, bool> vist;
  for (i = 0; i < len; i++) {
    if (a[i] == b[i]) {
      for (j = 0; j < ps; j++) {
        if (a[i] == q[j].x || a[i] == q[j].y) {
          flag = 1;
          break;
        }
      }
      if (flag)
        break;
      else {
        vist[a[i]] = true;
        continue;
      }
    } else {
      int flog = 0;
      for (j = 0; j < ps; j++) {
        if ((q[j].x == a[i] && q[j].y == b[i]) ||
            (q[j].x == b[i] && q[j].y == a[i])) {
          flog = 1;
          break;
        } else if ((q[j].x == a[i] && q[j].y != b[i]) ||
                   (q[j].y == a[i] && q[j].x != b[i]) |
                       (q[j].x == b[i] && q[j].y != a[i]) ||
                   (q[j].y == b[i] && q[j].x != a[i])) {
          flag = 1;
          break;
        }
      }
      if (vist[a[i]] || vist[b[i]]) {
        flag = 1;
        break;
      }
      if (flag) break;
      if (flog) continue;
      q[ps].x = a[i];
      q[ps].y = b[i];
      ps++;
    }
  }
  if (flag)
    printf("-1\n");
  else {
    printf("%d\n", ps);
    for (i = 0; i < ps; i++) printf("%c %c\n", q[i].x, q[i].y);
  }
  return 0;
}
