#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
#define print(a) for(auto x : a) cout << x << " "; cout << endl
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
inline int power(int a, int b) {
int x = 1;
a %= M;
while (b) {
if (b & 1) x = (x * a) % M;
a = (a * a) % M;
b >>= 1;
}
return x;
}
//_ ***************************** START Below *******************************
string a;
int consistency1(int n){
int ans = n;
unordered_set<int> st;
for(int i=0; i<n; i++){
st.insert(a[i]);
}
int k = st.size();
unordered_map<int,int> mp;
int s = 0, e = 0;
while(e<n){
mp[a[e]]++;
if(mp.size() < k){
e++;
}
else{
while(s<=e && mp.size() >= k){
ans = min(ans, e-s+1);
mp[a[s]]--;
if(mp[a[s]] == 0) mp.erase(a[s]);
s++;
}
e++;
}
}
return ans;
}
int consistency2(int n){
int ans = n;
unordered_set<int> st;
for(int i=0; i<n; i++){
st.insert(a[i]);
}
int k = st.size();
unordered_map<int,int> mp;
int s = 0, e = 0;
while(e<n){
mp[a[e]]++;
while(s<=e && mp.size() >= k){
ans = min(ans, e-s+1);
mp[a[s]]--;
if(mp[a[s]] == 0) mp.erase(a[s]);
s++;
}
e++;
}
return ans;
}
int practice(int n){
return 0;
}
void solve() {
int n;
cin>> n;
cin >> a;
cout << consistency2(n) << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQojZGVmaW5lIHByaW50KGEpICAgICAgICAgZm9yKGF1dG8geCA6IGEpIGNvdXQgPDwgeCA8PCAiICI7IGNvdXQgPDwgZW5kbAoKCmNvbnN0IGludCBNID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE4gPSAzZTUrOTsKY29uc3QgaW50IElORiA9IDJlOSsxOwpjb25zdCBpbnQgTElORiA9IDIwMDAwMDAwMDAwMDAwMDAwMDE7CgppbmxpbmUgaW50IHBvd2VyKGludCBhLCBpbnQgYikgewogICAgaW50IHggPSAxOwogICAgYSAlPSBNOwogICAgd2hpbGUgKGIpIHsKICAgICAgICBpZiAoYiAmIDEpIHggPSAoeCAqIGEpICUgTTsgCiAgICAgICAgYSA9IChhICogYSkgJSBNOwogICAgICAgIGIgPj49IDE7CiAgICB9CiAgICByZXR1cm4geDsKfQoKCi8vXyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBTVEFSVCBCZWxvdyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgoKCgpzdHJpbmcgYTsKCmludCBjb25zaXN0ZW5jeTEoaW50IG4pewogICAgaW50IGFucyA9IG47CgogICAgdW5vcmRlcmVkX3NldDxpbnQ+IHN0OwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgICBzdC5pbnNlcnQoYVtpXSk7CiAgICB9CiAgICBpbnQgayA9IHN0LnNpemUoKTsKCiAgICB1bm9yZGVyZWRfbWFwPGludCxpbnQ+IG1wOwoKICAgIGludCBzID0gMCwgZSA9IDA7CiAgICB3aGlsZShlPG4pewogICAgICAgIG1wW2FbZV1dKys7CiAgICAgICAgaWYobXAuc2l6ZSgpIDwgayl7CiAgICAgICAgICAgIGUrKzsKICAgICAgICB9CiAgICAgICAgZWxzZXsKCiAgICAgICAgICAgIHdoaWxlKHM8PWUgJiYgbXAuc2l6ZSgpID49IGspewogICAgICAgICAgICAgICAgYW5zID0gbWluKGFucywgZS1zKzEpOwogICAgICAgICAgICAgICAgbXBbYVtzXV0tLTsKICAgICAgICAgICAgICAgIGlmKG1wW2Fbc11dID09IDApIG1wLmVyYXNlKGFbc10pOwogICAgICAgICAgICAgICAgcysrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGUrKzsKICAgICAgICB9CiAgICB9CiAgICAKCiAgICByZXR1cm4gYW5zOyAgICAKfQoKCmludCBjb25zaXN0ZW5jeTIoaW50IG4pewogICAgaW50IGFucyA9IG47CgogICAgdW5vcmRlcmVkX3NldDxpbnQ+IHN0OwogICAgZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKICAgICAgICBzdC5pbnNlcnQoYVtpXSk7CiAgICB9CiAgICBpbnQgayA9IHN0LnNpemUoKTsKCiAgICB1bm9yZGVyZWRfbWFwPGludCxpbnQ+IG1wOwoKICAgIGludCBzID0gMCwgZSA9IDA7CiAgICB3aGlsZShlPG4pewogICAgICAgIG1wW2FbZV1dKys7CiAgICAgICAgd2hpbGUoczw9ZSAmJiBtcC5zaXplKCkgPj0gayl7CiAgICAgICAgICAgIGFucyA9IG1pbihhbnMsIGUtcysxKTsKICAgICAgICAgICAgbXBbYVtzXV0tLTsKICAgICAgICAgICAgaWYobXBbYVtzXV0gPT0gMCkgbXAuZXJhc2UoYVtzXSk7CiAgICAgICAgICAgIHMrKzsKICAgICAgICB9CiAgICAgICAgZSsrOwogICAgfQogICAgCgogICAgcmV0dXJuIGFuczsgICAgCn0KCgoKCgoKCgoKCgoKaW50IHByYWN0aWNlKGludCBuKXsKCgogICAgcmV0dXJuIDA7Cn0KCgoKCgp2b2lkIHNvbHZlKCkgewogICAgCgogICAgaW50IG47CiAgICBjaW4+PiBuOwoKICAgIGNpbiA+PiBhOwogICAgCiAgICAKICAgIGNvdXQgPDwgY29uc2lzdGVuY3kyKG4pIDw8IGVuZGw7CgoKfQoKCgoKCmludDMyX3QgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIHNvbHZlKCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=