15
MIRZOYANOVECLOX
 23
AABBBAAACCCCCAAADDDDDDD
 2
QA
 11
GGRRAATTZZZ
 6
AZAZAZ
 10
SQSQSQSQTG
 3
KEK
 100
URXCAIZFIBNJTPCZHBQIBCILLPXZCFGMKKZMNPLCYGAVJVIBMCZEBSJWPSCPQDYCTTKPOKIJRSKIZPDGCHVOUTMPNECYORSFZFNC
 3
LOL
 2
WW
 8
PUTINVOR
 26
QWERTYUIOPASDFGHJKLZXCVBNM
 5
AZAZA
 9
EGORLETOV
 7
KADUROV
 9
MIKEPIDOR
 9
AAAAAAAAA
 100
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 5
FUFEL
 50
NYQAHBYYOXLTRYQDMVENEMAQNBAKGLGQOLXNAIFNQTOCLNNQIA

MI
 DD
 QA
 ZZ
 AZ
 SQ
 KE
 IB
 LO
 WW
 PU
 QW
 AZ
 EG
 KA
 MI
 AA
 AA
 FU
 YQ

// Generated by Code Flattener.
// https://plugins.jetbrains.com/plugin/9979-idea-code-flattener

import java.io.*;
import java.util.*;

public class TT {
    static Uzi uzi;

    public static void main(String[] args) throws IOException {
        FastReader fk = new FastReader();
        PrintWriter pr = new PrintWriter(System.out);

        int n = fk.nextInt();
        String s = fk.next();
        HashSet<String> map = new HashSet<>();

        for(int i =0; i<n-1;i++)
            map.add(s.substring(i, i + 2));
        int ac = 0;
        String tc = "";

        for(String ss : map){
            int counter = 0;
            for(int i =0; i<n-1; i++){
                if(map.contains(s.substring(i,i+2)))
                    counter++;
            }
            if(counter > ac){
                ac = counter;
                tc = ss;
            }
        }

        pr.println(tc);

        pr.close();

    }


    private static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(
                    new InputStreamReader(System.in));
        }

        String next() {
            while (st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        long nextLong() {
            return Long.parseLong(next());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }

    private static class Uzi {
        boolean[] primes;
        int N;
        long[] fact;

        public Uzi(){}

        public Uzi(int n) {
            this.N = n;
            this.primes = new boolean[N + 1];
            this.fact = new long[N+1];
        }

        public void fact(){
            fact[0] = 1;

            for(int i =1; i<= N; i++){
                fact[i] = i*fact[i-1];
            }
        }

        public long gcd(long a, long b) {
            if (b == 0)
                return a;
            return gcd(b, a % b);
        }

        public void seive() {
            Arrays.fill(primes, true);
            primes[0] = primes[1] = false;

            for (int i = 2; i * i <= N; i++) {
                if (primes[i]) {
                    for (int j = i * i; j <= N; j += i)
                        primes[j] = false;
                }
            }
        }

        public int countDivisors(long num) {
            int counter = 0;

            for (int i = 1; i < Math.sqrt(num); i++) {
                if (num % i == 0)
                    counter += (i * i == num) ? 1 : 2;
            }
            return counter;
        }

        public boolean binary_search(int[] arr, int key) {
            int s = 0, e = arr.length - 1, curr;

            while (s <= e) {
                curr = (s + e) / 2;
                if (arr[curr] == key)
                    return true;
                else {
                    if (arr[curr] > key)
                        e = curr - 1;
                    else
                        s = curr + 1;
                }
            }

            return false;
        }

        private int elementJustGreater(int[] arr, int k) {
            int s = 0, e = arr.length - 1, curr;
            int ans = -1;

            while (s <= e) {
                curr = (s + e) / 2;
                if (arr[curr] >= k) {
                    ans = arr[curr];
                    e = curr - 1;
                } else
                    s = curr + 1;
            }

            return ans;
        }

        public int elementJustSmaller(long[] arr, long k) {
            int s = 0, e = arr.length - 1, curr;
            int ans = -1;

            while (s <= e) {
                curr = (s + e) / 2;
                if (arr[curr] <= k) {
                    ans = curr;
                    s = curr + 1;
                } else
                    e = curr - 1;
            }
            return ans;
        }

        private void fxn(int[] arr, int n) {
            Stack<Integer> stack = new Stack<>();
            int[] output = new int[n];
            int index, curr;

            for (int i = 0; i < n; i++) {
                curr = arr[i];
                while (!stack.isEmpty() && arr[stack.peek()] <= curr) {
                    index = stack.pop();
                    output[index] = curr;
                }

                stack.push(i);
            }

            while (!stack.isEmpty()) {
                index = stack.pop();
                output[index] = -1;
            }

            System.out.println(Arrays.toString(output));
        }
    }
}