There are three arrays a, b and c. Each of them consists of n integers. SmallY wants to find three integers u, v, w (0 ≤ u, v, w ≤ n) such that the following condition holds: each number that appears in the union of a, b and c, appears either in the first u elements of a, or in the first v elements of b, or in the first w elements of c. Of course, SmallY doesn't want to have huge numbers u, v and w, so she wants sum u + v + w to be as small as possible.

Please, help her to find the minimal possible sum of u + v + w.

Input

The first line contains a single integer n (1 ≤ n ≤ 105). The second line contains n space-separated integers a1, a2, ..., an — array a. The third line contains the description of array b in the same format. The fourth line contains the description of array c in the same format. The following constraint holds: 1 ≤ ai, bi, ci ≤ 109.

Output

Print a single integer — the minimum possible sum of u + v + w.

Examples

Input

3
1 1 101
1 2 1
3 2 1


Output

5

Input

5
1 1 2 2 3
2 2 4 3 3
3 3 1 1 1


Output

5

Note

In the first example you should choose u = 3, v = 0, w = 2. 

In the second example you should choose u = 1, v = 3, w = 1.
1
2
3
2
 8
190409007 190409007 352375776 190409007 352375776 352375776 352375776 352375776
190409007 190409007 190409007 190409007 190409007 352375776 352375776 190409007
190409007 352375776 352375776 190409007 190409007 190409007 352375776 352375776
 1
1
1
1
 1
377489979
588153796
588153796
 2
1 1
2 2
3 3
 4
1 1 1 1
1 1 1 1
1 1 1 1
 2
1 2
2 2
1 1
 3
1 1 2
1 1 3
1 1 4

2
 2
 1
 2
 3
 1
 2
 9

#include <bits/stdc++.h>
using namespace std;
int n, ans, a[120000], b[120000], c[120000], mn[120000 * 4], mx[120000 * 4],
    tag[120000 * 4];
vector<int> vec[120000];
map<int, bool> vis;
map<int, pair<int, int> > mp;
void build(int x, int l, int r) {
  tag[x] = -1;
  if (l == r) {
    mx[x] = 0;
    mn[x] = l;
    return;
  }
  int mid = (l + r) >> 1;
  build((x << 1), l, mid);
  build((x << 1 | 1), mid + 1, r);
  mx[x] = max(mx[(x << 1)], mx[(x << 1 | 1)]);
  mn[x] = min(mn[(x << 1)], mn[(x << 1 | 1)]);
}
void psd(int x, int l, int r, int mid) {
  if (tag[x] >= 0) {
    mx[(x << 1)] = mx[(x << 1 | 1)] = tag[(x << 1)] = tag[(x << 1 | 1)] =
        tag[x];
    mn[(x << 1)] = tag[x] + l;
    mn[(x << 1 | 1)] = tag[x] + mid + 1;
    tag[x] = -1;
  }
}
void mdf(int x, int l, int r, int R, int k) {
  if (l > R) return;
  if (r <= R) {
    if (mx[x] <= k) {
      mx[x] = tag[x] = k;
      mn[x] = k + l;
      return;
    }
    if (l == r) return;
    int mid = (l + r) >> 1;
    psd(x, l, r, mid);
    mdf((x << 1 | 1), mid + 1, r, R, k);
    mx[x] = max(mx[(x << 1)], mx[(x << 1 | 1)]);
    mn[x] = min(mn[(x << 1)], mn[(x << 1 | 1)]);
    return;
  }
  int mid = (l + r) >> 1;
  psd(x, l, r, mid);
  mdf((x << 1), l, mid, R, k);
  if (R > mid) mdf((x << 1 | 1), mid + 1, r, R, k);
  mx[x] = max(mx[(x << 1)], mx[(x << 1 | 1)]);
  mn[x] = min(mn[(x << 1)], mn[(x << 1 | 1)]);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
    if (!vis.count(a[i])) {
      vis[a[i]] = 1;
      vec[i].push_back(a[i]);
      mp[a[i]] = make_pair(0x3f3f3f3f, 0x3f3f3f3f);
    }
  }
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &b[i]);
    if (!mp.count(b[i])) mp[b[i]] = make_pair(0x3f3f3f3f, 0x3f3f3f3f);
    mp[b[i]].first = min(mp[b[i]].first, i);
    if (!vis.count(b[i])) {
      vis[b[i]] = 1;
      vec[n + 1].push_back(b[i]);
    }
  }
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &c[i]);
    if (!mp.count(c[i])) mp[c[i]] = make_pair(0x3f3f3f3f, 0x3f3f3f3f);
    mp[c[i]].second = min(mp[c[i]].second, i);
    if (!vis.count(c[i])) {
      vis[c[i]] = 1;
      vec[n + 1].push_back(c[i]);
    }
  }
  build(1, 1, n);
  ans = 0x3f3f3f3f;
  for (int i = 0; i < (int)vec[n + 1].size(); ++i) {
    int t = vec[n + 1][i], x = mp[t].first, y = mp[t].second;
    mdf(1, 1, n, min(x - 1, n), y);
  }
  for (int i = n; i >= 1; --i) {
    ans = min(ans, mn[1] + i);
    for (int j = 0; j < (int)vec[i].size(); ++j) {
      int t = vec[i][j], x = mp[t].first, y = mp[t].second;
      mdf(1, 1, n, min(x - 1, n), y);
    }
  }
  printf("%d\n", ans);
  return 0;
}
