#include <bits/stdc++.h>
using namespace std;
int gcdExtended(int a, int b, int* x, int* y) {
  if (a == 0) {
    *x = 0, *y = 1;
    return b;
  }
  int x1, y1;
  int gcd = gcdExtended(b % a, a, &x1, &y1);
  *x = y1 - (b / a) * x1;
  *y = x1;
  return gcd;
}
long long int modInverse(int a, int m) {
  int x, y;
  int g = gcdExtended(a, m, &x, &y);
  long long int res = ((long long int)x % m + (long long int)m) % m;
  return res;
}
long long int poww(long long int x, long long int n) {
  if (n == 0)
    return 1;
  else if (n == 1)
    return x;
  else if (n % 2 == 0)
    return poww(x * x, n / 2);
  else
    return x * poww(x * x, (n - 1) / 2);
}
long long int modularExponentiation(long long int x, long long int n,
                                    long long int Z) {
  long long int result = 1;
  while (n > 0) {
    if (n % 2 == 1) result = (result * x) % Z;
    x = (x * x) % Z;
    n = n / 2;
  }
  return result;
}
template <typename T>
T maxx(T a, T b) {
  if (a < b) return b;
  return a;
}
template <typename T, typename... Args>
T maxx(T a, T b, Args... args) {
  return (maxx(maxx(a, b), args...));
}
template <typename T>
T minn(T a, T b) {
  if (a < b) return a;
  return b;
}
template <typename T, typename... Args>
T minn(T a, T b, Args... args) {
  return (minn(minn(a, b), args...));
}
template <typename T>
void read(T& a) {
  cin >> a;
}
template <typename T, typename... Args>
void read(T& a, Args&... args) {
  cin >> a;
  read(args...);
}
template <typename T>
void write(T a) {
  cout << a << ' ';
}
template <typename T, typename... Args>
void write(T a, Args... args) {
  cout << a << ' ';
  write(args...);
}
inline long long int min(long long int a, long long int b) {
  if (a < b)
    return a;
  else
    return b;
}
inline long long int max(long long int a, long long int b) {
  if (a < b)
    return b;
  else
    return a;
}
long long int gcd(long long int a, long long int b) {
  if (a == 0) return b;
  if (b == 0) return a;
  if (a == b) return a;
  if (a > b)
    return gcd(a - b, b);
  else
    return gcd(a, b - a);
}
long long int ncr(int n, int r) {
  long long int ans = 1;
  r = min(r, n - r);
  for (int i = 0; i < r; i++) {
    ans = ((ans * ((n - i) % 1000000007)) % 1000000007 *
           modInverse(i + 1, 1000000007)) %
          1000000007;
  }
  return ans;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(NULL);
  int t = 1;
  while (t--) {
    long long int n, m, k;
    cin >> n;
    string s, t;
    cin >> s >> t;
    vector<int> parent(26), rank(26, 0);
    for (int i = 0; i < 26; i++) parent[i] = i;
    vector<pair<int, int>> ans;
    for (int i = 0; i < n; i++) {
      int a = s[i] - 'a', b = t[i] - 'a';
      while (parent[a] != a) a = parent[a];
      while (parent[b] != b) b = parent[b];
      if (a != b) {
        if (rank[a] > rank[b]) {
          parent[b] = a;
          ans.push_back({a, b});
        } else if (rank[a] < rank[b]) {
          parent[a] = b;
          ans.push_back({a, b});
        } else {
          parent[b] = a;
          rank[a]++;
          ans.push_back({a, b});
        }
      }
    }
    cout << ans.size() << '\n';
    for (auto x : ans) {
      cout << char('a' + x.first) << " " << char('a' + x.second);
      cout << '\n';
    }
  }
  return 0;
}
