Problem:
String Conversion

Problem

ジェニファーとマリアンはカーラに文字列Sをプレゼントしました。

しかし、カーラは文字列Sをもらっても嬉しくありません。

文字列Tが欲しかったのです。

3人は協力して文字列Sを文字列Tに変えることにしました。

最初にジェニファーが文字を任意の順番に並び替えます。

次にマリアンが２種類のアルファベットの小文字を交換することを任意の回数行います。

この操作では、例えば以下のように、文字列中の同じ文字が全て交換されます。

aab → aとbを交換 → bba

aab → aとcを交換 → ccb

最後にカーラがある1文字を別の1文字に置換することをTになるまで繰り返します。

ジェニファーとマリアンはカーラの置換回数が少なくなるようにしてあげることにしました。

カーラが行う置換の回数の最小値を求めてください。

Input

n
S
T

1行目に文字列の長さnが与えられる。

2行目に文字列S、3行目に文字列Tが与えられる。

Constraints

1 ≤ n ≤ 105

S,Tは'a'~'z'のみを含む

|S| = |T| = n

Output

カーラの最少の置換回数を1行に出力せよ。

Sample Input 1

3
abc
xyz

Sample Output 1

0

Sample Input 2

5
aaabb
xyxyz

Sample Output 2

1

Solution in C# (judge verdict: Accepted)

using System.Linq;
using System.Collections.Generic;
using System;

public class Hello
{
    public static void Main()
    {
        var aL = "abcdefghijklmnopqrstuvwxyz";
        var d = new Dictionary<char, int>();
        for (int i = 0; i < 26; i++) d[aL[i]] = i;
        var a = new int[26];
        var b = new int[26];
        var n = int.Parse(Console.ReadLine().Trim());
        var s = Console.ReadLine().Trim();
        var t = Console.ReadLine().Trim();
        for (int i = 0; i < n; i++) { a[d[s[i]]]++; b[d[t[i]]]++; }
        var a2 = a.Where(x => x >= 1).OrderByDescending(x => x).ToArray();
        var b2 = b.Where(x => x >= 1).OrderByDescending(x => x).ToArray();
        var imin = Math.Min(a2.Length, b2.Length);
        for (int i = 0; i < imin; i++)
            a2[i] = Math.Max(a2[i] - b2[i], 0);
        Console.WriteLine(a2.Sum());
    }
}