#define author SweetRainZyf
#define SweetRainZyf zkyFollower
#pragma GCC optimize(1,2,3,"Ofast","inline")
#include <bits/stdc++.h>
#define int long long
#define uint unsigned int
#define double long double
#define mod (int)998244353
#define inf (int)4557430888798830399
#define oo (int)4485090715960753727
#define pii pair<int,int>
#define mp(x,y) make_pair(x,y)
#define pb(x) push_back(x)
#define pf(x) push_front(x)
#define lowbit(x) (x&-x)
#define size(s) (int)s.size()
#define all(s) s.begin(),s.end()
#define fi first
#define se second
#define endl "\n"
using namespace std;
void inline solve();
signed main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
#ifndef ONLINE_JUDGE
freopen("SweetRainCode.in","r",stdin);
freopen("SweetRainCode.out","w",stdout);
#endif
int t=1;
while(t--){
solve();
}
return 0;
}
const int maxn=20;
const uint base=131;
int n;
char s[maxn],t[maxn];
unordered_map<uint,int> dp;
int inline update(int &x,int y){
return x=min(x,y);
}
uint hsh(){
uint res=0;
for(int i=1;i<=n+2;i++){
res=res*base+(uint)s[i];
}
return res;
}
int dfs(int idx){
uint val=hsh();
if(dp.count(val)){
return dp[val];
}
dp[val]=inf;
bool flag=true;
for(int i=1;i<=n;i++){
if(s[i]!=t[i]){
flag=false;
}
}
if(flag){
return dp[val]=0;
}
for(int pos=1;pos<=n+1;pos++){
if(s[pos]!='*' && s[pos+1]!='*'){
swap(s[pos],s[idx]);
swap(s[pos+1],s[idx+1]);
update(dp[val],dfs(pos)+1);
swap(s[pos],s[idx]);
swap(s[pos+1],s[idx+1]);
}
}
return dp[val];
}
void inline solve(){
cin >> n;
for(int i=1;i<=n;i++){
cin >> s[i];
}
for(int i=1;i<=n;i++){
cin >> t[i];
}
s[n+1]=s[n+2]=t[n+1]=t[n+2]='*';
int ans=dfs(n+1);
if(ans>=inf){
cout << -1 << endl;
}else{
cout << ans << endl;
}
}