#include #include #include using namespace std; int nums[100001]; int n; int current[10]; int broken_down[10]; void BreakDown(int k) { int i; memset(broken_down,0,sizeof(broken_down)); if (k==0) { broken_down[0]++; } while(k>0) { broken_down[k%10]++; k/=10; } return; } void Add() { int i; for (i=0;i<=9;i++) { current[i]+=broken_down[i]; } return; } bool Fine() { int i; for (i=0;i<=9;i++) { if (current[i]==0) return false; } return true; } bool OK_To_Remove() { int i; for (i=0;i<=9;i++) { if (current[i]<=broken_down[i]) return false; } return true; } void Remove() { int i; for (i=0;i<=9;i++) { current[i]-=broken_down[i]; } return; } int main() { freopen("numbers.in","r",stdin); freopen("numbers.out","w",stdout); int i; int l; int min_len=999999; scanf("%d",&n); for (i=1;i<=n;i++) { scanf("%d",&nums[i]); } BreakDown(nums[1]); Add(); l=1; if (Fine()) { printf("1\n"); return 0; } for (i=2;i<=n;i++) { BreakDown(nums[i]); Add(); BreakDown(nums[l]); while(OK_To_Remove()) { Remove(); l++; BreakDown(nums[l]); } if (Fine()) { if (min_len>i-l+1) { min_len=i-l+1; } } } if (min_len!=999999) printf("%d\n",min_len); else printf("-1\n"); return 0; }