source_code: import java.io.*;
  import java.math.*;
  import java.util.*;
  import java.util.stream.*;
  
  @SuppressWarnings("unchecked")
  public class P701A {
  
    Map<Character, Integer> cc = new HashMap(72);
  
    void add(char c) {
      cc.put(c, cc.getOrDefault(c, 0) + 1);
    }
  
    void rem(char c) {
      Integer cnt = cc.get(c) - 1;
      if (cnt != 0) {
        cc.put(c, cnt);
      } else {
        cc.remove(c);
      }
    }
  
    public void run() throws Exception {
      int n = nextInt();
  
      char [] s = next().toCharArray();
      BitSet bs = new BitSet();
      for (char c : s) {
        bs.set(c);
      }
  
      int t = bs.cardinality();
      
      int m = Integer.MAX_VALUE;
      for (int i = 0, j = 0; i < n; i++) {
        while ((j < n) && (cc.size() < t)) {
          add(s[j]);
          j++;
        }
        
        if (cc.size() == t) {
          m = Math.min(m, j - i);
        }
        
        rem(s[i]);
      }
      
      println(m);
    }
  
    public static void main(String... args) throws Exception {
      br = new BufferedReader(new InputStreamReader(System.in));
      pw = new PrintWriter(new BufferedOutputStream(System.out));
      new P701A().run();
      br.close();
      pw.close();
      System.err.println("\n[Time : " + (System.currentTimeMillis() - startTime) + " ms]");
    }
  
    static long startTime = System.currentTimeMillis();
    static BufferedReader br;
    static PrintWriter pw;
    StringTokenizer stok;
  
    String nextToken() throws IOException {
      while (stok == null || !stok.hasMoreTokens()) {
        String s = br.readLine();
        if (s == null) { return null; }
        stok = new StringTokenizer(s);
      }
      return stok.nextToken();
    }
  
    void print(byte b) { print("" + b); }
    void print(int i) { print("" + i); }
    void print(long l) { print("" + l); }
    void print(double d) { print("" + d); }
    void print(char c) { print("" + c); }
    void print(Object o) {
      if (o instanceof int[]) { print(Arrays.toString((int [])o));
      } else if (o instanceof long[]) { print(Arrays.toString((long [])o));
      } else if (o instanceof char[]) { print(Arrays.toString((char [])o));
      } else if (o instanceof byte[]) { print(Arrays.toString((byte [])o));
      } else if (o instanceof short[]) { print(Arrays.toString((short [])o));
      } else if (o instanceof boolean[]) { print(Arrays.toString((boolean [])o));
      } else if (o instanceof float[]) { print(Arrays.toString((float [])o));
      } else if (o instanceof double[]) { print(Arrays.toString((double [])o));
      } else if (o instanceof Object[]) { print(Arrays.toString((Object [])o));
      } else { print("" + o); }
    }
    void print(String s) { pw.print(s); }
    void println() { println(""); }
    void println(byte b) { println("" + b); }
    void println(int i) { println("" + i); }
    void println(long l) { println("" + l); }
    void println(double d) { println("" + d); }
    void println(char c) { println("" + c); }
    void println(Object o) { print(o); println(); }
    void println(String s) { pw.println(s); }
    int nextInt() throws IOException { return Integer.parseInt(nextToken()); }
    long nextLong() throws IOException { return Long.parseLong(nextToken()); }
    double nextDouble() throws IOException { return Double.parseDouble(nextToken()); }
    char nextChar() throws IOException { return (char) (br.read()); }
    String next() throws IOException { return nextToken(); }
    String nextLine() throws IOException { return br.readLine(); }
    int [] readInt(int size) throws IOException {
      int [] array = new int [size];
      for (int i = 0; i < size; i++) { array[i] = nextInt(); }
      return array;
    }
    long [] readLong(int size) throws IOException {
      long [] array = new long [size];
      for (int i = 0; i < size; i++) { array[i] = nextLong(); }
      return array;
    }
    double [] readDouble(int size) throws IOException {
      double [] array = new double [size];
      for (int i = 0; i < size; i++) { array[i] = nextDouble(); }
      return array;
    }
    String [] readLines(int size) throws IOException {
      String [] array = new String [size];
      for (int i = 0; i < size; i++) { array[i] = nextLine(); }
      return array;
    }
  
    int gcd(int a, int b) {
      return ((b > 0) ? gcd(b, a % b) : a);
    }
  }