LeetCode 分类练习(4)—— set 和 map 在解题中的应用

349. Intersection of Two Arrays

Given two arrays, write a function to compute their intersection.

Example:
Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2].

Note:
Each element in the result must be unique.
The result can be in any order.

给出两个数组,写一个功能来计算他们的交集

注意:在结果中每一个元素都是独一无二的,结果中的元素可以是任意顺序

package com.leetcode.array;

// 349. Intersection of Two Arrays

import java.util.*;

public class Intersection_of_Two_Arrays {
    public int[] intersection(int[] nums1, int[] nums2) {
        if (nums1.length == 0 || nums2.length == 0)
            return new int[0];

        Set<Integer> set_1 = new HashSet<>();
        for (int num : nums1)
            set_1.add(num);

        Set<Integer> set_2 = new HashSet<>();
        for (int num : nums2)
            if (set_1.contains(num))
                set_2.add(num);

        int[] result = new int[set_2.size()];
        int i = 0;
        for (Integer num : set_2)
            result[i++] = num;

        return result;
    }

    public static void main(String[] args) {
        int[] nums1 = {1, 2, 2, 1};
        int[] nums2 = {2, 2};

        int[] result = (new Intersection_of_Two_Arrays()).intersection(nums1, nums2);

        for (Integer num : result) {
            System.out.print(num + " ");
        }
    }

}

350. Intersection of Two Arrays II

Given two arrays, write a function to compute their intersection.

Example:
Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2, 2].

Note:
Each element in the result should appear as many times as it shows in both arrays.
The result can be in any order.
Follow up:
What if the given array is already sorted? How would you optimize your algorithm?
What if nums1's size is small compared to nums2's size? Which algorithm is better?
What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?

给出两个数组,计算他们的交集。

注意:每个元素的出现次数应该和他们在数组中出现次数相同。结果可以是任意顺序的。

package com.leetcode.array;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Intersection_of_Two_Arrays_II {
    public int[] intersect(int[] nums1, int[] nums2) {
        if (nums1.length == 0 || nums2.length == 0)
            return new int[0];
        Map<Integer, Integer> map_1 = new HashMap<>();
        for (int num : nums1)
            map_1.put(num, map_1.getOrDefault(num, 0) + 1);

        List<Integer> list = new ArrayList<>();
        for (int num : nums2) {
            if (map_1.containsKey(num)){
                if (map_1.get(num) <= 0)
                    continue;
                list.add(num);
                map_1.put(num, map_1.get(num)-1);
            }
        }

        int[] result = new int[list.size()];
        int i = 0;
        for (Integer num:list)
            result[i++] = num;
        return result;
    }
//    public int[] intersect(int[] nums1, int[] nums2) {
//        if (nums1.length == 0 || nums2.length == 0)
//            return new int[0];
//
//        Map<Integer, Integer> map_1 = new HashMap<>();
//        for (int num : nums1)
//            map_1.put(num, map_1.getOrDefault(num, 0) + 1);
//
//        Map<Integer, Integer> map_2 = new HashMap<>();
//        for (int num : nums2)
//            map_2.put(num, map_2.getOrDefault(num, 0) + 1);
//
//        Map<Integer, Integer> map_3 = new HashMap<>();
//        for (Integer num : map_1.keySet())
//            if (map_2.containsKey(num))
//                map_3.put(num, Math.min(map_1.get(num), map_2.get(num)));
//        int size = 0;
//        for (Integer count : map_3.values())
//            size += count;
//
//        int[] result = new int[size];
//        int i = 0;
//        for (Integer num : map_3.keySet()) {
//            int count = map_3.get(num);
//            while (count != 0) {
//                result[i++] = num;
//                count--;
//            }
//        }
//
//        return result;
//
//    }

    public static void main(String[] args) {
        int[] nums1 = {1, 2, 2, 1, 3, 3, 4, 3, 2, 4, 2, 5, 3, 2, 1, 3, 2, 1, 2, 0};
        int[] nums2 = {2, 2, 3, 1, 32, 21, 1, 1, 1, 1, 3, 12};
        int[] result = (new Intersection_of_Two_Arrays_II()).intersect(nums1, nums2);
        for (int num : result)
            System.out.print(num + " ");
    }
}

242. Valid Anagram

Given two strings s and t, write a function to determine if t is an anagram of s.

For example,
s = "anagram", t = "nagaram", return true.
s = "rat", t = "car", return false.

Note:
You may assume the string contains only lowercase alphabets.

Follow up:
What if the inputs contain unicode characters? How would you adapt your solution to such case?

给出两个字符串s 和t,判断 t 是否是s 的一个字谜。(字谜指t与s中的字母出现次数相同,但出现顺序可能不同)

注意:你应该假定字符串只包含小写字母

package com.leetcode.String;

import java.util.HashMap;
import java.util.Map;

public class Valid_Anagram {
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length())
            return false;
        if (s.length() == 0 && t.length() == 0)
            return true;

        Map<Character, Integer> map_1 = new HashMap<>();
        for (int i = 0; i < s.length(); i++)
            map_1.put(s.charAt(i), map_1.getOrDefault(s.charAt(i), 0) + 1);

        for (int i = 0; i < t.length(); i++)
            if (map_1.containsKey(t.charAt(i)))
                map_1.put(t.charAt(i), map_1.get(t.charAt(i)) - 1);
            else
                return false;

        for (Integer count : map_1.values())
            if (count != 0)
                return false;

        return true;
    }

    public static void main(String[] args) {
//        String s = "anagram";
//        String t =  "nagaram";
//        String s = "rat";
//        String t =  "car";

        String s = "";
        String t = "";
        boolean result = (new Valid_Anagram()).isAnagram(s, t);
        System.out.print(result + " ");
    }
}

202. Happy Number

Write an algorithm to determine if a number is "happy".

A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.

Example: 19 is a happy number

12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

思路:当某个结果出现不止一次时,将陷入无限的循环

package com.leetcode.number;

import java.util.HashSet;
import java.util.Set;

public class Happy_Number {
    public boolean isHappy(int n) {
        Set<Integer> set = new HashSet<>();
        int result = countSquare(n);
        while (true) {
            if (result == 1)
                return true;

            if (set.contains(result))   // 重复出现时则无限循环
                return false;
            else
                set.add(result);

            result = countSquare(result);
        }
    }

    public int countSquare(int n) {
        int result = 0;
        while (n != 0) {
            int temp = n % 10;
            n /= 10;
            result += temp*temp;
        }
        return result;
    }


//    public boolean isHappy(int n) {
//        String s = String.valueOf(n);
//        Set<Integer> set = new HashSet<>();
//        int result = countSquare(s);
//        while (true){
//            if (result == 1)
//                return true;
//
//            if (set.contains(result))
//                return false;
//            else
//                set.add(result);
//
//            s = String.valueOf(result);
//            result = countSquare(s);
//        }
//    }
//
//    public int countSquare(String s) {
//        int result = 0;
//        for (int i = 0; i < s.length(); i++){
//            result += Math.pow((int)s.charAt(i)-48, 2);
//        }
//        return result;
//    }


    public static void main(String[] args) {
        int n = 19;
        System.out.print((new Happy_Number()).isHappy(n));
    }
}

290. Word Pattern

Given a pattern and a string str, find if str follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str.

Examples:
pattern = "abba", str = "dog cat cat dog" should return true.
pattern = "abba", str = "dog cat cat fish" should return false.
pattern = "aaaa", str = "dog cat cat dog" should return false.
pattern = "abba", str = "dog dog dog dog" should return false.
Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

思路,将pattern 中的 char 和 str 中的单词分别作为 key 和 value 放入 map 中,若相同的 key 对应不同的 value 或是相同的 value 对应不同的 kay ,则返回 false

package com.leetcode.String;

import java.util.HashMap;
import java.util.Map;

public class Word_Pattern {
    public boolean wordPattern(String pattern, String str) {
        String[] str_arr = str.split(" ");

        if (pattern.length() != str_arr.length)
            return false;

        Map<Character, String> map = new HashMap<>();

        for (int i = 0; i < pattern.length(); i++) {
            if (map.containsKey(pattern.charAt(i))) // 在 map 中包含 pattern 的字符
                if (!map.get(pattern.charAt(i)).equals(str_arr[i])) // 但 pattern 中同一个字符
                                                                    // 以前 和 现在对应的 value 不同
                    return false;
            if (!map.containsKey(pattern.charAt(i)))    // 在 map 中不包含 pattern 的字符
                if (map.containsValue(str_arr[i]))  // 但 pattern 中不同的字符
                                                    // 却对应了相同的 value
                    return false;
            map.put(pattern.charAt(i), str_arr[i]);
        }

        return true;
    }


    public static void main(String[] args) {
        String str = "dog dog dog dog";
        String pattern = "abba";
        System.out.print((new Word_Pattern()).wordPattern(pattern, str));
    }

}

205. Isomorphic Strings

Given two strings s and t, determine if they are isomorphic.

Two strings are isomorphic if the characters in s can be replaced to get t.

All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.

For example,
Given "egg", "add", return true.

Given "foo", "bar", return false.

Given "paper", "title", return true.

Note:
You may assume both s and t have the same length.

与上一题思路相似

package com.leetcode.String;

import java.util.HashMap;
import java.util.Map;


// 205. Isomorphic Strings


public class Isomorphic_Strings {
    public boolean isIsomorphic(String s, String t) {
        if (s.length() != t.length())
            return false;

        Map<Character, Character> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++){
            if (!map.containsKey(s.charAt(i))){
                if (map.containsValue(t.charAt(i))) // 两个字符映射到了同一个字符
                    return false;
                map.put(s.charAt(i), t.charAt(i));
            }else {
                if (!map.get(s.charAt(i)).equals(t.charAt(i)))  // 同一个字符映射到了不同字符
                    return false;
            }
        }
        return true;
    }

    public static void main(String[] args){
//        String s = "egg";
//        String t = "add";

//        String s = "paper";
//        String t = "title";

        String s = "foo";
        String t = "bar";

        System.out.print((new Isomorphic_Strings()).isIsomorphic(s, t));
    }
}

451. Sort Characters By Frequency

Given a string, sort it in decreasing order based on the frequency of characters.

Input:
"tree"

Output:
"eert"

Explanation:
'e' appears twice while 'r' and 't' both appear once.
So 'e' must appear before both 'r' and 't'. Therefore "eetr" is also a valid answer.

思路,使用 map 统计字符的出现次数,使用 桶排序的思想进行排序

package com.leetcode.String;

// 451. Sort Characters By Frequency

import java.util.*;

public class Sort_Characters_By_Frequency {
    public String frequencySort(String s) {
        // 统计 s 中的字符出现的次数
        char[] ch_arr = s.toCharArray();
        Map<Character, Integer> map = new HashMap<>();
        for (char ch : ch_arr) {
            map.put(ch, map.getOrDefault(ch, 0) + 1);
        }

        // 桶排序 bucket
        List<Character>[] bucket = new List[s.length() + 1];
        for (Character ch : map.keySet()) {
            int count = map.get(ch);
            if (bucket[count] == null) {
                bucket[count] = new ArrayList<>();
            }
            bucket[count].add(ch);
        }

        // 构造返回结果的字符串
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = bucket.length - 1; i >= 0; i--) {
            if (bucket[i] != null) {
                int count;
                int list_size = bucket[i].size();
                while (list_size != 0) {
                    count = i;
                    while (count != 0) {
                        stringBuilder.append(bucket[i].get(list_size - 1));
                        count--;
                    }
                    list_size--;
                }
            }
        }
        return stringBuilder.toString();
    }

    // TLE
