#include <iostream>
#include <vector>
using namespace std;

int main(int argc, char* argv[]) {
  vector<int> doc = {
    2, 5, 1, 3, 5, 2, 2, 5, 3, 2, 2, 1,
  };

  vector<vector<int>> occ = {
    {2, 11},
    {0, 5, 6, 9, 10},
    {3, 8},
  };

  for (int i = 0; i < doc.size(); ++ i) {
    doc[i] = -1;
  }

  for (int i = 0; i < occ.size(); ++ i) {
    for (int j = 0; j < occ[i].size(); ++ j) {
      doc[occ[i][j]] = i;
    }
  }

  int lbound = doc.size();
  int rbound = 0;

  for (int i = 0; i < occ.size(); ++ i) {
    if (lbound > occ[i][0]) {
      lbound = occ[i][0];
    }

    if (rbound < occ[i][0]) {
      rbound = occ[i][0];
    }
  }

  int minWindowSize = doc.size();
  vector<int> index(occ.size(), 0);
  for (; lbound < occ.size(); ++ lbound) {
    if (minWindowSize > rbound - lbound + 1) {
      minWindowSize = rbound - lbound + 1;
    }

    int word = doc[lbound];

    if (word == -1) {
      continue;
    }

    index[word] ++;
    if (occ[word].size() == index[word]) {
      break;
    }

    if (rbound < occ[word][index[word]]) {
      rbound = occ[word][index[word]];
    }
  }

  cout << minWindowSize << endl;
  return 0;
}

