You are given strings s and t, both of length N. s and t consist of `0` and `1`. Additionally, in these strings, the same character never occurs three or more times in a row.

You can modify s by repeatedly performing the following operation:

* Choose an index i (1 \leq i \leq N) freely and invert the i-th character in s (that is, replace `0` with `1`, and `1` with `0`), under the condition that the same character would not occur three or more times in a row in s after the operation.



Your objective is to make s equal to t. Find the minimum number of operations required.

Constraints

* 1 \leq N \leq 5000
* The lengths of s and t are both N.
* s and t consists of `0` and `1`.
* In s and t, the same character never occurs three or more times in a row.

Input

Input is given from Standard Input in the following format:


N
s
t


Output

Find the minimum number of operations required to make s equal to t. It can be proved that the objective is always achievable in a finite number of operations.

Examples

Input

4
0011
0101


Output

4


Input

1
0
0


Output

0


Input

8
00110011
10101010


Output

10
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int,int> pii;
#define Rep(i,a,b) for(register int i=(a);i<=int(b);++i)
#define Dep(i,a,b) for(register int i=(a);i>=int(b);--i)
#define rep(i,a,b) for(register int i=(a);i<int(b);++i)
#define mem(x,v) memset(x,v,sizeof(x))
#define fi first
#define se second
#define gc getchar
#define pc putchar
inline ll read(){
    ll x=0,f=1;char c=gc();
    for(;!isdigit(c);c=gc())if(c=='-')f=-1;
    for(;isdigit(c);c=gc())x=(x<<1)+(x<<3)+(c^48);
    return x*f;
}
inline void write(ll x){if(x<0)x=-x,pc('-');if(x>=10)write(x/10);putchar(x%10+'0');}
inline void wri(ll x){write(x);pc(' ');}
inline void writeln(ll x){write(x);pc('\n');}
const int maxn = 5005;
char s[maxn],t[maxn];
int n,ans,a[maxn],b[maxn];
int main(){
	n = read();scanf("%s%s",s+1,t+1);
	if(s[1] != t[1]) a[++*a] = 0;
	rep(i,1,n) if(s[i] != s[i+1]) a[++*a] = i;
	rep(i,1,n) if(t[i] != t[i+1]) b[++*b] = i;
	ans = 1<<30;
	for(int i=0;i<=*a;i+=2){
		int x = i + 1,y = 1,tmp = 0;
		Rep(j,1,i) tmp += a[j];
		while(x <= *a || y <= *b){
			if(x<=*a&&y<=*b) tmp+=abs(a[x++]-b[y++]); else
			if(x<=*a) tmp+=n-a[x++]; else tmp+=n-b[y++];
		}ans=min(ans,tmp);
	}
	for(int i=0;i<=*b;i+=2){
		int x = 1,y = i+1,tmp = 0;
		Rep(j,1,i) tmp += b[j];
		while(x <= *a || y <= *b){
			if(x<=*a&&y<=*b) tmp+=abs(a[x++]-b[y++]); else
			if(x<=*a) tmp+=n-a[x++]; else tmp+=n-b[y++],y;
		}ans=min(ans,tmp);
	}writeln(ans);
	return 0;
}