#include <bits/stdc++.h>
using namespace std;
#define rep( i, n, m ) for(int i = ( n ); i < ( m ); i++)
#define rep_d( i, n, m ) for(int i = ( n ) - 1; i >= ( m ); i--)
#define sort_asc( X ) sort(( X ).begin(), ( X ).end())
#define sort_desc( X ) sort(( X ).begin(), ( X ).end(), greater <>())

typedef long long int ll;

int main(){
	double N; cin >> N;
    double ans = 0;
    rep(i,1,N){
        ans+=(double)1/(N-i);
    }
    printf("%.10lf\n", ans*N);
    return 0;
}

// #define _GLIBCXX_DEBUG
#include <bits/stdc++.h>
// #include <atcoder/all> // g++ main.cpp -std=c++17 -I .
using namespace std;
// using namespace atcoder;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(v) v.begin(), v.end()
template<class T,class U> inline bool chmin(T&x,U y){if(x>y){x=y;return true;}return false;}
template<class T,class U> inline bool chmax(T&x,U y){if(x<y){x=y;return true;}return false;}
using ll=long long;

const int inf = INT_MAX / 2; const ll INF = 1LL << 60;
// const int MOD = 1000000007;
const int MOD = 998244353;

// cout << fixed << setprecision(15) << ans << endl;
// using mint = modint1000000007;

////////////////////////////////////////////////////////////////////////////////////////////

template <typename T>
struct BIT {

  int n;          // 配列の要素数(数列の要素数+1)
  vector<T> bit;  // データの格納先
  BIT(int n_) : n(n_ + 1), bit(n, 0) {}

  void add(int i, T x) {
    for (int idx = i; idx < n; idx += (idx & -idx)) {
      bit[idx] += x;
    }
  }

  T sum(int i) {
    T s(0);
    for (int idx = i; idx > 0; idx -= (idx & -idx)) {
        s += bit[idx];
    }
    return s;
  }
  
  // [l,r) の区間和を取得
  T query(int l, int r) { return sum(r - 1) - sum(l - 1); }

  int lower_bound(T w) { // a_1 + a_2 + ... + a_x >= w となるような最小の x を求める(ただし a_i >= 0)
    if (w <= 0) {
      return 0;
    } else {
      int x = 0, r = 1;
      while (r < n) r = r << 1;
      for (int len = r; len > 0; len = len >> 1) { // 長さlenは1段下るごとに半分に
        if (x + len < n && bit[x + len] < w) { // 採用するとき
          w -= bit[x + len];
          x += len;
        }
      }
      return x + 1;
    }
  }
};

int main() {
  int n;cin>>n;
  vector<ll> a(n), b(n);
  rep(i, n) {
    cin>>a[i]; a[i]+=i;
  }
  rep(i, n) {
    cin>>b[i]; b[i]+=i;
  }
  map<int, queue<int>> m;
  rep(i, n) {
    m[a[i]].push(i);
  }
  BIT<ll> bit(n);
  ll ans = 0;
  rep(i, n) {
    if(m[b[i]].empty()) {
      cout << -1 << endl;
      return 0;
    }
    int p = m[b[i]].front();
    m[b[i]].pop();
    bit.add(p+1, 1);
    ans += i+1 - bit.sum(p+1);
  }
  cout << ans << endl;

  return 0;
}