#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5,M=30;
char s1[N],s2[N];
int fa[M];
struct vv{
    int t,m;
};
vector<vv>v;
int f(int x)
{
    if(fa[x]==x) return x;
    else         return fa[x]=f(fa[x]);
}

int main()
{
    int n,ans=0;
    cin>>n;
    for(int i=0;i<26;i++) fa[i]=i;
    scanf("%s",s1+1);
    scanf("%s",s2+1);
    for(int i=1;i<=n;i++)
    {
        int a=s1[i]-'a';
        int b=s2[i]-'a';
        if(f(a)!=f(b))//假如不相同就合并祖先??
        {
            ans++;
            v.push_back({f(a),f(b)});
            fa[f(a)]=f(b);
        }
    }
    cout<<ans<<endl;
    for(int i=0;i<v.size();i++)
    {
        printf("%c %c\n",v[i].m+'a',v[i].t+'a');
    }
    return 0;
}

很简单的一个题,不用想什么贪心策略,直接并查集看关系能转移不,能转移就转移就好了...