#include <bits/stdc++.h>
using namespace std;
const int size = 200005;
void printer(vector<int>& v) {
  int n = v.size();
  for (int i = 0; i < n; i++) cout << v[i] << " ";
  cout << endl;
}
vector<int> adj[size];
vector<int> euler;
vector<int> s[size << 3];
unordered_map<int, int> m1, m2, m3, m4;
int maxs = INT_MIN;
void DFS(int n, int* t, int p) {
  (*t)++;
  maxs = max(maxs, *t);
  m1[*t] = n;
  m2[n] = (*t);
  euler.emplace_back(*t);
  int siz = adj[n].size();
  for (int i = 0; i < siz; i++) {
    if (adj[n][i] != p) DFS(adj[n][i], t, n);
  }
  (*t)++;
  m3[*t] = n;
  m4[n] = *t;
  euler.emplace_back(m2[n]);
}
void Build(int node, int l, int r) {
  int lc = node << 1;
  int rc = lc | 1;
  int mid = (l + r) >> 1;
  if (l == r) {
    s[node].emplace_back(euler[l]);
    return;
  }
  Build(lc, l, mid);
  Build(rc, mid + 1, r);
  merge(s[lc].begin(), s[lc].end(), s[rc].begin(), s[rc].end(),
        back_inserter(s[node]));
}
int Query(int ql, int qr, int check, int node, int l, int r) {
  int lc = node << 1;
  int rc = lc | 1;
  int mid = (l + r) >> 1;
  if (ql > r || l > qr) return 0;
  if (l >= ql && r <= qr)
    return upper_bound(s[node].begin(), s[node].end(), check) - s[node].begin();
  return Query(ql, qr, check, lc, l, mid) +
         Query(ql, qr, check, rc, mid + 1, r);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n;
  cin >> n;
  string a, b;
  cin >> a >> b;
  int l = 0, h = n - 1;
  int ct = 0;
  int tc = 0;
  while (l <= h) {
    if (l != h) {
      if (b[l] == b[h]) {
        if (a[l] != a[h]) ct++;
      } else {
        if ((a[l] == b[l] && a[h] == b[h]) || (a[l] == b[h] && a[h] == b[l]))
          ct += 0;
        else if (a[l] == b[l] || a[l] == b[h])
          ct++;
        else if (a[h] == b[h] || a[h] == b[l])
          ct++;
        else
          ct += 2;
      }
    } else {
      if (a[l] != b[l]) ct++;
    }
    l++;
    h--;
  }
  cout << ct << "\n";
  return 0;
}