//    public String frequencySort(String s) {
//        if (s.length() == 0)
//            return "";
//
//        char[] ch_arr = s.toCharArray();
//
//        // 统计 s 中的字符出现的次数
//        Map<Character, Integer> map = new HashMap<>();
//        for (char ch : ch_arr) {
//            map.put(ch, map.getOrDefault(ch, 0) + 1);
//        }
//
//        Map<Character, Integer> result = sortByValue(map);  // 根据 value 对 map 进行排序
//
//        // 构造结果字符串
//        String result_str = "";
//        for (Map.Entry entry : result.entrySet()) {
//            int count = (int) entry.getValue();
//            while (count != 0) {
//                result_str += String.valueOf(entry.getKey());
//                count--;
//            }
//        }
//        return result_str;
//    }
//
//    public static <K, V extends Comparable<? super V>> Map<K, V>
//    sortByValue(Map<K, V> map) {
//        List<Map.Entry<K, V>> list = new LinkedList<Map.Entry<K, V>>(map.entrySet());
//        Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
//            public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
//                return (o2.getValue()).compareTo(o1.getValue());
//            }
//        });
//
//        Map<K, V> result = new LinkedHashMap<K, V>();
//        for (Map.Entry<K, V> entry : list) {
//            result.put(entry.getKey(), entry.getValue());
//        }
//        return result;
//    }

    public static void main(String[] args) {
        String s = "Aabb";
//        String s = "BabBbBbBbbABBABBbAabbbABBaBbBabaabBbbBAAaaAbbAABaAbBBaAaaaaBABbaBbAAbBBbbABBaaBBbabAbBBAAbAbaaaBrBBaAaabAbbBbABabABaBabBBBBBaAbAaABaaaAAaAgAaAaBAbaBaBaBbbbBbABBBBaaaBbbbAbbbBaBBaAbBBbbaaaaaBbbaaAAbAABBABBaAAABBbbBbBbbBbaABBAAbBAbabbbabwBbbBArABaBBbabBaBabABABaabBBABBAabBAAaabbbbBAababAaBaaAaBbBbBAAbaBabBbabaBaaBbaabABAbbBbaBAbabABbbaAaBbAAAbBbaabBBAbbbABbaabAAAaaaBaBaaaBBABbBAbAAbaABaabbbbBBAabbbBABBbaABBAAAabaAbaBAbbaBaBbAbaAAbBaBAbAabBBbBsBabbbAaBbabAAaABAaBAAAbbaBaAbABABBBAbABABbbbBaaBaBAbABAbaaAbBbAABBbAbbAaBbabaBbABAAbAABbbAabAaAaBbBBbAAbBbaaaBAbABBbBBaCabBBabBAaBbBaAbbBAbbBaBAabBAababAaAbaAaabBBBABabaabBAAAabBAAAbBAbAaaaAbAaBaAbbAaABABBbBBAABAabaAAbBaBbAAaabbABBBABaBAabAbAAbBbAabAbaBbAbBAABAABAAAbBaaaaBabbaBABBaABbAabBaBAbAbbABAbaAAbaAAaBaabaBbBBbBABAABBABBaabBBbBBABAAaAAbbBbABBBbAabAbABbAAAbbAbABbbAbBAbabbbBBBBbAAabaabBABABaaAbaBBBBbbABbBbBABBaAbAaBBABBBabAABBBBBbBBabBaaBbaaBaBbaBbbAABbbAaaBBBbabaabBABABBBGabbBAbaBabAaAAabbbBaabBBbABBabBabbBbAbbAaBbAaAabBabBBbaBLaAbbAaaBaabAAabbABAAAAAbaAbaAabaAaAbaAbBbBAABbbbaBABbBBAbaaBBbaaAbbaAaaJAaAbAbbXBABAABABbbbBaAABaAAaaaabbbbBaABbaAbaAAbAaaBAaaAbbBaaBAabAbbAbBAbBaaaaaabBBaaabAaaAAaAaabBAaAaaAABbbaAAababBBBAABbAAbBBbAAaBAaABabaAAbABBbAAbBBbbBBBBAAaAbbBBAbaHbAaAbrBBAaBBbbabAbBaaaABAAAaABaBBbBbBBabBBBbBBBAbAaAaaBbAbABaabBbBBAAaaAAabAaaabbHAabABAbaBBBbBAaAabbbarbaBbbaAbaBAaBBAbbBaBbBABBAAbAbaABbABbBBAABaBBbBAAAbaaBAabBaBBaABAzBAbAAABBAAaabAaAaBAbABaABaBAbbAaBbbAbbbbbBaAABaaBbabbbBABbbAAAbBbBBBaBBbAaAbAaABaaAbbaaAabaABBaAabbbABBbAabBAabaabABBBBABbBBaabbAaababBAbabbBaaAAabBBBBbBBBbBAAAABaaBBBAAbAaAAAABaabbaaAAbAaABaaaBbaAAaABBAAbbBAaBBAAaBBBaaaAaBAaBAABbBBBAABAbBAababBAbABABbbbaBbABaaaBbbaaAABBBAbAbAAAabbBBAbBaBBaAAbBABaABVbAABbbAbBaBbbBBAAabbBbAabBbaabbbbaBaaBBBabbaBbaaABaAABaAaaBbbBAaABAbaBAAbBabBABAaAAabbaaaBaabbbbaAABaAbBabBAbBAaaABaaABBAaAbBbBBaAABBAaBBAbABAbAbBAAbBbBAAaABbAaaABaabAabAAbabAAaAaBAbBaBBBBBbaJaabBAaaaBBbPbaBAbabAaAABaAaBaaAABBAbbbAbbaBAbbaaAbaBaaAaabAbabAbAbbAAbbBbBBbbbaaaaaaabAbbBBaBbBaBAAAAbBAaAaaBBaBaBAbBBAaBAaABbbAAbAabBbABBBaaaBBabbAAbABBbBAbbbabBAaBAAAbAbABAaaAABbbAAABBbAabaBBBAaAaBBaBBaAAaaBaAbABbBbabbabaBBabbBBAbbaABBaBaaBbaabaAabBaBbAAAabbAABBAbaAaaBbAAabBAbAbbbBAbaBAaabBAabbAAaBBAaBBBBAabBBAAbbAaAAAaAbbaAbbBABbAbabbbAaAAABbbbBaaaBBAbbBABbbABAwBAbBbabABaaaaBaAABbABABAABaAabaaBbBBaaBbaBAABbAAaaABaBbAbBaaAAbAABbBabbABBaabAbbbAbBAbaBAABABbBABAbaAAbAbbBabABBAbbAaababbaBAAaBBABBaBABABAbaaBAbABbbBgaAAAbaaBaBbBAAABabaBbBAAbabaBBBbaABbAAaAaaaaAAbbBbaBaAbaBabaBBAbaaaAabbAAaaabeAbAbBaAAaaaAabbBAaBabABaaabbbAABbabbAaabaAAaabAabbaaabbBbAbBBABAbBbbABabAbABaaAAAbaBAAbabaEAAbBBABAabAbabAAaAaAaBaAaaBaaAAaaAbbbabaaAABabAaAAGaAbAABaBBabbaBAbAabAaAaBBAabkbBBBbAABabbABBaBbAbBbAaAAbbAaBAaBbABaababABBBabbaBBrBAbbaBBBBbBabBaABBabbZbbaBBBaBABaaAAbbAABbABBAABabAbbbbBBbBBbbAaaBaabABAaBBaBbAnABBBbbBBAabbbbbabBaaaBBBAbAabbABaBBAaAbBbbbAAABBbRAAAAABBabAAbaabbbAAbBAAaAbBabAAbAbaabAaAABbbaBAbaBbaaabBaBbBVAAAaABABaaabAAabbBAbAbABBbabaabaabBaaAbAbbbaaBbbbBAAabbbBAaabBBbAaABbAAaaBBbaAbaBAbABaaBbbBaBaaabbBbaaBbbBBbbAabBaaBabAbaBABAbAabbAAaABAbbBBbaBaBabBaabAAabaAbbBaBbBAABBABabBbbBABabAABabAaaabBbABbaAaAbaaBABbaAbBbbbbaBbabBaBAaAbaabAbbabaBBaaaaBaAaaaABBBaBBbaaBbAAbaabBbaBBbAbbAABBABAAhBaBAbAaaAaaabBbABAAABBAbaAbbBAabBBaaABababAbbbBBBAaAaBbAaaBabBAAAAaaBBBBaaABbBbbBaAbabAbaAbAaaAabbBaABAabbBAAAbBAaaBbAAbbbABaBBAaaBAABABaAaaBaaAABAbBBaABABaAbAABAbbAaAaAbAaBBAAbbbbaaabbaaBbbrXbaBbaBAABBBbabbbAaAabAaABBBbABAAABbbaBBAAbbBBbBAAABaabAbaAbababbabaBaAbAaaAAabaBBBBAaBAABaBAabAaaAaBABBBaBbbaaABBaAABBAaabBAbAAAbbAAAaabAaabbbBbBAbBBYbBBaGbaBaBabaAAaBBBABbaBaaaBajbBABBBAakbbBBaaaBbBaBAbbAAAbBaAaAAabBaaabbababaaabAaaBBAbbbabaBabbBBbBbAbBBAbaAbbAABbbBbaaBBbABBbbbbABAbbBBBABAIbAaBBaBaaBABAABArBAaAAAbbBAABabbAMBaaBBBBAAaBBAaabbbbbAabaGbaABBaaaBBBbaAbBBAaBaabAaabaabAaABAbBBAabaBBbBbBbBabbABaaABbabAbBAAbAabaaaaaaABabBbbbAbBBABaABAaBABABbaBbABBbAaBBAAabbBbaaabABAabaAaBBaAaaaAbbbabbbbBaABBAABbBbeBAbaabBbBABBBBBaABaABbbAbBAaabABBbBbbaaaabaaBaABbAAbbAaAaAabbbBbaBbbBAabABaBbBbBaBAaAAAAbABBAAbBAAAaABaAaAAbABBbAabbBAAQbabbABbAAbbBBBaaaaAaAbABAbaaBbAabBAAaAAaAbBaaBBBaaaBaabaabBaababBAABBaaABBbbAbAABBbBbbABBAaBbbABAAabbAcaAaBbBaBbBABABaAaAbBbaBAabBaaaAaaaAABABBaaaaaBABAaababbbabBbAAbbBaAdaAaAaaAaBAAabaaBBbBbaAaBbabaaBbBbBbBAbAaAaBABABABBbBAAAbbBBaaAbaAaAAaBabAlBBBAaBaBBaBobBBBAABaABBBABBaaBBaBaABBaBbaBBAbAaAbaBBBabababAbBbBaaBbBAAAaABBBAAAbBaBBbAbBBbaABABBBBaaAbabAbbbaBAbABBbAAbAbabBbabaAAAbBAjbBAbaBbBAbABAAbabAbaBAAaAaAbBBbaAbAAaBAbaaAAaaAbaBaaaBBBBbbaaBAaBBabBaabbbbbbaAAAbBBAaaaaaBBbaaAABBAaAbaBbabBBBaBBAbABbbBABabbABbabbBbbaabaBAaAabBAAbAaaabBaBabbbaaBBbaBaBBABAABBbbAABbaBbbAAaAaaaaaBbbAabBbaBaaabBAabBaBaFBAabBrabaBbaABbABbabAbaVaAAAabBbaBBAAAbbaBBaaABabaabAaaABBBbBAAaabaBbaBBBAaAaBAbAAbBBAAbAaBBababbaBABbbABBBABbbBAABAaBbbBBaabAbbBAaBbbabbaBBAAbabbaBBBbaBAaBaaBbbBBbbBbAabBBbbbaabAAAABaBbBBABbBaBBBAaaAabABBbbBbbabABbAbbbaaAaAAbaABaaAAaaAbbaBBAAbabBbababBaAaBBBbABbbBaaaBabaBaABbaBabBAAaZABAbbaAaaBbBAbbABbBBabbBABaBBababABaaaBABabaBAbaABBaAaBabbbABbabAAABAAAFaABBBBaAAbBbAAbbBAABaaAbAbabaBAaAAabABBAAAAbbBABaabbAaBaBbbABBbAAbAbbABABaBAabbAbaBBBbAbABABbbaBAbaaABAabaaabAbaAaabAbAABBABaBbBBbBbbAAbAbabAaaBbBbBbaBBabBbBBAAabbbZaaAbaAABBAaBaBbabbBBbbAbAaBBABABbbaAaaAaBBBbaalbbaBAbBaAABBbbBbaaBbabaaaAaAbAaAbAbBaBbaBbaAAAbBbAbbABBaaAAAApaaAbAALBbBbBaABbbbaAbBAbAbabAbAbbAbabaabBBbabAaaBBbaaaABAaAabBAbAaaBAABBBAAbBAaaBBABABaBbAbAabBBAAabAbbbbaBAAbBBabbaAAabAbBbAABBaBbBAAbaBBAABbbABAaAbAbabBAaabAbbAabBABaAABAaAaBbBBBbaaAbABBaAAbaaaAAabBBBAbaaBAabBBABbbAaaABbaabaAbBbABbbAbBAABbBbbBBbBAbbBBBBbBbaBAaBAABABbAAaaaBBBBAaabBAbbbbabaaaaBBabaBBAbAoBBBBbaBaAbAAbAaBaababBABbbBaabABaAaBBAaabBBaAABbbAabababbabbbABbbBabaabAbaBAaaaaBaabBbbAbbaAAbaAAabAABbaBaABABbaBAbaabBAaBaBBBBBABbaAAbbaAAAabbbgaBABBAbabbbaAabAaaAgBBaAaaABABBBabBaBabbaabaAAaAABaBBABAbbaabABBAAaAbAbabBabBaBbaABbBBABBaAaabbbbBBBaAbAAbABAaAABABbbABbabBabaBABAaBBbAaBBBBbbAbBBAaaBBBaBABaAAAaabBbaBbbbabbABaaaaBaaBAbABaBabAbBAaAbaAABBaabaaBBaBaaabBaAabABbBaabAbABBBbBbabBBbaAaBBUbBaBBabBBaBaabAAbBbaBBaBBAbAaBbAAaAaAbbbababBababAAaAAabaBaBaaBbBbBaBaaaABABbBBAbaBaABBABBBaBbaBABBBBbabBBAaBAaabbBbaabbaABBabbBbAabbaBAABaBaAABabAAbaaBbaAbabBBbBbaaABBAAAbAABaBaabaAAAAABaabAAaBbaaBAaAaaaAbBaAaaBaBaAAaaBABAAraBBAabBaABbaBaBBAaAABaAAaAAbaaabBABbAabABbBabBbbbBaaBABBBabaBBBaaBaABaaaBbabBAABbaaBBbABaaaAbaBbAAaAaaaaBaaBAAaAabbbBBqBbBaaBbaBBBBAAabbAbaVbaaBBbBabBbabbabAAaABaaaAABabBbbbBBaABabbabbABAaABaBaAAbBaAaAaaABabbaBBabaBAMBbBBABaAaAbbAbbAABBaABAaBAbBABbBABByaabbAbBABAAbBAabaaAbAabbbBaBbAbabAAbbAbbbbaAABabaAAAAaBabBBbAbaaaBaaaabMBBAbAbabAeAaBAbBaBababbADBaabABbAaAabAabBbaaaaAbbBBBaAABaBAbBBABABbbbAaBABAbbBBabBAbbBBBBAbBbbbAbAbaABaBDbBabBBBbAbaABababBbaBBBbbBBAAaAABBBABBaaBBBaAaBAaBbbbBBaBaaAbBbbAaBbaAaaABAaBbAAaABAbABAABabbbabBAaaBaBaAaabBAABAabaaAAbbyaabAbAaAaBaAaaabaAbBBAabaAAbbAbABbBbABABAaAabaaBabBabbabBabAbbaAbBbabbAbAaBaaaAaBBBBabbBbaabbabAaaBBabbABbaabbAabAabbBaBBBabaaAABbAbabbBABaBaAbbabbBBbBBbAAaAbbAaBbBbbBBaBAABBBaABAaAabaBaAABaAbaAaBbbbBbbBAaBBAAAaAaAaBAbBBBbabbABaAbWaaabAaBBBbAABBBAaBbAaababaLAbAaABAaBbbBBbbAaBbBAaAAbbAabaBabAAaABAbbaabxbbBababBBbbBbababBBaBabBbBbbBABBABABbbBBaAbBbABBBBABbBABAAaBBaaBBAAbbBBbBaBaAaBBaabBabBAbbAABbAABbAaAabbBbbBabbaAaBAaAaBbAbBbbBaBaAaBAbBAAaBBBaBbGAABAABaABaBBAbAAaAABABaBaAABbBaaABAbBaAABaBAbBAaBbaBbBbBaBABAaaBAAaaBBaABBABAaaaAbAbAABBBBBaABbBbBaBBbaBbABBAaBaBYaBaAbBAbaAaaBBbAbaABBbaABABaBaBAbbBAAAaBBaBaabAaaBBbbBbBBbBabBaaaAbAaBAbaBaBBbBAbBBBbabbbBAbbaaBAaabBbBAbAabbBBbbabbBAabbaaAbaabAAabbBAbABaaaaBbbababAaBBBbbabBAPAaaAbbaAAbAAaAbaBAAAbbABbabAAAABBbbBbbbABbBAaAbbaaBbBbAaaAaaBABaabBbaaBabABbABBBbBAbbBBPBBaAAaabAaaaBaaBbABAbbBaBAaBbAaaBabbaaBBBBBBbbbbbBBbAabbABAAbBAbBAabaAbBAbAaAbbbBAAAAbbbABBbaabaABaaAbBAbBaAbBaAbbbSAbaABbBAAABaABBBaaAbABbBBbbABBaAAbaBAaaABBBaabbBbABaaabAABBBABaAABaBbaaaaaAaBbBAaaBbAbABAABBabBbbAbbBaaAaBBaabbbaBBbbBbaIbbaAABBBBbAbBbaBAabAAaBaaAaAaaAAAAbABAaAABAbBBbaaabababaAAaBbBAbBbbBaaBaBBbbBaaaBABbBaAabBAabbAaBAAbbaaaabaBAbbabbBbBABbAbAAAAbbabaAbAbAaBaabbaaBaAaBbBAaaBABAAaAbIbaABAbBaabBBaBBABbABAbaBarBAabbBBABbbbAbAAAAbAAbBabbAAababAAAbBaaaABBAaAABbaBaAbabBabAaAAbBaAbBAAaAABAAbBaBBAAAabAabbAAaaaBBbaABAABBBBBaABAabABbbBbBbABBAaaBAabBBaaBAbBaaaAABbaaabaBaBbBaaAAabaABabAABabBBABaaBaAbbabaBaAaAAAaabAbAbbAAbaaBbAaaBBbbAbBBabbaabaaabbabbabbBBbbABaBaaAAaBBaaAbbbbabAAbbBaAABbBbbAbABAAaBbBbABaBABABABaAAABbABbaaaabBaABaAbbbbaAaABAAaAbAABbaaAabBabaBbbaaaabBAaAabBBaABbBbBbBbABBbAbBABbbabBAAaAaAaaBAAaAbaaBbBaBAbAAaabBBBAbbbaaBaabpBbAbAbAaaBbABaabBbaaBaBaaBbAbAaABAABBbAabaaAbabBbbbaBBaABaBaAbbbbBaBaAbaBBAbAAABIaaBBAaBbaBBrbaaAbabAbABaaABabAAaaABaabABBbAAbBbBAbbAbAbBbbbbbBbaAbbAAabbABaaAbBABBabaBaAAAbbBAbAABaaaABabbaabBaBBbbbbbbAAbABbbAabaaaaBBAaBABAaabbABAbABAABbBBbaABaBBBObaaababAbBbAbbbbbbbBaBAAaaBBAbAaAAbBABaAAaBbbbAaaBbBBabAAABBabbAabbaBaAAAaBBBbbBBbAbaBBAbBbabAAaaBaBbBbaAABaAbbBABbBBABbbAbbbAbbbbaaaAbbabAbabaBBaaaabAAAaAbBABABAaBBbbaabaABABaAAAaAABABBbBBBBAaAbBBBBAaAaaaaBbaAAbaaBBBaaaaBBBaBWAabaBbBBabaaBBAbaaAabBaaAAAabbaBABBaAaabbABabAbBBaAbaAbBabbbBABaBBABaabBbaAbBbbAaABaaBbbbAAabBbAAbaAAAaBbaBAAaABABbABbBAAAaAbBaABABbAaabBaBAaABABbBAAbabAbbAaBBBBabAabbABAaaABAbaaBaaABAAbaBabAbBBaBbBaAbaaBBaaabaabAaaBAAABbaaaaBAabBbAbbAaBaaaaaBBBbbabAbbBaBBAabBABbAbaAAABaBaaababbBBBbabbaBaABbABbBBBBBAABBAAAaAbBBAbaAabAbBBABABBaaaBbbbABabbBAAbAabaBAbAABAaaAabaBabaBbAAbBbbaaAAAFaBaaBABAAbabaaabBaaBAbAbBabABBaAAABaaAAABaAbBaBABAbpBBAbabAabBAaBAAAaBbaAaAPBAaAabbBAbaaaAbaBBbbABaaBbbaBAbaAABAabaAbabbbBaaBaaaBAAaaBBaABaaaBBaBbBBbBbbgbabbbBabAbaAbbAABBababBbbBAbAAabaBAaABbaAAAABbbEaaBabbBBbbaaAbBBaAABBbaAAaBBbabaaBaAabBAababbabbaaAbBABbAAbBbAabaBAAbBabSBAabaBaaabAbbaBaaBbBbAbBbBBBAaBBAbAAbABAbABbbAaABaRABbaBbbbaABbBbBAaBbBaBdBbabBBababAAABBaabBAaAbBAAbabBbabBBaBaABaaaAAaBaABABAbBaBabBBbbABBaAabaBbaBbbaaAaABAbbABBAbabaABAaABaAAaAababaABAABAbaBbbabaaBABbBbAaBAabbABBaabBAaBbabBaBAABbBAabaAAebAbaBaBbDBaAABAAaBbAAbABaAaAbBAbaaaAababaAaaUbBaBbABaABABaaaBbAaabBABaBAabaaaAABBAabbabBAbAAabBaABbaAaaaAbaABaBAaBBbBabaaaaaBAAaaBabbbAaBAAaaBaBBaAaabbBaBbABAbABaABBabbbBaabBBbBBBBABbAbabbaAbBbBBBBbbAAbAAbABBbbAbBBbAABBbbbaaAaAabbBBbAbbBBBBbAabaAbBBaaaaBbAAabBbbbaPABBaAAABabAAAaABbbAbBABBAwBbaAAAaBaAAAAAAAABBBBbBbbBaabBABABBABbAaaAabBbbbBbabaaBBBBBAabbABaAbbBBabAAbAAaaBAAbAaAAaBbABbBAbaaBbaBbbAABAaaaAAaABAbBabaABBaBBBaBbQaaBAbABBABBBaBbBLABBBbabbBbAbAAbaBaaBaaBBABbaBaABBbabbbaAaBBaBAbBAbAAbBbBAbBaAAybBBbaBbbbBAAABaAbAaBBbbABaabbabbAABbbBbAaAaaBbbABBAaAbbaBAbBaabAAAbbaAAbBBaBBABBbBBaAAaAAAabBBaAABbbBBabBaaaAbAaabbAbaabbAbBaBaaBBAbBaBAAAAAABbABaBAAaAaAaAAaabbaaAaAbbaaAabBbBbBabbAAaBoabAAaAasabAaAabBBBbABBABbabaAbABabBaabaABbbABaBbAABAAAaBebAAbAABabBabABbaBbaabAABbABabBAbBaAABbbAbAAABAaBAbaAAbaAAbaaAbaAABbaBbbBbAABAbbBaaAbbABBAbaAaabAabaAAbaBaaaAbAaBbaabaABbaBbbAbAABbBBBBAbbABBaBbaAbbaABbaaBABABbAaBbAABAAaBBBbBbAAbbaABBAAABbabABbBBABAAbbBAbaabBBABAabbaaabBBbBBBbbBbbAABaaaBAaaaaAAabAbAAbaaaBabAAaaabBbAbAcbAAaaaAAaBBbAbaAbabbBAaawABBBBAaBAbbBBAAABabaaAbBaAbabBbbBBAaaaaaAQbbAaBAaaBAAbAaBxBAaBBabBbBaAaBABaABABBABbBAbAbBbAaBabbAAAbbbBAbBBABabbAaAaaBBabBBbAAAAbaabbBbabBaAAAaAAabBaBaBbBBAabaBBaabBBBBBABbaaBbbAbbbaAbbbAbbBaAAbAbabaBaaAabBABAbbAaABBBaabbbbAaaaabAAbabAbbAbaBaAAAaBaaaBAAaaaAbbAAaABaAABHaAabAabABaAAababBbAbAbaAbbBbAAAAABaAAaAbbBAaABbBbBAAcbbAbBBbAbAaXaBAaBAAAAaAaaAabaAbaBBAABbabbbabbAbAaAbbabBbaabbBaaBBabAbAbbBBBBAbABBAABaAbbbbaBAabAabAaDbABAaBbBBaBBbBABBAaAbbaaAbBaaBbBBAaaabbaabbBbaBabBbBAAABBbbbBABbBAaBbBbbBabBabABAaBAAbaAbabBaaAABaJBBBABBBAbAbBABBBaaBaAAaSbaBAbaWaAAAabaBAAbAbAbbbaBbAaBABaAaaABAAabaBBBBBBAAaBbBbaaAbBbAAAbABabABaAbaABbBAbaabaaAbaaBbaaBaABAAaaAaBabaBBAaBBAaBaaAAABaBbBAAbBBBaababBABAaBbAbaaBaaBBAaAabbaABaaBbAaaaaBAaBAabbBBbBbBbAAAbbaAbbbBbBbAaaBbBaBBbAAaABbbBbabbAAbbAbaaaAAaABAaBaaabBAbbAaAAbaABAabBbBBBAAbbbbBbaaaaAbabbBBBAbABBaaAbaAAabaBAbAaaBaBaAAABaBbabBbBAbAAAbaBaAbabaasbabaaAbaaabbaBBaaBABBAaabBbbAaaaABAAAaBabaAAabbBaBBBBaabbAbaABbBbAbAabbAbaBabBabBAaAbbaBaAAbabbBAaaAaaBaBAaAaBaAAbabAAAAabBbAaBAbABAbaABbABbBAABBAbBABaabAAaBAabABaaBBbbbbabAAabABAbBabaABbabaaBAabBAAbAabBbbABAbBAaAbaAAbAaabbAbbAABAABbaBaAbbbabBAaaaabbBBBaBaBbAabABabBBbBABbabAbAaaAbaAAbaAbBaaBbABbbaAbBABBABBBBbbaBbbAAbBaAAAaAaaaAaAAAaBBBBaaaABBBBABabaBAaBAAaBBbaaaBbAbAabaBbABAbaBbAAABAAabbBAaabBababbAbBAAbabbaBbBaBaAbbABabBBaaabAABAAAAAbbbbBBBBAAAaaBABbBAbaAAABBBBBAabaAbBBbBbaaBbaBBbbAAabaAbBAAAbBBbAAAABAabBaAabBAabbabbaaaaBaabBBaaaaAAAaAABABbbAaBbabbaAbaAAbBABbBaBbaAAAaBbBbBaabBbBaAAabaBaBBaaBAABaaaBBBaaAABBabbbbBbaBaBbBAaBBbbbAAaBaABBaBbbBAabBABABBBAAbAAaBaBBAaBBaABbbbaBaAaaAaAABaaAAaAAbBBabABBaaBBBABbAAAAabAbbaABbbbBBAbaaBbAAAAaAbABbabAaABbbbBbBAabbAaAAbAbbbbaAaaBaBbbBBAAaBaabAAbBbaAaAAaABaBAAaAAaaBAbbAAaaBbbabaaAAAAAaAbBbBAaBabaAbbABbBabBAAaaAbbABbaBnbBabtbBAbabBAaBaBABAbaaaaaAAaBbBBbaAbaBbbbAABBaBbBBAaBAABbBBAabBABAaBAbaBAaaBbBBAAbbababAAAAababaBAaAAbBBAAaaabbbbAaaaAbAbbbAabAaaaAAbaabaaaaBAbAaababbBbBBaABBBbBBBabaabaBaAAbAaBaAAabABBabAaBBbAAbbaaBbbbBbaBBaaaBAaAAaAabbbaABAbbbbabAAABbBBBBBbbAABBAaAaAabBABabbAAbbAabABAAaBbABbbbAaBABbABaAbbABaAaabBbABAAabAbaAaaAbAaaBBaabbaabbbBaaaABBbAababbBaBBaBABbBABABbbAaaaAbbBBABaAbAabbaAbbABaaBbBcaBbAbaabAABAbBaBbBaABbABBBbBbbababaAbabBABAAaabbAbABAbaaABbBbbBbbBAbbBbAAbbAaaaBbabAAABaBBbBAaBAbBaBAabBAAbbaBAABbbBbbBAAaBbBbBaBaabAakBBBaaBaaaaaaQabbbABaBbAaaAAAAbAabAbaBaaAaaAAbbaaaaAAbAAaAbbaaBaAaabbbAbBBaBABAABAbBBaBaAbaAAaaANbBAbxAaBbAbaABBbBBaabAABABBaBAbABAbaaBBaaBbAABbbbbAABBaabABaABAaBABBBABBbBABBABbABBAaaABbBBBBBbbbBabbAABBAAaaBBaAaABAbBBaBbBBBaAbaBBBBBbaABBAaABBBbbbBabaaBBAAaaABbBbbAbBBBbaAAAabbabAAaABbaAbbBbaaABAbBaaBbaAaAbbabaBABBBbbbbAbHBaBabaAabAbbBbbbbaBBaAABBBbAaAABABAABaAAAaAaBbAABBAbBbaBAaaAABAbBBABbAaBabbaABAABabABAAABaAaBAaAaABababbbBABBbaBBbBbaAbABbBbaABbAbaaaaBbBBNbBABABAAaBabBBBBbBBaBbAbabaabAbApAbabbaAbbAabABABBBBAABBAABaBbAaABbABBBbaBbbBAbBBaABBAabAbABBBaBAABBBbBaBBbBBBbAbaBBAbbAbbabbBBbaBabAdBbbbbabBABAbBBAAbBBAAaaBaaAbbbBaabAaABbabBbaaBAbbaAbbBbbbabABabababBaBbbBBabbAbBBbbbBbBBaBBAAbAabBAABaaaBBaabbABBaBaAabBbAbabbabaabBbBAABaabaAbBbbaabBbBABbABaBaBABaAaBBaBbaabAAAAbBBaAAAbAbbAABtABaKBBAaabbaabbAaBaBAABABAbABBBbbBAbabAAbbbBaaAbABBAAaaABbbaAAbbAbbaAbbaaaBABbbBBaaBbabAAbBbBbBAAAbbBBABbaBAAaAaBAAbaAAAABbbAbbabhbaBbabBbBBaBaBbAaBbabAABAbAAabbAbaAAaabaABaaBbaAbAAbaaBAbABAbABAabABaAbaBbABBbBaBaAaBAbaBBbAAaBbAAbAAAABBbAaBABaaAABAABAbBbBaAAbBaAAaaAABbBBABBBBaABBAAAbABaAaBaabaaaabbbBbBaBbAAABBAAbbbBbbBbAbAAbBBaBxBebbaaAAbBAbBAbAbbAaaabAbaanabaaabBAbBaAAbBBBbBaaAAbbBAaAaBaabAbaaAAABBbbbAAabaaAbabaaAaAABabaBaBAAbbbBabBabbbAAaabbaBbbbaBBbbBaBAAAAbBabaBabbbbaaaBbbaBABbaBAaABABBaBBAbavaaBbbaaaAAAabbaBAAaBABBBaBABzaaBabABaabBaAbbBABBbAAbbAAaAAbbAaBbAABBaBBaBAbAbaAaBAAAaBabAABBaaBBABAaAAAbbbBBaAaAbbbABBAbbABAbBbAAbbAAbBBbAAAaAABbbaBAabaaaAababBAbBbAIBaaaAbBAAaBbAaabbAbbaAaABaaBbbBABBBBBAAbBBbBbbAbABBBABaBABAbBaabaBabBAAbBBabABbAaabaBbBABbbbBaAbBbAaAAbAAbABbBbBaAaBbaaaabBbAaBBAAbAbBBaBBAaabaabbAbBabAbaABAbabBAbaBBaaIAAaBBaABbbAbbBAABbBaabaAabBAABABAaBBAbAbAaABabBbBabbAbaaaaaBbaaBBbaAAbABBbbaAABbbbAbAAbABBbABbBbbbaaabAaAaBBabBaBAaAZBbbaAAABAbABBBaABBbBaBaABAaaBBabABBbABbaaaAaBABAabaAABbbbbabBAbbAAAbBAbbAbaABbABAAbaABAbaabaBBabBaABabbaBbbbBAaaAAabBbAaabBAbbBBABbaBbBAAAaAbAAbBBABabBaBbaAAaBaAAaAAABAaBAAAbaabaBaaBaBaBbaBAabbaaUAbaabABbaaAbAAABBAakbAAAbbAbBabbbbaaABAaaaaaXAbabbaABBaaAABAaBBABbABaBaaAbbbabBabaaAabbabAABBsAAABBbBBaabBBaAbbaBbBBbABAbBaBBBaAAAAaABBBababBBbbbAABAaaaBBbbABAbbbAaaAAabBBbbAbBBAaaBabAabaaaabbAbababbABbBaBBabbAabaBBAbBBAbAbBBAabABBabAAabBAbBBaBAbbaAbAabbBaAAABbaAaAaBaAAAABABaBAaaAabAaaBAaaAbbaBaaBababbbAabaabABbbaBbabbbBBbBBAbaBaAAbaAabBAbAaAbaaAaAAAaaAbBaBbABBbaaBBAAABaABBbBAabnaABbBAbaBAAABABaBABAbaAAbaBaaAABbBaBBBbBABaBaaqAbbAaaBbaAbbbbBAAbbbBBAAbbaaAABBbBaabbAbAAbaaaBBAbabbBbaaBAaAbAaAbAABBbAAAaAabaAcAABAAbBabAbBaabABBbAabbBaBaBbAaaABaaBabaAABbbaabbBBBAbaBbBabBABbbABabABabaABaAbdaAbbaAabaBBABAaBBabbbaaBaabbBBABabABAbABBaAAbbAabaBbbBaaBbbbbaAAbAASabAbaAbABBbBABbBbbaABABAaBAbbbaAbaABAbbbaABABaabAAAbaabBbBAbbBbAbaBbaAaBaBaAAAaaaABaaAAaABAaaabAbBbAaAbABbBabBBAbbbbAABaAAABbBbAAaBBabBaAbbAAAABBABAbBaBAABBBaababbAAAAaBaaBAABAbBABBabBaaBABaBABaBaaaaBaBAbbabBbBBbBBaBaaBbAaBabaBaBaabbaBbABbBAAabBbBAbDBaBaAAAbaBaaABBBBaBbabbvBBaobAbAbmABaaabABbbaAbaababBAAbAAAbBbABBbAbaaBAABAAbBbBbBaBbAbaBAbbabaaBbAAbbbbAAAaAbbABABbAbBAbaBBAaBAAaBBaAbbbAbbBabbbABbaAbbBAaBaABabBaBABaAaabBAABBBbbbbBBBbBbaAabbaAbBbBbbbBbbbbaABAAbbaBaABAaaaaAaBbbBBaBbbbBaaaaBBbbaABABaaaABBBbabbBbbBBBbAAAaBBaabAbbBBabBbaAABBbbAbBbbAAAbaAbaaaabBbBaBBaaBAAABababaBBbbaaBBAAbBbbRbaBAaABBbBBBbAbAbbBbBABaAaAbAbbabbBBbbABAaABbaAabABaaBBbAaAaBBBBbABAbBaabaBBbABbbaAaABBAaBbAAbaBbBABbAabaAbbbABabBABABbbbBabBaBBbabBaaaABbaAAbBaaaaAaBbbAaabaBbbBBaBABbABBABABbaabBabaabBAAaBbABBAabAAaAkBabAAaaAabAbBaaaafaAAaBBBBaaBbAaBbaAbBAabaBBbaaABVaBaabAAAAaaABBBbaAAAaaaBBbbAaaaAaabaBbAbbBbBaaBBAbBabbBBAAAbabaAaaBbAaAAbBaAbAaaBaaBbaAaaAABbaABBBBaaAaBABaaAAaBaBBAABabaAbAaAAAbAbbAABaBAAAbbbavbABAAbbaBAaBBabAaaaabAaBbAbABBabAAaAAfabABBABaaabBBBAbBBaBAabBBbbbBaBbbBAAbbBAaaaBAababBAAaBBAaBBaAbbBBaAbABAabbaAaBbabbaabBaaaaUBaBABAabaBBAABABAaBBBBAAABBAAabbBBbaAaBbAAABbbaaBbbBaAABAbAbAabbAbaaBbAaBbAbabbAAbABbbaBaAbbaAbbBaaAbbBBBbAAaAAaAbbaBaBaAbbbBaqBBAaAabBbBbAbbBBAaAAAaBBaBAAAAaaabBABbaBAbABAABBabbbBBBABbAaaAbabbabAbBBbABABBbAAAABbbAaabbAAAAAabBaaABAaAAaaBBabBaaABbBBbBBBAabABbAAAABaAAbBbBbaAbaAAABBAaAabbAABAAaBBaababABbabaaabaBaBAaBbABbBFBaABabaabBbAABAbBbbBABbbaaBaBaAbbAAaBaABBbbbBaBbbAAsAAaAAAaABbaAAaabaBAbbaAbbBBAaabbAabbBAabAAbBaAbbaAaabaBAbAbBBbBAaaaaAabAbaabbBbBbAABababAaaAaBBBABBbbBBBBaABaABBAaaABBAabBAAbAABbAaAaabBbAAAbbAaaaABAbaAaABaAbBaAaBBBAabbaaBRbaabBBAAaBAABaBabAObAbaaaAAabaabBBbABBBBAbbBaBbBAbbBBbBABbaaaBabbbabBbbbbAaAbBBabbaaaaaBabbAaBaBAbaAabbbBBAaAAbBaBbAbbAaaBaBbAbBAbbbAAABaaAaaaAaABBBAaaBBbABBABbbbBAbbaaAABBAAbAaAabAABBAAbaAAaBbBbaBBaAabbaAAAbAAabbAAabbBbBAababABAbaabABabbBBBbAAabaaaAabAbaABAaBAaABAbbABaBAbAbBAbaBqAbbaBBbBAABbAbbabbAaaAABAaBBaaBbBaAABbAaBbBaaAbaBaABAABbABAaBaBabaaaaasAAAAAaaAbbABABAabaAaAaaBBBBbAbbAbaBaaAAAbBABAbAABBabaaBbAbbbabbAaBBBABBABBBaAAbbBAAaAAAbABaBBbFBAabAaaAAaAabBbbAABBaabbbAAbBAbBAaBAbaaBBBbAAbaBBBbBbbAAaaaABabAabaAbBaaBBAbaAbbaaAABaBBBBAbAaBbaIABbBAaBaaBAAGaBAbeBBbaAAbAaAbAaBBbBBBbAbbaBbBbAbbbAAaBbBAbABbAaBAAbabBbbBAABAaBAabBBBbBaBAaBbBbzBBAAbBaAaBBbBaAAaBAbbAAabBaAaaAbAbbaaAaAABaaBaAAbaaAbaBabbBAaABAaBaaaBaAABbaBbaAabBABBbBBBBaaAabBabAABaBbabABAbbABbBaABAABAAaAbABAbaBbAaaBbAbaBAbAbBbaBbBAbaaaABabaabBaaaBbAAbBbaBBAABbAbaaabAAAaAabBBaaBabbaBBBabbabbAABaaAAaabBBabAabABAAAbBBAAAaabAAAAaabbBbabBaAbbBbBAbaBBbBAbbaAAbAABaBBBbabbbbbaabbBAbAAAAabaaaaBababaBbBbbAaBAaBaaaBbbbaBAbAAbWbAbaAaaABABbBbbabBaabAVABbBbbAbBBABaAbaAaaaBBABbAAAaaaBAAABaBaABbBbaABaABbABBBaabaAAbBbaAAaaabbAAAbAabbaaaAAABAAaabAABBBbaaabAABAbyBbBAaAbBBBBBbAaAbAbBAABAaAAaaBaAbABBbAAABABBabAbaBABBAAaABBbbbBABAbaABBbbAAaaaAbbaAbBpaAAAAabBabbaaBbbABBAAbABaBaAAbAAaaabbABABBaABBbAAaaBAAAbBaBBbAababaaABAABABBbABaBABbbaBAaABAbAbbabbAAaBabbaAbbbbBBaAaBAAaBbABbAAAAAbbbbAabbbBBaAAAAababbABAaabaAbBAbbAabbaABaAbbaAaAAbAbaAAbBABBBaawABBBabAABaaaaAABaBabAbAuAAAAAAAabBabABaBDAAaAaababBbaaBAAabBabBBaabaBbaaBbbAAbaBaBbAAbbbaaAbbaaBbBaAabaaaBBBABaaBAbABBaBbabbaabbBaaabBaAaBbABaBBAaaBbBaBabbabaBaAbaaAAbABbAbaBabaAAbAbaCaaaaAaaBABbbaBABAAaaaabBbbBaaAbbaBbAABAbaBAaBAaABAAbBabrBBBBaAabAabAabaBAaBBABbABAaaBbaABbBAbbAbbABAbbBABaaABbABAbAbbBabAabbbaaabaAABbAABabbbbaAaaaBBbAaAbBABAbBaABABDabAbAAbbbbBBbAaAABBaAababaABaaaBbbABAabbBBbAAaBAABBabBAaBabAAaBbBaBAaaABbBBABaaaabaBBBABBabBbABbaAAbAAABaBBaAaaBaABBabbBBbabbABaabBaBAaaaAabAbBBABBbabaBbaABaaAAABBBAbBAbaBbABBBbbaaABAabaABAABAaBBaAaABBBAAAbAaabBAbabaBBAabAbbabBBBaaaBBaabBabbaaAaBAAabbBaAaabaBaABAaBAaaBBbbbbAAAabAabdAbaBBABAAbaAaAAbAaAAbAAaAAABaBaBBAbBbBaBABBAaaaBABaBABjbbABBaBaBBAAabBABBaAabbbAaBBbaABbBbabAaAbBbaBaBbbABBaaakaAAbAbbaaBbbabBbbaaBAABAbBAbaBBbbBbABAaAABbaboaBBAAbaBbaBbbbaaBabbbabaAbABbBABBBaBBaABBaBAbbbAAAbAAaBAABAAbaaBbaaaBAbbaBBaAaabBbaAAAbbaADBaBAbAABbBAABaAaaaABbBaaaAABBAbBAbbBaABABbaBbbaaaBAaBBbBaaBaAaABabBaAaABAbBBbBABBbaBAAaaabBbbaAAAbBBAabABbBBAbbbBaBAabAbBbbBABBBaaaaabBAbaBaaaABBBAaabbBABABbAAbabAbabbBabbbAbaAaBBBaaBBbBBBaBABBabABAaBbBABBabbbbbaAABbAaaabaBBbBbBAAbbBaBabbBBbaaaQBaABBbAaaBBABBAaaBABbBbaaBBaaabbBabAbAaBbbAaAaBabAAbbBabbAaaaabBbabAbabBbBBAaBABAABBbbaabAbaBbbAaOAbAbAbABBAbaBbbaaBBABbbbABbABAAbABfaBABBAbAbbAAbAabbbbBAaBAbbaBBbAAAaBBAaaaaAbaBbbbAAaAaBaAaaAbbBAABBBBAbBBBAaBaBaBaAbbbAbaaaBbBWbBaBABaAbbaBbbabbbbbbaAAaAaaabAaBAAaaaAAbAABbaabbBbbbAbABaaABAAAAABbaaAaBBbaaaBbabBBabbBaBBaAbAbbbBAAbBBAbAAbaBBbABBAAAbBaaAAbABabAbbbbaBabaBAbbABaAABaBAABAaAAABaBBaBBaAabbBBbAaAAbABBbABAbBbABaAaABbAbBbbaBAaAAbABBBAaBbBbabABAaaAAbBbBbABbaaBAAAaAbbaaabABBBAbBaBAaaaBBaABbBaaababbAbbBbabaBAAbAabBBaBbbabBaabBABAaBaAbaBBBbAAbBbaABabaabAabAbaabBbbbABbabbaBAABBaBbabaBaBABAABAAaAFBABbAaABbABBbabBBBBaBbBAababaBaBbBabAbaBbAbaaaAbbAbaabbbbbaABBaBABABBaAAbaaBAABABAAaAaABaaBaAAAaBaabAabBBbbAbBBAaAAbaAabBBAbbaaAAaAaAAAAABABbBbAABaAaABraAbAaAAaBABBbAAAbABAbBbaBaaBbaAAbaBbBAABbBABbBbabABbAaaBAaaABbAbAaBbBaBBBaabAaAAbABaBabaBBBBBaABbBABbBbaBBBbBBBAbbabAAbbBbABBbAABabBAAaBaBbAAbBAABAAbabBzbbaaaAAaBBAbBbbaaAbWABabBABAbaBbabAaBAbBAbABAbaBaABBBBAbbAaaBBbABAaBbBAbbBBbBbaaBaBABBABababABaAbABBAAgABABaabBbaBaBbABBaAababBbaAbBbABBAABBBaBaABaaBAabaABBbbbbBABAaAbaAaaAAaabBBabAbbBABabBabaBBaABBbabbabABbaAABAbbAAAAbAbaBAbBbbabbaaAaBABAaaabBbBbAbBbaBaaBaAaBbABBBaaabABaAaabAaAAAABabbaaBaBBaaaBAbbBaBabbaBabbabAAbBaAbAaAAabaAAbaAaABAabBabaAbBBbBaabbAAaabABbAAABBAbaBBaBaBbbBABaBabBaaBBbBbAaBBAAaaBBBbAABaABabABaaAaaAAbBaAAbBbaAbAAZAAbaABABaAaAABAbABaaBaaBBBAaaBAbAaBBaAAaAaBBAABaBBbbBbABbaBbaBbbaAaaBBAAABbBBBaababbabBbbbAbBaababbABAbbBabbBbAbaBBBaaaBBbaabAaBaaaAaAaBBAbBaaBBBbAaaaaBababABAbbaAaaaBAabBaaaBBbBABbaaAABBbaababAaABbAbaabbAbabBabbAaAAAbBaBAbaBAAAbbaBBAbBBBbabAabbBABAbAAabAaBBbAaBaaabBAAaaBbabbbaAAaAbaababABbaAAbbbaBAbbBaAAaBBabbBAbbaABAAaAAABbaBbAbabBbBbBaAaAaaBAAAaAbBAaABbABAAAbbAAbBBAbaAbbABBaAABbAbaaaAAAaBaAaaBbBarAABaBbbBaBAAbAbAbbbBBBBBaAAbBaAaAAAaAAAbbAAbaBBaaBAbAABBAbbaBbbaBaBbaaabBBBaABaaabBaabaAAABBbAbbbABBabbbABAAAAAbbABbBAABaABbaBBBBbBBbBAAbrabBBaaAbAaABbbAabaBAAbAabAaBaaABABBAbbABABaBAbBBbbbbbbbaaBabAAaAbbbBaBaABbbbaBaABBbaBAbbABBBAbaAbbaabbbbbAaAbbaBBbbAabBbAabaBAnAbBaBBABAABbbABAabbBBAaabbAaBbBaBbBaBBBaAaABbaABAababbababaaaabBAaaaabaAabbBbBBbAAabbaAaABbbabaaABABaAbabaBbBBBaAbBAbbbaaBBbAaABbBbbaBAabABabAbabBbaBBaBaabBAbabaaaBaAaBAABBBbAABBAabbBABAabbaBABabBBAbBaBbaBbabABABbBbaAAaBaBaAbaAAbBBaabBABAbBBBBaabAbBBBABBAaabABbAAABBbbBBBbBabaABaBAbABaBbBbBaaBAAbabbBAAaABAAaaBaAbAAaBBAbBabaBBbAAaAaababAbBBAAAABabBaababAABBAubabaaBAAbBabABbBABAAAbABBBbaAABBBAAaBabbaBBBaaaaBBBbbbBBBbABAbBbbBaaaaabABBAAaaaBABBbBbbBBBABaaAbbaBaaBAbBAAAaBabbbAbaBABBAbBAbaabbAAbbabBaaaBBAABBaAABAbBaBbBabaBBBabAbaaaaabAaaABABBaBaaaabBBaaAAAaAbBAABbBaBBBabbBBAbBbAbAAAAbBBbBabBaaBaBbbBabbBBaABBABBAaaabAbbablaAABbaBbAaaABaaBBaBbBBAAaAAbBbbaAAAbAaBabBaAABAABBAbaBABAaAAABabaBbBABAaabAaBaAABAabaabbbbbbbbbBAAAbaAAbbbabAaABBBbAabBABbbAAaBBbABaBbaaaaAaaBabaBbaaABbAaBABBAABaaABbaBABaBbBBbaAAbaaAAabAabbaBbBBbABbBAbaaAabbbAAAAAbabBaAAabAbBaBbaAaaAABBabBAbAAbbBabBaaBbbBAabbBaBbbaBaaAABAABBBbbABbaaBbbaABafBaBaBAaaaaBbAAbaABBbAbBbBbaBaBbaBaabBbabABaBBBbBbbbabABaABBBBBbBaAbBbbAAAbBAaBbAAAABabAaaaAbaaABABBAabBAabbbBabaaABaaAaABAaABbabBaaAaBbBaaabAbbbbbabaBBaabaaBaaBaAbAAbababBbABaaabABaaAbAbbBAaAaAaAAbAbBBBBbbBaBbAaAbvBBABBtBBAAABBbbabBAbaaAbAABABbBaaaEAAbabbaaabbGAAabABBAAAAAbbbAbbbbbbBbBaBaBBbaBbbBaBbbaAaBaAaaBBaaBAAaBBaaaabAAaAaBBAaBbBAabBABABBABBaAAJbabbaaabBBBbbBTbAbbAbAABBBAABBAbaaAbAaAAABABabbaaaBAAbaaaBbBBABbabbaaAbbaBBbbAAAAaBAaaABbaAAaAbBaaAbbaAAbBaAaBBaBbBbBbbbBaAbBBaBaAABBaBBHbAbaababBababABabaBBaAAabaaAaABaBaaABaABBBbBbaBabABbbAABbaBabbBAabAbaAbbaBbBBAbaAaaabBaAAaAbBaAbbAAArBBBAbaAbAAAbBbAabBbAAbAbBABaAbBbbAaaabAAaBbABBbAAAABaBMAAbbaAbBBAbbAabABbbAbBbaBbABAUAaAAabBZBBbbbBabBbbBaAaABAAbbAAbaAbbAaabbaBbbAbAaabAAbbBtBbabbbbBAAAAAaaBbBAAAabLabBBaBbaabABbaAbaBABaBAAABAAaaBaAbaBBABaAbBbaabaaBBbabaABAaBbabBAAbbAaAaaAaBaabBBbaAaAAabBbBBABBbBBabBAAAbBaAbBaaBBbbabBbbAbAAAaaBaAbbAAAabaaBAaBaBAbaaBAbaaBbbABABABabBBBbABBaDaAAaBABABAAaAAAaABBBAabaABaababBaBaBBbAaaBAbbAABaaaaaAaBBaBbbabbBabaBBBbbBBBABbbaXbABAbBbABbBAbAbBabBbAaAababBaaABBAaAaabBAbaAbAbAaaAAabaaBbBbBBBBBBaAbbBBAaBBBBbbBABaBAabBbAbabAbaAaaBBbBaabBABbbBBaBBbAabBabBaabbBabbBAaaAabbBbabbabBBaBbbABAaabBAaAbAAbAAAaBbAAaAbaAAabAbabaAAAbBAbBbBbBaaAbabaBAAAaBabAaBBaaAbbbAaAAAbCbaABaBaAaBbAbAABaaABbAbbbaaABAaAabBabBBbBAaAABbabaABAlbBBABbBAbAbAbbAABBbbbaAaabbBAbAbbbabbAaABBBabXaAbaAAbBBAAABaaAAAABBBaAAabbbbbbbabaaBaaBAABBAbDABbbBBaabABbABbbaaBBBAAAAaabAaBAAabbBBbBaaBbBabAaBaaabABbbAAaBbAbAABAbABababbBbBBABaabBBBbababAabAbABbBAABAaaAaAaBBaBbBabBBaAbAAAAaAABEbbABBBbaABAaAAbaabBBaaBAbAbAbAbbAbAbBaBabAAbaABaAaAaBABbbABBAabBBaaaAaaaaAbAabbABbAbaBabaaAABBAbBBabaABgBBBAAabbbBbBBAbbaAbbabbABABBBAabAbbABAaBaaBBaABABbAaBbbBABbAbABaaABBbAaBbbABABBABaBaBAAABabbbAabBaaBarBBAaAAaBBaABABBbBAAAbaBbaaBAAabBabAAbAaaaBbaABgbBBabAbBBAabBBABAAAAbaBBbbaaAbBBBBaaaaAabBBaBBbbbBaABaaAbBBAabBbBBbaAAaAaBaabBAAbBbBaBAbaBaBABaABAbAAAbAbbBBAbaaAAAaAababABaBBabAbbAaBbBAbAAaaabBBaBAbBbAabBbaaBAbbbaaAAbBbAABaBAabbakBBAaBaBbAabaBaBBaAbAbABaBbAbaBaaaaAbAAAaaabAabBbBbBAAaBBBbAAAbAaaaBabazBBbaAbAaBABbaBabBABbBABaBabbbBBABABaBaAPabBbBGBBbBBaAaBaaAAabBAABBaAaAbbbaaBbAaBBAbBAAbBaAbBABaaBBbaBBbBabaaaAAAWbBAaabbaBBABABbbaAaaBBABbBaaaABKaaabBaaBBbBbAABAAaaBAaBBAabbAabABAAabAabAbtAabBaAAaAAAaBbaABAAaBbbAbAaBaaBABAAaABaabBaBbbaABBBBBaABbAaAabbabBBBaBAaAaaBaABABbBAbAraBbbBBbuAbbabaaBAaABabBBBABAAaABbaBbbaBABbBbaAAbABaabBabaBbbBbAaBbaAaabAbBbabbabbbABBBbbBaBABBaBbAbabaabBaABaAAAababBABABbAAABABabABBAAAbBBAaBbaabABBBAbbBBbBAaBAbaBABAaAaBAAAABaAbbAbABAaaABAAbabbBBABBBabAabBaaAAbbaBabAbaaaBBAbAabbbAfbABAAbABbBBBababbbAbbBAAbbBAbBBbbaabaaAAABbbbAaabBBBBbabbBAaAbaABbaBaBaBBaaBbjAbaAbaABAbAabbBBBbAAABbAAbBbaabaAABBbABbAbBbABbaaabbbabBbAabAaABaaAaBaBAaaaBbaaAAaABAAbBaBaaBBbBbAABBbbabAAbbBbBBAaAbBAAAAbaBaAbAbbBbBbbbAbaBaaaAaaBaBaAbbbbBaBBaABBbABABAaAbAABAaAbAaaAAaAaABBbBabAaAAbABabAaAbbbAaBbBabaaBabBBBaAaAbaaBaaaBABBBAbAAabbBabaBBBBbababbAbBbABaAaABaaBbBBBbaAbbbaaaaAAAaaaaBAAaaAbabBbBBbaBBbAbBAEaABBBAAABAabbaAaABbaBBabBbBBBAaAbabaBAaBAaBbBabAABBAbBbaaBBaaBAaaaaBbBAAaABbBBAaABAAbaaabbabAAABaAbAAbAbbbbaBbABbbaBbbaaAabBBbRBAbBAAbAbBaabaBaaabAbBaBBAAabaJbAbBAAaBBABbaaAbaBbbabaabBbbAAbbaAaAABBbBAabbBaBbabAbAAbbAAAAaaBbAaaABbBaaAabAAaAaAABbaBBABbbABAABAbakBAbBBbbbbABAAaBaABaBBBBbBabbAbBaBbaAabaAabABAaAabaBABABbaBABaabaABBAbBbbBbbABAbbabABbaabaBabbbaabABaBaabbABbBAAaAAaaABbObbAbabBababBABbBbABBaABAABAabaBbBBaaABBBBaABBAbabAAbAaabAAFbBFAAbBbaaAbaaAbabbbbaBBBAbBbabbAaaBBBAAaaBBbAbaaAbaBbBaaabAAAbaAABaaBbABAbbaBbbBAaBaBaAAaABbbbBbBBBAbABBBbABAaaAabBbaAbAABbabaBBbAbaBaABBAbbaBbBabAbbbbAaaBBBBbaBBBAabAaBBAbBaaaAbbbABBBBaAABBbbbbBAbBaAAabBbBAbBbbbBBAbBaBbAaBbAbaAAababbbBAbbAaBBAAAAaaBaBABbbbAababABaABAaBaaAabAaAaAABbaBbbaAAaBbBbaaabBBbAbABBABaBbBBBabaBBABABAaBBbBbbABabaAAABUAAAaAbBabaABbAbaAbBBaBAbABBBABAAaBaBBBaaBabaAbaBBAbbAYaAABaBaaabAAABbBbaAabbabbaABBaAaAABbBBAaabAAaaBaZBbaaBabbABBaaAABbaBBbbaaBbABBABAbbaABAbabAaBBbBAaBaaabBABbbBcbbaAABBAAAbaBbaAbBAbBbAbBAaBabaAAbAabAaBaAaBAbABABaBAAaAAbbbBaAABABAaaaaBaAAaAAAAAaBBbAbAaaABaBaAbbaABAbBAAbbbaBbabAAAABabbAaBaBbbbaAaAababaaBaAbbBbbbAaabBbBAAbaabbBbAAAbAAaAaaBAAaBbbAAabbaabAbBabbaBABAbbbabbBaABAaBAaBbbaABAaabBbABBAAbBBbabAaAbaBAbBbBabAABbBABAAbBBBYAbbBaABaabbbBbbBbAbbabBBaAABAABIBAbBbaBAaBbBaAbbABbabBbbAaAbbaabBAbBABBbMAbBAbaabABaaaaaaaBaAaAaaaAAAAAabbBaabaaabAbBabbbbBBBABbaBbBAaBbbBbAbBAaABBbbAabbbABbABAAAbAAbbAaBBBAaBBbBbAaBABBbbAbbaAaDABAAAAAaAAbabbAaBbAbaABBAbbbAABBbbABBBABBBBBaaAAabaAaBbBBABaBaabaBaBAABBbaAAAaBAaBbpBabBbaBBaBbAaaBbbbabAbabBBbaBaaABbAAAabBBAAbAbabbBBbABaaBaBAABbABAbBaabABaBbAabbbBabABABAaAabAaAbaBAaAaBabaBAaaBBbaAabBAAbaaABbBAAbAbBAAAABABBAaaaAAAaABbBbABbaBBBbbbBbaAAAbABabBAABAbbbAbbaABabBaABAbaaBBBBbjAABbbbbBaBBaBabbBbAaaABAaaAABbababAaaABBaAaBBbAbBbBBAabBABbaaAbBAaAaAABBAAbbbaaAAaAaAABaBBAAAabBBaBbABaBbaabbbBAbBBaBBaBaAABbbbbbABBaBABaAbbAababbdbBbaAAAaBbBAAABaBBaaababAAAAABbABaBaBbbBBaBaABBBbaAAaaAABbBabAbAaAaAbbAAbBbBBaaBAABBbBbAaBbABAbbaBbabbaAbBbaAbaaBAbbBBBBBBAbaaAAABAaABbaBBBBaAbABAbBBaAABBabaAbAaBbaBBABAAbdyaBaBBAbAbbaaaaaqAbbAabABBBbBBBaaaAAbBBaABbABbBAAABBbbabAABBaAAaBbDAAaabBabBaAbAaAaaAAAabAABAbBaBAAAbbaaABBbabBAbbbabaAAabBBABAbbBBAbaABbAabbABABABaAabBBaBbaBBBABBaaBbabaAAaaaBbbbAaAaAbBbbabbbBaBABbbaabaAaAabAAABaaaBaABbBaBBbbaBbaBBaabBAabAaaabbBaBBaAAbbBbbAbBaabBbAAAAbbabAAAbAbAbBaBAABABaBbabBbaABabaAAABaBaAbAaAabABAaBaBaAbbbAbbbbbAAbaaxaAbAAAAWaBbAaaaBAaaBbabbaAAQaAaAABaAAbBABAAbbAabAaAabAbBBaabbbAaaBBBbBaaBAbbBabaBBbbaaBBBaBAAAbabaaaBBbAbAABaaABBBAabaabbababaBAAAAaBabBaAaBBaaaBBbABbBbbAbaAaAbAaBABAbABABAbAaaAabABBaBabbbaBBbbbBaBAbABBbAaaBBaAabAAbAaaBABBbBAaBaAAaAbBbabBaAbBBabAABbbbBBbBAaBAbBaBAAAbaBbaBAABabBabAbABabaBAAababbBbbbabaaBBabABbbAAAAABaBBaabBBAABbabBaBAAAbbABaBbBAaAAAAAAAaBBAabBaBBbAAabbbbbbABAaabAbaabbAaBbaBAbBaBAaaAabbbbaAaBAaABBBabAABBBaaABSaAAaAAbaAbbbbbBbabAaaBBabbAaBbBBaaAAAaBBBaabbBAaaBBBBabBbBaaBbAAABbBaaAbbabaBBbAaBbabBbaBbBaaabaaBaAaAaBAabAabAaEaAAABaaBAbBBbaABbBbbaBAbbaBAaaAuBABAaAabBbaBBAbAbaBBabaAbbabBBABbABabbbBBabbBabBbAABbbBBaaAbabBBAbBBBabbbbBaaBABBAbaaaABBaabBaabAbABaBabAabAbbaaAabAaBAABAbaaaAaAAbAbAaAaAAabaBABBAABbAbBbBABAaABAaAaAaBaABbBABbAaBAbbBbbBaabbbBAbbAabAAAABABAbAbbaBBBAaBBAbAbaAbaBABAAbaBbaAABBXbBaAbBAaBBabBbAaAAaaABabAAABABaAabBbBbbaBBbbAAbAABbaBbbAabBaAABAbBBbAaBaBbaBbAababbAAaBBAAbabAaaAbAABbaBaabBaaAbbbbaAbAbAAtBaaAabBBbBaBBbAaaABaBAbaBbbbaBAABaAbaBBaaAaabAabAaaBBbAbAABBbAaabAabAaabBbBbBaaaaababAbBBAAbbabaBbaaABbbBAbaAaBbBaBAabBABAAbBaBBaaaAbABbaAabBbaBbaBAaBABbbBBbABAaaAbAAbAaAababbAaBAAbABbbBabAaaAAAbAabAaBBaaaAaAAABbabAAAbBBBaBaBAaaBbBBaBBbbABbbaBaBBbAbAajaAAbabaaBAbaBaBaababBbAbAabAAABAaAabbAAAbbBBBaBbBBAAaaABabaaBAbBAAbBBbABAbaabaUabBAaAAaaBabBAbAbababbBAAAbABaAAAABBbBaAAAAaABBbABbABaBBaaBBAbABaaAaaBBABABBBJBbBbbbaBAAbbbbAAabaaaBaAbaAaAbAbabbAabbAbbaBaBbAaBaabBabBBBbabAaBaaBaAAAbBAAaaBAbBaBBbbaAaAxaAAabaAAbbBbBBabAbbabBaBAabAAbBAaAAbBAaBAAABAAAaaAbBbbAbAaAabBBBABaAaAabbaAaabAbAbaBBabAbabBAbABAbbaBaaAbaBabbbbaBAaBAaAbbAAAYabaAaBBAAAbAbbabAbaABbAABaABAabAAaBBabBBBbbaBbBBAaAabaaBbAAbaBABbaBbBbAABBBAAAAbdBBabbaaBBbBaBabBAabaAabBabBBBbaBBABbBBAABABAAAAABBABaAbAbAAaBBaBaBAAAAbbBbbaABAabaAyabAAababABbBabBaAabbBBbBAaBaaAABaBaaaaAbabAAaBbABAAbbaaBAAABaBBBaaaBbqbABAbBBBBbbaBBBbABAABBABAaBAbBbbAaAbbaaaaaaAAaBABbAabaBbabbbbzaAabABbabbAabBABbabABAabbAaaABABaaABaABbBBaBbbBBbBBbAbbABbBaaBbAbBAaBaabbAaBBAabbbAbBAaaaABAbBBaabAbBAaAabBBBbBnBBaOAaabAabBabbAbBAaVBaAaaAAbbaaABbAAbBAabBAAABBBbAaBaBAAAAbAAAABBBbaaAbbBAbAaBbAaaAabBBBaBBbBaBBAAbAAaaaaabbaaABBBBaBBBaBbaAbAAbBaBaABabBAaAbbAaabBbDAAaBbaaABAbbbBbBBBbBaaBBabaAaaAAAABbbBAaaaBAbaAAbAabbAbaaBAAbBBbabAabBaaaABaaaAABaabBAababAaAABbBbbBBAAbbBBBAbABaaaAABBAbAbbaBBBAbbabBaABBbBAaBbaAABaABabbABABbAABBbaABaAbbAAAABBbBaABBAaAaabAbBAbbbaAABbaBaabbaBaBbBbBbAbBaabbbAabbaABBAababBBaAaBbaBbBbjBbbbAaAAbbaAAAbAbAaBAABAbabBABbBbaaBABbBABAABbAbBBaBaBAaaaBAAABABBBAAAAAAaABbbbbBaBbabBBBaBaaAbBBBAHbaBAAabaaBABaaAaBaAABAbaaaabAaabBbbabaabBABBbBBabBbAaAabaaAAbAaBbbaBBbbABbBBAbAABABABBbbBabBaBabBBBAaBABaaABAbAaBBBBbBbAaABAbbAbabbbbaBAAbbAaAbabBBAABAbBbBaBbABbbbaAAaaAaaBBAbabaBabAAAaaAabBaABAAaaBABABaaBbAaBbabbAaaabAbbaaABbAbbaBaAAbBABAabAAaAbbaAbABbabbbabbbBBaBBBBaAaBAaAbbBBBaABBBbbAababbAAbAAAaBbaabAaABBbABAABaABaAbBbbbbaAABABBabbAABAbbbBbbBbbAaBBaaABaBbBBbaBAaAabbbBaABbaBAABaBBBaABaABAAAAAbaAbAbBabbAAAABbbaAABBabBAaBBBbbbAaAbBbABBNAABBaabaBaaAbBBbAABAaaABaABBAaaaABABBBAABaaaBaAbBBaBabaaAaaAaAbAABbBbABaAbBababAAbBAaaaAaaABabAbabbabBBabbBbBABBBBbbabABAAAbBbaBbaAAABbAaababBYaBABABaAabAaAAbABaaAAbabAbaAaAbAAbAaAAbBBbbAbbBabAABBaabBbAaBAABaBaABAaabbabAAAAaabaaBbAABBabAbAbaBBBaAAAbbAAAbaBAAbBBAbBbAbaaaaBbBaAbaAbBbbaABaabAAbbbBbbaaaBabaABbaBAaBAaBAbBBBbBaAabAbaABbaBBaAbABbBbbBabAbbBbBabbAabBaaBbbBbBbABababAaABAaaBaABbbBaAAbABBaAaBAbAbBBaBAaaabAbabaaBaaBABBaaabbAbBABbbBbbBAbABBaAabbAAAaABbaBAbaaAbAAaAbbBabJBBbAbaAbABbTAAAaAbaBaBBbBbaaABAbBbBaBababBbKBaABBBAbaBBabbaAAbbbBAbBBbbbYbbabaBaBaABBaBbBAAAbbaBbBbabbAaBBAAAbBAbbaAbAaBBAbAaBABbbBAbBAbBBabbaAABbABFaAbBBBAaAbBabbAaBBAAbaAbrABBaaBabbBaBABAbBabBaBaaaaaBAbBAAABbbabbbbaAabaabBaaBaaBaABbAABAbbBbBABAaabbABaBAAaaAaAAAabbaBbbBbaABbobBbBAABbbBabBBBAbbaBBAbaBAbbbBbBaaBbababBaABbbaabbBbAAbBBabABaabAAAbabAbbAbAaAAbBBaABBBbaBaAAAbBAaBbAaABBbabbAbaAbbbBBbAaabaAAAaaBabAaBaabAaAaBBabBBaAaBAbaBabbBaaAbabbAAbABaBABBBaAaAAAabBABbbABaBbBABAaAaZABAbAaaAbbBAaABBabAAbaaABBBbbbBaAbbBbAAABaBbAbBaAaAabbAAAAbbbaaabAbBbbbaAbBBbbAaAbBabBbBAAaABaAABbVABaBABbAbABbbBbABBaabBBBaababiAaaAAABbbBBbbABaaBbbaaAAbbBAABBAaBaPBaBbBBBBBbBBawbbbbbaabaaBabAAabbaaBaABAbAaaBabaoaAaABBBAaAbBABbBbAabbbBaabaAAAbAAaaaAaBBaaAaAaBBbbbAABbBaBbaBbbBBBaaBaabAaaaBAbBAfAaBaAbaaIAAABsBbAAabbiaBAbAaAbAABaBaaabAAAAAbAAaaGBbabbaBBABBaabbbAaaaBBbBBaAbBBABbAAAaBabAABbAaabbaabAaABABBBABBBBAAbAbBBAbbBbaABbbBBaaBBBABbBbaBABBbaaBbbAAAabBBAAbBaaabAbbbbBbbBAabbAaBAabbAABaAbAaBAbAbbAAABbaAAAabbBAAbbaBBabbbBAABBbaabAbbABBAABBAAaAAAbbBABabbaBAbbBABbbaaAbBAbaAbBBAaabBBAabbbaAABaAbBABBaAabBBaBaaAbaBBAaAabbAaaBaBBBBaaAaBBaabBBBbBBaBbBaAbBbaBBaaBAbaAbBbAAbBbaBBbAAABAAAbaabBBBbaBbbAabAAAbAaAbBaABBAbaAbBbaBABBBbBbbbAbAbabAbbaaABAaBBaabABbAbABaBAbAbBAAbaBbabBBaABbaaAAbBbBBBbBbABaABbbAblBAbBabBbaaAAbbBaAABAbBbaAbabdaabBBbAaBAaAaAbBabBBBAabBABAAAaBbBAaaAAaBaABaaAAABaAAAbBbBbaBaBaaaaBbaAABABaaaBbaAbbaaAaBAbaABaAbbbbBbbBbBaAaabAaBbaaabbbBBBABBbbabBabBBbaAbAaabbAbbAaBAABaBaAbbbaaabBAabaAbaAaaBbaAbBABAbBbBBAbaAbaAABABBbbBbbabBBaBbAABBABbBaAbabbbABbaaAAbBaBBaBbBBBAAbbaaAbbaAabBbAbabaaAaBAaABbBBABBAbBAaaaNBaaBBabaAABBababaaABAgABbBbaAAAbbAAAbaBBABBaBaababAABbBAbaaaabAAAaBaPZBABbBaaABaAbABBBbABbAaBaAaBBaABaaBaBbbBBABAbBaaaBAbAbVABbBAaBBAAaBBBaAbbaaaabbABAabAbaAAaBaabAAbAaBBAAaaAaaAaaBAbAAbbBaBaBBBabaBbabbAaAAbAbbAaBaABbBbaBaBBABaAaaAbaBbbaBaAaSbAAABaBaBbabaBBbAabbaAaAaabbBaBbBabbAaAAAAabABaaBbAABaaBBBABbaBbbBbABbBbBABBbABaaAbAbAbBAAaBBbbaBaaBbbbbAABbBBAbBbBBBbABBbABBAaBBaABABBbAfAaBBbaBBbAbbBaaaBABaABaabbAABYAaaABBAbAAabBbaAbaabbbbABaAaBBBbbBBaAbbaBBbBBbBAalABAbaaAaBaaABaBaBAbbAABAABABBbBbbBabbbbaBbAabBABaaBbBbaBaAbBBaAaBBbbbbaaBBBaBbBAbBBbAbABBBAMaBABAAbAaBBBAAAaBbBBBbAaBbbBBAabAbAABbBBaBAbbabaABABBAbBaAbaBbABmbAbbAaABaBBbAAbBBPBAaAABABbaBBBBbBaAaAABAAAABbABAbbAbAAabaaAABbBaBAbaaBBAABabbbBbBBbBAABbBbAbABAbBbBAbBbbBBaaAAAaaabAbAAAaababaAbBAAaAabaAbabBbBbAbBaBBabBAAABBBAbBabaABBBbbAaAbbAAaABaABBBbBaAabBbABBBbaBBAbAbbaAabAbaBbABbababaBaBbbBaAbabBbAaBbBBaBabBaAaabAbBAbAbAAabBaaAaABbaaaBBBbAABBbbbAAAbbBabAbbbBAbBBAabbBBaBAAbbbBAABAAbAaBBBABaBBBABaaABAaaBBAaBBAaBBBAaBBaAbBBaBabbAaAAabABBBbaaaaAAAAaBBBbbAbaABbBaBABBBAaABABBAAABBabBBAaBBAaaaAAAAABBBabbbAaABAABBAaBBbtabBBBBbaBAAAAAABAaAaAbaAaaaBBaaBBaABBAAbbbAAabaaaaAaAaabbBbbAbABBabAABABAbbBBBbbBbAAbBbaBBaBbABbaaAaBabbBBAAAAbbbaBBabBbBbaAaBaBBaABbBbalBbBbBABaBbBAAaBbAbABBbAABaABBBaBaBBAbBBbbBbbbbBBabbAbBbBABabBaBaAbBabaaBbAbAbbBAABBbaabaBbaAbbABABbbaBbBabbbaaaBBABAABABAabBBABbbaaabBBbABAabAAabbAbbBBBAababAAabAbAAabBAbbAaAbBbAaaAaAbbaaaBaabBAbBBAaBBbBBbbAABBaaaABaBBAAbbbBBbAabABbAaBbAaaAbAbBBAaaBAaBABBXaAaBBBaaabBBbBbAabaBbaabABbaABBbabAaAbbBabaABabbaabAbBaABBbABbBBbBAABbAbbaBaBAbaaBaBBAABBaALaaaBAAAbbbBbabbbAbaAabAbbaaAbaAaABbBBaaAAaAabAABAaABBAaABbaAABBbbAbababbABAbaBBaBbabBbAaaabAbBAAAaaBBAAabbbaBbbAbBBAAabaAabBBAABaABAAbbABAabAAbbAbbaaAbAbAaaAaBbABAbbbbaAAbABaAbaBBaBAaBBAAabAaAbAaABBbbBBBabBBaaAABbaBBBBbABAaaBBBabbaaabBbAaaaaABBbaAAAABAaaabbBababAAaBabAAaaBABaAbABaBbAaabbAAaaBaAabbBBBABbbABabBBBaAAbBAbBAZbBbaAAbaAAAbaaabaabBaAabBaaABaAabBBAbAAaBabBbAaAaAAbABbabbBAAxbBAbABBbABbAAABBBAaaabBBBBbbBaaAAbBABaBABabbabBbabAabAbabbBABBAbaBaAabABBaBBBbaaBbbBaBbBbABaBaBbBbAaBaaABbbbaBaBaBBbBBaaAbAAbaBBBAbaabbAACbaAbAbAbBBaAbAabAabaAaABAAAaBBBBbaabBbbbAabBaBaaaAbaABbBaabBbbbbaaaaaaAAaaaABaabBbBBBAAAbAABabbBbAbbbaaaBaabAAbBBABAaaBBbbBabaAaabbbABbBAaaBaAABBaaBbAbBBaABbbbBAbaAAAbaaAbAbbBbBbbbaAAAbAbAaAbBABbaBabAABBAaBaaaabbaAabBBaBBBabBaAaaBaBAbAbbabAbAabBaBBAbAAAAaabbbAbaAabaBBbAAaBAaaAAAbbAabBbaaBBABbapBbbbbbBABaaJbaabaBabBAaBBAabaBaaAAbabBbAbaaaAaAbBAAaaaAbAaAaAbaBBABaAaAABAabBabBbAAabBbbbaBaAAABaAbabaAABabaBbaBAaabaabaaAbBaAbBbaBABaABbbbAbAABBAaBaaAbAbAbaBbaaBbAaBBABaaBaaAAbBaBaAABAabBBaabAbAAbaaAABbaBaAbaAaABBABbbabbBBbBbabaBAabABbBBBabABaAABabBBbBBbbAbbbBBAAbbbbaaBbBaAAbAAbBBaBBbabbAabbbabbBABbaaAAabAABAabOBAABaBaBaAaabbBbbBBBBBBaBaaaBbBAAABaaAAAAAbBAbAbAaBAaAabAabBbBaaBaAabaBBAABbBbaaBBaAABaBABAAABBbbBbaaaabAabAbABBbAaBBaAAaAAbaaaAbAAabaBbabBAAABababAaBBabAababAaBbAAAbBaabbAAABaBabAbbbBBBBBabBabAaBabbbbaAaabbbbBbbbBAbabbbbbAAaBBAbaabAaabaaAaaABbaaABabBabBBAABAaAaBaababBBAAaBaBaaBaaBbaAAaBBbbBbbbBbabABAabAbBAABabAAABABaAaBabAaAAaaAbBababbababAAbbBABabbBbaBbbaaAaBaAAbabAaAaBbaBBaBbBBbbBbbBbbBBaBbBBAaaabABaAAAbBbABAAbbAbbAbAABBABLAabBbbAAabAbABBABBAbAbaBaAbABAbBaAaAazABbBaBbabABBaBbaArAAbBbabBBAbAbbAbBBbBaaabBBbBabBbAbAaBaBaABAAAAABbaBABaAAbaBbbBbabBAaaAbAabaBabAbAAAaABAABBaBbfAAAbbABABBaAbaaabAAbbbAbAAbabPaABBaBaBBzBBaaaaBAbABABbbBaBAAabbabaBbaBBAbAAAAbbbAAaAbABBbABAaBAbbbBABBABbaaabaAbAAAbAAABbBabBBBbBbABBBBbbAeBbABaAabAaBaBaaAbaAaAbbbAaaAaBabAbAaabbBbBAboAaAbaBaBaaBaaBbaBABBBAbABaAbbbABbzaabBmABAaABBABbBaAbaBbBBBABabbBaaABbAbbbBbAbaAAaBabbBbbtbbbAAAabAabBaaAAAAbBAAABBaBabABaAbaBbbaaBBBBaAAaBAbAAbBabAAABbBAabBBaaaABABBaaAababBaABaAaBbbBbAABAtAaAbBabaAABABaABBAaaABbAababAABAbabAbBabAaaAaaaBaAAbabBaBAaaBbbaababbbBBBbbaAbbAbbBaAbaBebbaBAbaBBBBAABAAAAaaABAAbaAabAbaBabABabAbbabBaaBbBABAbBABaAAaBbAABBabBabABAaBAbBbAbaABBaBbaAAaAAaaAbAaaaBbbaBAAbAAbBBBjaABAAbaAbAbAabbBBaABBbBBbaaaaBaAbABBBAABbabaaBbBBbBAbbbbBbaaBBaaaaAbAbBBaAABaABAbAaaAAaAbbbAbaaBBBbAABBbBaaaBBbBBAAaBbaaBaaBaBaABaAbBbBAAbBbabAAAbaBaaabAaabBBAbABbaaBBBAaBBAaBABaaAbbBBBAaaaAbabaBAABabbbabABAbaaBbBbbaaBBbbaAaabAaVaAAbbbBaBbAAaaaBABBaabSAaBBbbBAbBaEaAbBBaBAaAAAABbBABabbaaAABabaBaaBBbABaBaaBbbbbBbBbaababAaBbbAaaAbABaAbaaaaAAaBBaaaaBABbabaAbabBAaabbaBaBABaAbaBBaBaAabBaBBAbaAAabAAbaaAAbAabbASbBBbaabbbbbAABbbAbbAaaAaBAaabAAbbabBBBbBBAabBAbbBBAaBaAbAbAbABAbbAaBABAABaBAaAabAbAaAaauBaAbAbAbaBbabbbBbBabaBAbaBAbAbbaBabbAAABBaABAabbbBbaABBbBAaABABbazbBbaBaBbbbbAAAaBbBABABababaBbABBBBaAAAaaAbaBaabAABBBbAAAAAbABbbAbaaABbABBaBBAABBAaABaBaAbbabbABAabABaBaAbBaaaAaAbAABAaBABABAAABbABBbMaAbaaBlBBbbbBAAbbabaABagabbabABBABabbAbbbbABbbbBaAabBbAAABbAbbbbAbbbAbbBAbBbbBaABbBAABbBbAAbAabBBaAAAbBbbAbaABAAaAbAaAbABAAabaBBabaaABAAbaAAaaBBAAaaaabBAABBBBaBAABBaBAABbabBBAabbAaAAbBBBbAbAbAbbABBAAABaBaAAaAbabbbBABAbTAbaBbsAaAabababAbBABBabAAaBAaAbABbaBbAbaAaBAbababaBbAAAABaaaaaaaAbBabaAbAaaabABAaBaBAAaabABABBbbbBaobBaAbabAaBAaaaBaabbBABBBAaaBAAAaBaaAABAabbbbababaaBBaBabBbBBABAABbAABAbAabAaaAbBbbbbabaAbabBBbaAAbABababBbBAbbaAaBAbaaABAAbBBbBAAbaBbBBabBBBBbaBBaAAAabABaaaBBbAbabBABBabBbBBBBbbbAaBaBbaaAAAbaAAaBBbBabbBaaBAbABAAbAAbBbbAaAaAbsAbABaABaBBbABbaaBABAaBBabaAAAABbaBBaAABbaBabaBaAaAAAaaaaabaaABAAaBbBAbbBAAabBbaabAaabBBAbaaaabBBbbaBBABaBBbAAaBbbaABAbabAAaBbBAaABbbBaBAbAbaAAabAABaAABBaBabABBbaABbAABABAaBAAABabaAaaBBTAaAAABAbbbaAAaABABaBaBAAABBbBBBBBabAAbABaaaBBaaabAABbbBBBAbABabBABaBBAbaAAAaaJbaAbABbaAaAbaBAaAbbAAAbBaabbBABBaAaAaBBBbAAbaBBbbrBBAaAABABbbbbBbabaBaAbABbbAAbBAAbaBBBAAAAaaAAbBbBaBBABbabbbaABbaaAABABBBaaAABABBABbAbBBaaaBAAbBAAAAaBbbaAbabBaBBAbbaBBAbBbBbABbaaBAnAaaAAbABAaAabaABJaAaaAbBBBbabaBBBbBBaAaBBBBbbbaAbbaaababAbbABbBAaaAaAabaaBbBAbbbbAAAabaBBbABBbAbaAbABbtbbbabbbaAbbbaaaaAbBaaAaAaBAbBABbBBBAAabaaAbbBabaABbABaAbAaBbAbAbBAabAbbaBbbaaBaABAAaAbBAaaabAbaABABAbBBaabAbAAaBAbaAAbAbabaAaAaaAAAabBaaabaBBAababaBAbbbBaBbbbAABBBAabbbaBbabABABBABbAKabbAAaBBaABAaBBbAaabbBBBBBaaAABBBAbaGbAbbaBabABaaBBBbUaaaAAbBBABAAAbBaAAAaBbBBBBABBABAAAbAAABAaaBBbAcAbaBAabABBABbbaBAaABaAabbabAABbBbbbabBbBBBaabABabbAbBaAABBabaaBAbBaBaaBBbBBaBABbabbABbBBABaabAABbBbbABBBABABaabbbBBAABBbAaAaABabbAABAbAbbbBBABBAabBAaLABABaBaBbbaaAaAKABBAbBaABABBaaaaaAaBBaaaBAAbBAABBbaaBBAabABAbBaBbBAbAAaAaAaAbAbAAbBAAAABaaBaBbbbBbaaBbbbAbAbbBbBaAAbaaAaBaAbBAabbaBaabaAbabBAAaabhbbaABBABbaBabAbbaaBBAbbaAbAAabAABbBBAaABBBBAabBBBaBAAaaAAAbAEBabbAaBAAbBAAaBaAAbaAaBaaBaBbbbaAAbBaABBBabaABABbABABBBBaaaAabAAaBBbAaBAaBbAbbaAaabAAaabaAAaBBbbBAAbAbbaAAAAAABbbBabAaBBBbaaBABbaabbBBaAABAbbBaBaabAAbbaAaBABAABBAAABBBbbBbbbxbbABbABBaBabaababbBBBbBBbABBbabaaAbBaAaBBAaBaaBAaAabBaaAbABBbBAAaAaaaBaBAAababBAaabAaBBbbBaaAAABABaaAbbBBababAAbaaaBbAbBaaaAAAbbbbaaabAAaBAabbabBaaAAbAabAaBaaBBaBSaAaaaaaaaaaAbBBBaBaAbABbbBbbBabbAAaabaaAAbaaaaAAbAAABAabBaaAAbbbAAAbAaaAaAbBbBbbAbabbABbBaABbBAbBABBAAAaBBaBbAbbaBBaBAbAbaBABabbBaaabbBaAAaBbAAaabABaBaaAaAbABBabAabABbbaaAabABbbBbabAabAAabAaabbAAbaBaBBBaBBBAbBbbaBBabaaaBbAaAbbBBABbBbAaBaBBABAaaaBbaaBaBBBAaAaAbBABAababbaaAbBbbaabABBABAaNBAaaAAabaBaABabaBaaaBBBABbaBBAAABaAbaAAAbbAAAaAaaaBbAbBbbAbAAabbBBAbaBaABBbbAAAABbabBabaAbaaBAAaaAbAbbAaABbbbBBbBaabBaBbBabBABBbbBAbabBBAaBAbBAAaAABAAaABbbbBABAababAbabABaBaBBAbaAbBbAabBbabAAABABaaBBABbaAaBbBBbKABaAaaBAaAABAbabbaBAbABABbABabABAbbABabbababBBBbaABbABaAaabbbBAAAAaaABaabBAaabBAbaBaBbbBAAbBAbaABaBAbABbaBAABbaaaBABaBBbaBbBBaaAabaABbbBBAABAbbaabbBbaAbBAAbAbaAAabWABAaBAaBabbaAabaAaAaAbbbbAbBBBbvBbbabBaBaAbabBAaBbBAbbbaObaaBbabbabABAAAbAaaaabBabbbabaaBaAABabaaabBBBaaABAbbaBAaAbbAbBabbAbabAAaaBBAaAaaBabaaBbbBAAaAbbABbBBaABabaaAbAaAaBabAAAbAbBAbaABbBAaaABaaBBBBaaBbBABBbBbabABBbbbBaBBaBabaBABaBaBaBbaaAbbAbbBaAbAaBBababaAAAbBbBaaAAABbAbAuBBbaBabbAbAAaaAabaABbbBbbAaBAAAbaaAbbAaBaBBabBaAbbabABBaBbBBAabBIAAbAAaVbaAbAaAaaBaBAbaABaBBbbaABbaBBaBAbAaAABaBABAaBaABAbAAAabaBbBaBAbAabBBBaBABaaaaBaAbAaAbAbAaaABbabAABbbBbAbBBbBAabAAAbaBabaAaabbAAbbAaABAbbBBaAabAaaabbaABbFAABabaabBAbAABaBBBbaAbAbAabaaBbBBbaBAbBaabbAbBAAaBABbabaababBAaABAaBlaaAABaabbaabaBABbAAAbAaBBAAaAaAaBAAbBbabaBbbAbAAbaBbBAaaWaBaBbABHaBBAbBbBbaAAbBbBbAaAaaabbaaaABbAbabBbBbBBAAbABABAAbababaabbABaBaAbbabAabbABabbBBbbbBaAbaabaABAAAbaAbAAKbBAaBboBBAAAabAaBBbbaAbbbaaAAbaaaaBBBBBAAbaBaaaaABBabABBaAbBbabbaBABbBAAbBbbbBAabUAAbbAAbaBAbBBBbbBBBABABbbbBbbbLbAbbAbAbbBAaaaABbaaabABbabBBbBBAabbAABbBabAbbaabAbBABaAbAbaabBABaaBAbbAAaabbAbBBBaAABAabbbAAABaAbaAAAbaABIAbbbBAAbAAabABBBUAAAabbAAAbbbAbAbABBbAABbAABBAbBbbABbaBABaaBBaBAAAaaAaABBabbAaAbBbbabbAaAABAaaabbbBBbBbbBAaBBaBAbaaABABaBaBABABBABAABbbbaabABBaaBAAaAaABaAaAAbABABaBbAAbbaaabAaBbAaaBBabaAAbAabABBbBAbABaBBbabBbaaABaBaBBbbbbaBBAABaaBAabaabABBAAaAbaaAABBBAbaabBBbBabaABBABAabAbabABaBbbBBaAAaBAAaaAbbaaAaBaaBbAAAaaBbabAabAabAbabaBBBAbbaBabbbabAbAAAbaBAbAabaAaaBbaabaaBabBbbbBAABBbaaBbbBaBAaABABbbBbBbabbBBHaaaaaaaaBBbBAaabBAaAbAabAabBaABbAbAaBAbaaABBaBaaabbaBBabBBbAabbabbbaAAbaBAabaABAbbbAABBaAbabaAaAbaBaababbBBaaAababBaAaBabBAAaBaAbbAbAbAAaabBbABaAaAaaAbbAaAAabBabAAabbabaabbAbBAABbaBAbaaBBaAaBaaaBAAaaabbAbABBAABBBBAaaABBBaAbaBaaBaAABBAABBBAbBbbabbBBBbasBABBAbabABbABBaaBBBaaBBBBAbiAAABaabBBAAaBbbABBaBBbabbBaBaBBbbaBAaBaabAAaBbaAABABaBaAaaaAAAbBWaabAbbBbBAaBAAABABBaBaAbAabBabbaBbaaBBBbabbabbbYaBabBBBaABAbAABABbBBabAaBBAbBbBAaBBAAbbaAabBbaaAAabaaBAaAabbbABBAbabABAAaNbaaAaAbAbaBBabBBBBBbaaAbbAbaABABabaaAaBAabABaAbabaBBAaAbBbbbBBabbaABbabbbaBaBaaBAbaaAabaaABAabbbaBaBABBBaBBBBBAaBAbbabbBABbbaAAabAAtbbaaAaABaBaAAbAbBBAbBaBaAbbBBBabbbAabAAbAbBBaBbBbaAbaabbbBABABBAAABaBbABBabABAAABbaBBAAbbBBbaBAAAAbAAbbBBBbBbaabbBbAabaABbBBbaaAAaaBBabaBBbBaabaBbbbbaBAbBBABbbbAaaaaBBBAbaAaBBaBABbBbaBaBabAbbaAaaAbAabbaBAaBBbBABABabaabbAaBabBabbAbaaAbbAaBabAaAbBBBBaABaaBaaAaABBBAaBaAbBAAAaababIAaaabaaaabbBBaabAAbABbbbaaABABaaabBbBBaBaaBBAbBAAAAAbBaBbBaAaAaBBbBBAAaBbaBABBbbbAaaBBaAbAAaBAAAAbAaabbaAbaabBbbbBBaRABbbaaBAbAaBaaAaAbAaAbbABbbbbBABBAbbaaabbbaaABABAAbABbbAaaabBBbbBBbaAaababbaAabBAabaBbAAAAbbBABbabaaaBAbabbbaBaaAbAbiaaaBbbAbAaAAabbbbBbabAabaBbbaAbbbaaabbAbaBBaBabaBBbBbaABBbbabaaBbaBaabaBAbBABbabAAAABbaBbbbabaABBaAaBBaAaBaaaAbBBBAaaBBAaAabAaBBbaAbaAaAaaBAaaBBbBAbbbbaBbBbABAbAAbbbaSbaaBaAaaABBaaaABBBaBBABBaAbbaaBbBabbaBAaBaaabBbAbbAbAAAAAAAABAaaBBbABabAabaaAaaaBoaAaLaaBaBBaaaABbBAKAbbAABaBABAbaBaaAbbAaAabABAAbBbaBbabbAaAabaBbAaBAABbBABaabABbAaAaAaAAAbAaAbbBbbbAaAbBAabaBbaABBABabAbBBBbBAbAbBAaAaaabABbaBabaAaBbBabBBbBaBAbBBAaBbAAaAABabbaBbaAAabBaaaaaBaaBaAABAaBbaBbAaAbaBAaBAbBBBXBbAAaaaAbAaABBABAabbaBbAbbABaaAAAAaAbBaAaBbabBBABaAbBABBbBbBABAAAAbBaabAaaAAbAaaAbAaAaAABBbbAAaAbbBBbCabBabaAVbABBBaBbabBbaAaBBBAaAAaaAbaBAbGaBABbAbbBBabABbBBAaBBBAbbaABabBaaabaaaAbaaBbbAAbAAAaAbabaaABbaBbBAaaabbaAbabBaAAbAgBBBAaAaAbBBBaAAabABaaBbAaBbbbaBbbbBBbBBBABBaaBAABBbbABAaBbAABAbABabbaAAbbABAbBaBAAbaAAABBbTAABbAAAaABBAAAaABbABaAaaaBAABaABAbBaaaaabBabAAbabBaBAaABbAAbaaabBAaaabBBBBBaaAaAbbAaaABAABBbbaaaaBbaBAAaaaAaAaABbBbAaBBBBbbaaabbBBabBbBABbAaBBbaaaBAAabaAaBabBaAAaBaabBAaaBaBbbNbbbBbbBabAaAabBBAAABaBbBBBaabbAAAaBaBAaabBAAbabbAAbaaAbABABaBaBBABAbBbBaAbbbAbBbAaBaBBaaaBBbaAAabABbaBAabBbbaaabaaAabAbBAbAAAAAAbAbAaAbbAaBaBbbbBAbBAAaAaabAaABaBbAAaabaaAaAabABaAabbBBABaBbAaBBBAaAbAAbabAAAaaBBABBBAaAbaaaAaAbbbBbaBBbABBaBaAABbABaAaaABbAaBaBbbaBBBAaaBAaABAABbBBBBbABaBbABababBBAabBbbBBbbaBBAAbbaAaBBAaAbbAaaABbABaABBBBaBBABAbaABBaAbbBabbgBbBAABAAAaBbbAAaAAaaBaBbgAaAaaAAbAbBAaABaaaBaBbBbaAAbbAaeABbaaBABBBbBabABbAbababaaaabbAbABabAaBaaBBaBaAaaAAABABaAabABBBbABabbBBAbaabbbAAbbBbaAbBBbaaaAbaABbBBabbbaAAaBBbAbbbbAAaaABAmbaaABBaaBBaaBabBBAAbAbAabbAaBAABAbBbAaAaaBABaaaABaSbaBbababaBaaAbbbaabBBbaaAbbaAAAabbbaBBBAAABbaaAbBAbbGbBBAaAabAaabAaaaAaaBbbBaAbBabBbbBbaAAbAbABbbbAaAAAbBBbabBaabBbABaAAabBabaabAUBbbbBBAAaaBAAbbAaBaaABabAAAAAaBbaRbBbAbABbAAAbBabBaABHAAbAAABabbabAaaABABaBbbaABBAabAbabBBbbabAaBabbBbabBbBaaBBbBabAaAbAbbabBBbBaAAabBAAaBAbAAaaBaAAAbaAbAAABBAABAbbBABBBAbabaAAbAaBAABBbAaAabbBaAbABAbBbAbaabBabAAbaAAaAAAaBAabAAaAbBAbabAbaBBbBAbBAbbaAbAbabaabbbabBBaABbaBabBaABbABBABABaAaAbBAaBAbAbbBBbabBbBabBBabbBBaBbAABbAaABAabbABBaabAbAbAAbbABAbBbaabbAbBAaBAABabbbbABaOaBbaBaABbbaaBABBBaABaAAaAaAAAbAbBAAABAbABBBAbababABbabAaaABAaBBAABAAaaAAaBBBbbaAbbabAAbBAAAbBBBBaabbAaaaaBbbaaAbBbABbaBAabBaBAAaAAABBaBbBAaAaaBBbbBbAaAabbaaABBBBBBaBABAbbaBBABbAAAbaaabAAbaaAAaAaBbbABaAaAbbaaAaBAaAbAAbaaAaBABBaBbaBaBbAAAaaABbaAAabAabbaaAabAaaAbaBbBAAaaAbbaaABAbbaaAAABaaABAAbABBabbaBBaBbAaBBabbbBAbAbabABBAbBBabaAbbabbABbaAaAaBBbBbbAbaBaAAbabABbabBabBaaABBBABABBBAaABabbBbBaAYafBbAbABBabaBABBbbaAAaAbBbabbaABabbAABBaBbABabAaaAAbaBbBbaAbAbBbbabAbbAbAabBbabbbbaABABBbaBABAabbaAAAbAabBabAaBbabBBbaAbBbbbBbAbaabaaAbbabbaBAaaAbbBAbaBAbbAaabgBaAbABbaaABAabaABaaabbaAABbabBBbbBbabaAABbAbBBAaabababbBAAAabbaaABbbabAbabbabaBBbbbAbaaaAbbABAaAaBABBBBaAAbbbbABAabABAbAbAaaaabABAbBaBBBbbBaBBAaABABbabBaACBbAaBbbbbBbbAaBBaBbbABbAaaAababaBaaAABaBAbBBabAbBBbBAbBABabAAABaAbaBaBAmAaAaabAAbAbbABbbbbBAABBbaaABbaAABBbBBBaaaaABbBaBABaABbbbaaAaBbaHAbbaaanbaaBBBbBabBbabaBBABBAbbaAbbbAAabABBBaBbAbaBabBAaaABBaAbaBbbAaBbABABBbbbbbBABaBAAaABaABbAbAaAaAAaABbabaABAaBbBBbbBbAaaBbBBaBbaBBBAAaAaAaaaaBAbbabBBAbaABabbabaBBaaABBbAaaaabaAbbababaabBabBBbBBababaBBBBABaAAAABbBaBBBbaaaABBbABbBbAbbABbababbBaAAAaBBbaBabAaAbbababABBBbbAaaBBbbbbABaaabbAabbaabBaaaaBbAABbaAbaBAbbaaAAaAaABBbBaBBbBABAbaAAAabBbbBAAAbaaAaABbbbBbABBaBaAbAaAAaABBbBaABbaaAAaaaABabaAaAABAaBBAaBBBbAABaAaBaBbBABABBBbBaAaBaAaaBaBaBAAabABbbbbbBAaAabAbAAbbAabbaABABaABAAABbbAbabaaBaabBABAaABBaaAAalbbbbAaBaABbBBBbbaAbbABbAAAabGBbbaBBbabbAaBabBbaBbaAbABaaaAbBBBbBBAaABAAaBAAbbaAAbBAAAAABbAAABBbAaBbbAAabAAbbBabAaaBAbaaBAaBbAbbAbBBaBbAbBBbBBaAAaAaBBAabbAbAbaAaAaBbBaabaBBBAbBAbbAAAbbBaBbbabAbaabABAAAbBbbaBbaaaabAaaABAAabbbBBaBbbabBAaBabAaAbBbBaaABbBbaAbabAbBaAaBabaBabaaBaaaAaaaabbbbaaBAabAabaaBBaBBbAAbbBAaBaABAbBBbBAaBaABbaaaBbaBBbBbaabBbaaAABAbbbbbAbbaBAaBAbaaBBABBaBAAAbBAbbBABbabBbABaBAAAbAbbbbaBbbABaababAAbaBAaABbAaAbbBAabaAAAaBAbAaAaaaBBbaaabAaBAaBbaaaaBbAABAbbababBBbAaABaABbaaBABbAbBaAABbBBABaAbBBqABAAbbbbBaBbBBabABAbaABAaBbabABBaaBbABBBBbaAaaBBBAAABaBAAabABBaaABABbAbbAabaaBAbaAaAABAbbabBbaABBAaaBBBBBAbAaBAAaaBbAAAbABBAbbAbbBbbBBBABaBAababABaAbbBBaBbbaaaaAabbBAABABaBbaabbaBaBBAAabBbAbbbaABABAaAaBBBbBbBABaaFBbAaBAAaAbabBBBAabaaAbbAbBAaAaABaAAaABaABaBbbBAaABAaaabAABBbAaBBABbaabaBAAAbBabBabAbBWbaBAaabbBAAAabaAAaBABbBbbbAAAaAababbbbBbbbubAAAbBaABBAAAabbAabBAbaaBABbbBAbBaBabBAAbLABbBAbaBbBaABbAAaBBBababbabbbaBbBBaAaBbbAbabbAabaAaaaBAaAAabbaaBAAaBaAbBBbbAaBBaAbbAAAaAAaaaAauBbaAabBbbbBbbbababAAaaBabBbBBABAaBbAABaABBAAaBaBAAaaAaaBBBbbABaBbbaBABBABaaBAbBaABbABABAabbaABbaABbABabAabABaBAbBbAaAAAabbABaBaAbbABBAabAbbbbbBbaaAbAaBbaBBBBBbbBaQBbAbBbbAaaBabbbbaaEaaaBBbBbbbAABAbbbABBBBbbaBaBBBAAAbABAbBAbaBbaBAAAbbBaABBBabABAaaBAAAaabbaAaABbBbBbaBaBABAaaBBbBbbBAAAbABAaAaabbABABBAABAabAAAABAbbAabbbBbabaabbabbAbbBAbbaAaBAbaBAAAaBAbaAbAbbiBbAbaABaBAbbbBbBaabbAABbabaaaABAbaaAaaAaBBbbAABaBbabAbAABBAABbAAbBBAbABaAaBabbAaaaBtABaBAbAbBAaBBaBbBBAaabbBATAbaBBbAbAbaBAaabbbAaBBabBAABBAAaBMaBbbabAaaBbbaBaaAaAaAaabBabBaaAbabYbBbXaBBbBbbDbbAbbaBBbbAaBBbBaBABBabaBaBABbBaaBabBbBbabbaaAAABaabBbAbAzaabBbBaaAbbBBBaAbbBABbAAABaBBaABaaaBaaAABABaAABAaaAbBAAABababAAABBbaABABAaABBBbabbYbaAaBbBbbaBbbABaabAabBbbBaBabBAaBAbaBaabBBBaBBaAAbaBABbbAbabaaaBBBbbaAabABabBBABBAbbabBbbanABBAabaAABbAAaaBbBaababBbABaBbAabAbBABBBAabBAaabAbabBabAbAbaABBAaAbbBbabbbBBbABABAbBbAabbBABaBAabBaBBBaaaaAABiBabAAAbabbAAbaBbABBAAaBbBbBaBAAbbaBAAaAAaBaAabABABaBbabABAbbbaABBaaabBbaabbBaAaaabBAbaaaaLbBAABAABaaAbbBaaAbaBaBBBAbbaBBbabAAABBbbAAAAaAABAAbabbbbAAbabaBaAABBaabBAaaBbBAbAaaabbaBABabABBBaAaBBbabbaAAabAbBbBaAaaaAbAbABBAbaBBBaAaAbbbaBBbbBBAbbaAaAaaAaAABaBAAbaABBaabbBaaaAaBBbIbbbbBabaAAbABaBbaBBBAbbAbabBAAAbBAaAbAAAabaaABAabAAAaWaAAaaBAaAaAABaBbbaAbbbBBaaAabBbaAABaAaBAAbBaaaBbBaaBabBbBbbBAbABAabAaAAabBBaabaBbaAabaaAbBABaBaBBnAaAaBbAbBabbbBBbaaaBbABAAAbAbAbbaABBAAbbbABAAbABbBAabBbabaaAbBAbbaaAaBabbbABBbBABaBbbAAaABBbBBbBabaBBABBbbbBaabaBaaaabBaaBAbaABBBAAaBbbAaABaBBBbBbaabBbbAbbAaAbbBabbBABaAABbBbAAAAaaAABABbBBAbABAABBbBaaBbBbAbAbaaAbBBBBaBAAabaABAbAaBAAaAaABABBaAbBBBBbbbBbbaabBBbbBAaaAabbbaAaAbBaaBBBabbAaBAbbbbAbAABABABBaBAbbbAAAAAbaAbBBAAbBbbBbaABBbAAbABaABBaaBABBaaBAaBaababABaaABAAgAaBAaAbAabABABVABabAaaBbBAAbabbbbbBAAbbbAaAAABAabbAaBAaAbaaBbaBbbbAbaaBAbaaBbBaBBABaabaBbABaAABBBaaaAbabBbBaBbaaAAAbAaAAAbaabbyBbbBbbaABaABBAbbabbaAAAaabaAAbAaAAaaBabbaBBbBBaAAbBbAbbAbAAaaaBbaABBAAaBbaaAbbAAabbaaaBBBbaaAbBbABABBAAaAaAABAbbBAaaBBAaBbbBBaaaAbaaBBAaAabABBbAabAbaAabBbbBaAABBbAabaaaBAbaaAbabaBabBaVABBAAaaAAaBBAAbaAaabAbbaAabbbAAbaABaABABaABAABBABBaAaAABabBbABqbBaBBbAABABbAABaaAaAaaAaaBaAAAabAabbaAaBBaABaBAzaBBbBAiAaBabaABAabaABaaBbbbaaBBAbbAAbBBAAAAAAaAbbabaBbBABABBAaaAABBBAaabbabbbbABaaabBaAaBABBbBbAAaBaAbBbBAaBBBAABbBAaaAABBbAAbbbBAaBbBBaBbBAABBbBAaAABBbbbBAABAawBAaBAbBBBBABBABbBaBBbaBbBBBABAbBbBABaAAbBAbbBaBbBbABaBbBAbAABababAabaaABAaaaabbaBbaaabaaeaBaaAaaaaaBaAbsAaBabbAaAabAAbABbaAABaabaAaBABAAbbBbaBAaAbbBABAAaBAaaaAAbBBABBbABBAbBaaaAABABAabbaBaBAbAaABaBBAABBAAbAbABBAAABBbbaaabBBAabBAaUaBbabABABabbaBbABaBBABAAbBAAaBbaAbABBaAaBBBbbAbbBbaAaAaBbBaaBBbAAabBaBABABaaAbbbVaABAbaBaBaaAbAbAbABbAAAbAbAAAbbBBBBbBBbBaaAkBaBAaaBbBabBAAbbabaAaaBaBaABAbbBAAbAAAAaAabBbaAbaaaAbaBBBbBbaBaBbabBAaaBaabAaAABbbBBBAbbbbABBbABABbBbaBBbABBaAbAbAAbAbAAbAabBABabBaaABaBoBBbAaBaBABABAAabBbAABAAabABaBABaBBbaABbBAaAaAbbbbABBBaBABAbbaAAbBbAbBBaaB";

        System.out.print((new Sort_Characters_By_Frequency()).frequencySort(s));
    }

}

