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;
map<int, bool> m;
map<int, pair<int, int> > lst;
int n;
int a[3][100005];
set<int> s[3];
stack<int> sta[3];
pair<int, int> ind[3];
int main() {
  scanf("%d", &n);
  s[0].insert(0);
  s[1].insert(0);
  s[2].insert(0);
  for (int i = 0; i < 3; ++i) ind[i] = make_pair(0, i);
  for (int j = 0; j < 3; ++j)
    for (int i = 1; i <= n; ++i) scanf("%d", &a[j][i]);
  for (int i = 1; i <= n; ++i) {
    for (int k = 0; k < 3; ++k) {
      int j = ind[k].second;
      if (m[a[j][i]])
        sta[j].push(i);
      else {
        m[a[j][i]] = 1;
        lst[a[j][i]] = make_pair(i, j);
        s[j].insert(i);
        while (!sta[j].empty()) {
          if (lst[a[j][sta[j].top()]].second != j) {
            s[lst[a[j][sta[j].top()]].second].erase(
                lst[a[j][sta[j].top()]].first);
            s[j].insert(lst[a[j][sta[j].top()]].first);
            lst[a[j][sta[j].top()]] = make_pair(sta[j].top(), j);
          }
          sta[j].pop();
        }
      }
    }
    for (int j = 0; j < 3; ++j) ind[j] = make_pair(-*--s[j].end(), j);
    sort(ind, ind + 3);
  }
  int tot = 0;
  for (int j = 0; j < 3; ++j) tot += *--s[j].end();
  cout << tot << endl;
}
