#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkgewogIHZlY3RvcjxpbnQ+IGRvYyA9IHsKICAgIDIsIDUsIDEsIDMsIDUsIDIsIDIsIDUsIDMsIDIsIDIsIDEsCiAgfTsKCiAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBvY2MgPSB7CiAgICB7MiwgMTF9LAogICAgezAsIDUsIDYsIDksIDEwfSwKICAgIHszLCA4fSwKICB9OwoKICBmb3IgKGludCBpID0gMDsgaSA8IGRvYy5zaXplKCk7ICsrIGkpIHsKICAgIGRvY1tpXSA9IC0xOwogIH0KCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBvY2Muc2l6ZSgpOyArKyBpKSB7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IG9jY1tpXS5zaXplKCk7ICsrIGopIHsKICAgICAgZG9jW29jY1tpXVtqXV0gPSBpOwogICAgfQogIH0KCiAgaW50IGxib3VuZCA9IGRvYy5zaXplKCk7CiAgaW50IHJib3VuZCA9IDA7CgogIGZvciAoaW50IGkgPSAwOyBpIDwgb2NjLnNpemUoKTsgKysgaSkgewogICAgaWYgKGxib3VuZCA+IG9jY1tpXVswXSkgewogICAgICBsYm91bmQgPSBvY2NbaV1bMF07CiAgICB9CgogICAgaWYgKHJib3VuZCA8IG9jY1tpXVswXSkgewogICAgICByYm91bmQgPSBvY2NbaV1bMF07CiAgICB9CiAgfQoKICBpbnQgbWluV2luZG93U2l6ZSA9IGRvYy5zaXplKCk7CiAgdmVjdG9yPGludD4gaW5kZXgob2NjLnNpemUoKSwgMCk7CiAgZm9yICg7IGxib3VuZCA8IG9jYy5zaXplKCk7ICsrIGxib3VuZCkgewogICAgaWYgKG1pbldpbmRvd1NpemUgPiByYm91bmQgLSBsYm91bmQgKyAxKSB7CiAgICAgIG1pbldpbmRvd1NpemUgPSByYm91bmQgLSBsYm91bmQgKyAxOwogICAgfQoKICAgIGludCB3b3JkID0gZG9jW2xib3VuZF07CgogICAgaWYgKHdvcmQgPT0gLTEpIHsKICAgICAgY29udGludWU7CiAgICB9CgogICAgaW5kZXhbd29yZF0gKys7CiAgICBpZiAob2NjW3dvcmRdLnNpemUoKSA9PSBpbmRleFt3b3JkXSkgewogICAgICBicmVhazsKICAgIH0KCiAgICBpZiAocmJvdW5kIDwgb2NjW3dvcmRdW2luZGV4W3dvcmRdXSkgewogICAgICByYm91bmQgPSBvY2Nbd29yZF1baW5kZXhbd29yZF1dOwogICAgfQogIH0KCiAgY291dCA8PCBtaW5XaW5kb3dTaXplIDw8IGVuZGw7CiAgcmV0dXJuIDA7Cn0KCg==