347. Top K Frequent Elements

Given a non-empty array of integers, return the k most frequent elements.

For example,
Given [1,1,1,2,2,3] and k = 2, return [1,2].

Note: 
You may assume k is always valid, 1 ≤ k ≤ number of unique elements.
Your algorithm's time complexity must be better than O(n log n), where n is the array's size.
package com.leetcode.array;

import java.util.*;

public class Top_K_Frequent_Elements {
    public List<Integer> topKFrequent(int[] nums, int k) {
        // 使用 map 统计 nums 中数字出现的频数
        Map<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }

        // 根据数字出现的频数,将 map 中的 key 丢进 桶中 bucket
        // bucket[] 的下标表示 key 出现的频数
        Set<Integer>[] bucket = new HashSet[nums.length + 1];
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            if (bucket[entry.getValue()] == null) {
                bucket[entry.getValue()] = new HashSet<>();
            }
            bucket[entry.getValue()].add(entry.getKey());
        }

        // 将 前 k 大的数组放入 result 中
        List<Integer> result = new ArrayList<>();
        int count = 0;
        for (int i = bucket.length - 1; i >= 0; i--) {
            if (bucket[i] != null) {
                for (Integer num: bucket[i]){
                    if (count >= k)
                        break;
                    result.add(num);
                    count++;
                }
            }
        }

        return result;
    }

    public static void main(String[] args) {
//        int[] arr = {1, 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, 2, 2, 2, 2, 6, 5, 4, 43, 23, 2, 2, 1, 23, 2, 2, 1, 3, 2};
//        int[] arr ={1};   // 注意桶的大小
//        int k = 1;

        int[] arr = {4, 1, -1, 2, -1, 2, 3};
        int k = 2;
        // -1 2 1 3 4  输出错误!应该还是 -1,2

        List<Integer> result = (new Top_K_Frequent_Elements()).topKFrequent(arr, k);
        for (Integer num : result)
            System.out.print(num + " ");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值