#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define stop exit(0) #define nc -1 #define eps 1e-10 #define inf 1000000000 #define mod 1000000007 #define mp make_pair #define fill(array,value) memset(array,value,sizeof(array)) #define f(i,beg,end) for(int i=beg; i<=end; i++) #define F(i,beg,end) for(int i=beg; i>=end; i--) #define Max(a,b) ( (a>b)?a:b ) #define Min(a,b) ( (a> n; cin.ignore(); f(i,1,n) cin >> a[i]; } bool ok(int currCount[10]) { bool isOk = true; f(i,0,9) if (!currCount[i]) isOk = false; return isOk; } void solve() { int currCount[10]; fill(currCount,0); int fst, snd, maxLen = inf; fst = 1; f(i,0,a[1].size()-1) currCount[a[1][i]-'0']++; for(snd=2; snd<=n+1; snd++) { while (ok(currCount) && fst<=snd-1) { // if (maxLen > snd-fst+1) // { // cout << fst << " :: " << snd << endl; // } maxLen = Min(maxLen, snd-fst); f(i,0,a[fst].size()-1) currCount[ a[fst][i]-'0' ]--; fst++; } if (snd <= n) { f(i,0,a[snd].size()-1) currCount[a[snd][i]-'0']++; } while (ok(currCount) && fst<=snd) { // if (maxLen > snd-fst+1) // { // cout << fst << " :::: " << snd << endl; // } maxLen = Min(maxLen, snd-fst+1); f(i,0,a[fst].size()-1) currCount[ a[fst][i]-'0' ]--; fst++; } } if (maxLen != inf) cout << maxLen << endl; else cout << -1 << endl; } int main() { cin.sync_with_stdio(false); // input("test.txt"); input("numbers.in"); output("numbers.out"); int numberOfTests = 1; // cin >> numberOfTests; f(i,1,numberOfTests) { init(); solve(); } return 0; }