#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;
}
很简单的一个题,不用想什么贪心策略,直接并查集看关系能转移不,能转移就转移就好了...

京公网安备 11010502036488号