Chapter 1 - Write Your First Genetic Algorithm
Introduction
Optimization is the practice of making the best possible decisions in a situation. You can think of optimization as the search for the best.
Optimization algorithms are techniques for solve optimization problems. Problems where your goal is to find the best of something.
Understanding Genetic Algorithms
Genetic algorithms are a class of optimization algorithms based on evolution and natural section. they use strategies loosely based on genetics and biology to produce optimal (the best or near-optimal) solutions to complicated problems.
At the core, optimization problems are search problems. Search problems require you to navigate an area, like a maze, to find an objective, like the end of the maze. Optimization problems are basically the same thing, only there are multiple possible solutions.
Two basic approaches are used for search problems:
- brute-force search
- informed search
Informed search relies on a search strategy. You make smart decisions based on the available information.
In brute-force search, you iterate over every possible solution linearly. Brute-force searches use no knowledge of the search area to make decisions.
The key to informed search and thus optimization techniques, like genetic algorithms, lies in how they balance exploration versus exploitation.
Use Crossover to Exploit
In the scenario: You find yourself lost in the woods without a map or compass. how would you navigate out of the woods?
For brute-force strategy, walk in circles around every tree, hoping you make it back to civilization before you get too tired.
For informed strategy, to exploit or take advantage of the information available to you.
Example:
- Perhaps you know that the nearest town is north.
- Find out north based off on the position of the sun.
Crossover is how genetic algorithms exploit in search. Crossover is the process of creating new child solutions from parent solutions.
the iea is that the strongest solutions have characteristics that make them strong. These characteristics are call schemas. Schemas are building blocks of fit solutions.
Use Mutation to explore
To explore in search is to try new, random paths to see if they produce a better outcome. This concept of getting stuck in the same place in the search space is parallel to a common pitfall in optimization problems known as premature convergence. It’s easy for genetic algorithms to get stuck in one party of a search space because some solutions appear to be good enough - even though better solutions exist.
Mutation is how genetic algorithms explore. It is not enough to simply keep trying to build new solutions from previous ones, which is essentially the same as trying the same path over and over again. Mutation introduces randomness into the algorithms. The goal is to slightly alter some aspect of the previous solutions to create newer solutions, which may lead to newer, better paths.
The effectiveness of the genetic algorithms largely replies on how you balance exploitation versus exploration. Favoring one over the other has mertis. Often time you don’t know much about a search space, it’s best to favor exploration first and then slowly shift toward exploiting the information you already know.
Introducing the One-Max Problem
Question
What is the maximum sum of a bitstring (a string consisting of only 1s and 0s) of length N?
Answers
The maximum sum of a bitstring of length N is N.
Brute-force search
Needing to search through $2^N$ different solutions. What happens if you want to use this technique for bitstrings of length 40?
$2^{40} = 1,099,511,627,776$
| Genetic algorithms work via transformations on populations of | chromosomes over some number of generations.
Example:
Imagine you’re playing a car game where your goal is to get the highest possible card after some number of turns. You are initially given five cards and you can choose to keep any number of cards at the end of every turn.
- A single card is a chromosome. It represents one solution to your problem.
- Your entire hand is the population. It’s a collection of possible solutions.
- The changes you make to your hand after every turn are transformations.
- Finally, every turn represents one generation - one transformation of the population.
Initializing the Population
The number of chromosomes in your populations is irrelevant. A larger population means you’re currently looking at a larger area of the search space.
Typically, the more chromosomes you have, the longer it takes to perform transformations on the entire population.
Conversely, the fewer chromosomes you have, the longer it takes to produce a viable solution to the problem and the more susceptible your population is to premature convergence.
For this example problem, a population size of 100 strikes a nice balance between the two.
Understanding Population Size
In a traditional search method like depth-first search or breadth-frist search, you examine one solution at a time and determine where to go next. Even in other informed search algorithms like A* or uniform-cost search, you examine one solution at a time. Genetic algorithms examine many solutions at once, ruling out large areas of the search space after every generation. The population size dictates the size of the area of the search space you’re looking at.
Understanding the Flow of Genetic Algorithms
The process repeats itself. Genetic algorithms are recursive meaning the algorithm repeats itself over and over until it hits a termination point.
import IEx.Helpers
import ExUnit.Assertions
ExUnit.Assertions
select_best = fn population ->
Enum.max_by(population, &Enum.sum/1)
end
assert select_best.([[1, 2, 3], [1, 2, 4]]) == [1, 2, 4]
true
Evaluating the Population
This function represents Step 2 in the genetic algorithm. This function takes population, evaluates each chromosome based on a fitness function and sorts the population based on each chromosome’s fitness.
Fitness is simply a heuristic that tells you how good or bad a solution is - a fitness function calculates this fitness for you.
In this problem, the fitness of a chromosome is represented by the sum of bitstring.
evaluate = fn population ->
population
|> Enum.sort_by(&Enum.sum/1, &>=/2)
end
assert evaluate.([
[1, 2, 3],
[2, 3, 4],
[3, 1, 5],
[1, 2, 0]
]) == [[2, 3, 4], [3, 1, 5], [1, 2, 3], [1, 2, 0]]
true
Selecting Parents
This step of selecting the parents for reproduction is referred to as selection. Selection is the process of picking the parents that will be combined to create new solutions.
The goal of selection is to pick some parents that can easily be combined to create better solutions.
For this problem, the result of the selection
function to be
formatted nicely for crossover
. The selection
function should
return a list of tuples consisting of a pair of parents to be combined.
selection = fn population ->
population
|> Enum.chunk_every(2)
|> Enum.map(&List.to_tuple(&1))
end
assert selection.([
[2, 3, 4],
[3, 1, 5],
[1, 2, 3],
[1, 2, 0]
]) == [{[2, 3, 4], [3, 1, 5]}, {[1, 2, 3], [1, 2, 0]}]
true
Crossover
Crossover is analogous to reproduction. It’s genetic operator that takes two or more parent chromosomes and produces two or more child chromosomes.
In this problem, every pair of parents are splitted at the random point selected. the chromosomes are then recombined with the tails swapped. This is known as single-point crossover and is one of the simplest crossover method used.
crossover = fn population, size ->
population
|> Enum.reduce([], fn {p1, p2}, acc ->
cx_point = :rand.uniform(size)
{h1, t1} = Enum.split(p1, cx_point)
{h2, t2} = Enum.split(p2, cx_point)
[h1 ++ t2, h2 ++ t1 | acc]
end)
end
crossover.(
[
{[2, 3, 4], [3, 1, 5]},
{[1, 2, 3], [1, 2, 0]}
],
3
)
[[1, 2, 0], [1, 2, 3], [2, 3, 5], [3, 1, 4]]
Adding Mutation
Despite initializing your population to a seemingly random distribution, eventually the parents got too genetically similar to make any improvements during crossover.
This illustrates the importance of including the mutation step in your algorithm and how vital exploration is to informed search techniques.
mutate = fn
chromosome, chance, threshold when chance < threshold ->
Enum.shuffle(chromosome)
chromosome, _, _ ->
chromosome
end
mutation = fn population, threshold ->
population
|> Enum.map(&mutate.(&1, :rand.uniform(), threshold))
end
#Function<43.65746770/2 in :erl_eval.expr/5>
inform = fn vector ->
value =
vector
|> Enum.sum()
|> Integer.to_string()
message = "Current Best: " <> value <> "\n"
IO.write(message)
end
algorithm = fn population, algorithm ->
best = select_best.(population)
inform.(best)
if Enum.sum(best) === 1000 do
best
else
population
|> evaluate.()
|> selection.()
|> crossover.(1000)
|> mutation.(0.5)
|> algorithm.(algorithm)
end
end
#Function<43.65746770/2 in :erl_eval.expr/5>
Run the Algorithm
population = fn chromosome_size, population_size ->
for _ <- 1..population_size, do: for(_ <- 1..chromosome_size, do: Enum.random(0..1))
end
#Function<43.65746770/2 in :erl_eval.expr/5>
solution = algorithm.(population.(1000, 100), algorithm)
IO.write("\nAnswer is \n")
Current Best: 534
Current Best: 560
Current Best: 564
Current Best: 555
Current Best: 560
Current Best: 564
Current Best: 562
Current Best: 558
Current Best: 571
Current Best: 564
Current Best: 565
Current Best: 569
Current Best: 573
Current Best: 579
Current Best: 576
Current Best: 576
Current Best: 576
Current Best: 579
Current Best: 588
Current Best: 585
Current Best: 596
Current Best: 590
Current Best: 596
Current Best: 598
Current Best: 611
Current Best: 613
Current Best: 609
Current Best: 613
Current Best: 626
Current Best: 636
Current Best: 628
Current Best: 619
Current Best: 619
Current Best: 620
Current Best: 623
Current Best: 622
Current Best: 643
Current Best: 629
Current Best: 640
Current Best: 636
Current Best: 632
Current Best: 639
Current Best: 645
Current Best: 635
Current Best: 641
Current Best: 639
Current Best: 641
Current Best: 636
Current Best: 640
Current Best: 657
Current Best: 650
Current Best: 645
Current Best: 645
Current Best: 640
Current Best: 644
Current Best: 643
Current Best: 644
Current Best: 654
Current Best: 652
Current Best: 661
Current Best: 660
Current Best: 656
Current Best: 663
Current Best: 658
Current Best: 659
Current Best: 656
Current Best: 659
Current Best: 671
Current Best: 664
Current Best: 667
Current Best: 677
Current Best: 667
Current Best: 664
Current Best: 662
Current Best: 663
Current Best: 664
Current Best: 662
Current Best: 665
Current Best: 673
Current Best: 671
Current Best: 676
Current Best: 678
Current Best: 680
Current Best: 674
Current Best: 679
Current Best: 674
Current Best: 683
Current Best: 672
Current Best: 671
Current Best: 672
Current Best: 674
Current Best: 674
Current Best: 682
Current Best: 683
Current Best: 687
Current Best: 698
Current Best: 694
Current Best: 696
Current Best: 696
Current Best: 695
Current Best: 707
Current Best: 712
Current Best: 700
Current Best: 696
Current Best: 696
Current Best: 695
Current Best: 704
Current Best: 700
Current Best: 706
Current Best: 696
Current Best: 696
Current Best: 703
Current Best: 696
Current Best: 695
Current Best: 697
Current Best: 707
Current Best: 697
Current Best: 697
Current Best: 712
Current Best: 719
Current Best: 714
Current Best: 706
Current Best: 713
Current Best: 709
Current Best: 721
Current Best: 717
Current Best: 714
Current Best: 708
Current Best: 710
Current Best: 718
Current Best: 712
Current Best: 714
Current Best: 717
Current Best: 715
Current Best: 711
Current Best: 716
Current Best: 728
Current Best: 726
Current Best: 717
Current Best: 724
Current Best: 716
Current Best: 728
Current Best: 728
Current Best: 724
Current Best: 722
Current Best: 718
Current Best: 717
Current Best: 726
Current Best: 726
Current Best: 727
Current Best: 729
Current Best: 734
Current Best: 724
Current Best: 727
Current Best: 719
Current Best: 720
Current Best: 726
Current Best: 725
Current Best: 733
Current Best: 730
Current Best: 727
Current Best: 727
Current Best: 730
Current Best: 733
Current Best: 730
Current Best: 732
Current Best: 731
Current Best: 736
Current Best: 741
Current Best: 735
Current Best: 749
Current Best: 733
Current Best: 747
Current Best: 741
Current Best: 740
Current Best: 734
Current Best: 735
Current Best: 735
Current Best: 742
Current Best: 743
Current Best: 734
Current Best: 747
Current Best: 735
Current Best: 740
Current Best: 744
Current Best: 752
Current Best: 735
Current Best: 733
Current Best: 739
Current Best: 738
Current Best: 742
Current Best: 744
Current Best: 737
Current Best: 753
Current Best: 747
Current Best: 754
Current Best: 749
Current Best: 743
Current Best: 751
Current Best: 745
Current Best: 745
Current Best: 745
Current Best: 748
Current Best: 747
Current Best: 749
Current Best: 748
Current Best: 746
Current Best: 744
Current Best: 743
Current Best: 752
Current Best: 752
Current Best: 754
Current Best: 753
Current Best: 752
Current Best: 749
Current Best: 750
Current Best: 753
Current Best: 760
Current Best: 762
Current Best: 756
Current Best: 767
Current Best: 759
Current Best: 762
Current Best: 765
Current Best: 762
Current Best: 753
Current Best: 758
Current Best: 753
Current Best: 755
Current Best: 753
Current Best: 766
Current Best: 758
Current Best: 772
Current Best: 759
Current Best: 756
Current Best: 755
Current Best: 760
Current Best: 758
Current Best: 762
Current Best: 757
Current Best: 761
Current Best: 764
Current Best: 762
Current Best: 761
Current Best: 759
Current Best: 761
Current Best: 767
Current Best: 776
Current Best: 779
Current Best: 759
Current Best: 788
Current Best: 771
Current Best: 794
Current Best: 781
Current Best: 778
Current Best: 774
Current Best: 770
Current Best: 773
Current Best: 783
Current Best: 779
Current Best: 769
Current Best: 770
Current Best: 770
Current Best: 770
Current Best: 773
Current Best: 772
Current Best: 774
Current Best: 770
Current Best: 777
Current Best: 773
Current Best: 777
Current Best: 775
Current Best: 777
Current Best: 780
Current Best: 775
Current Best: 772
Current Best: 774
Current Best: 770
Current Best: 774
Current Best: 769
Current Best: 769
Current Best: 782
Current Best: 773
Current Best: 774
Current Best: 778
Current Best: 770
Current Best: 778
Current Best: 776
Current Best: 775
Current Best: 775
Current Best: 777
Current Best: 783
Current Best: 785
Current Best: 771
Current Best: 773
Current Best: 771
Current Best: 773
Current Best: 783
Current Best: 785
Current Best: 794
Current Best: 777
Current Best: 783
Current Best: 780
Current Best: 774
Current Best: 775
Current Best: 779
Current Best: 782
Current Best: 779
Current Best: 794
Current Best: 786
Current Best: 790
Current Best: 788
Current Best: 792
Current Best: 790
Current Best: 783
Current Best: 783
Current Best: 790
Current Best: 793
Current Best: 789
Current Best: 787
Current Best: 785
Current Best: 788
Current Best: 787
Current Best: 790
Current Best: 787
Current Best: 788
Current Best: 788
Current Best: 787
Current Best: 810
Current Best: 807
Current Best: 801
Current Best: 797
Current Best: 805
Current Best: 804
Current Best: 800
Current Best: 800
Current Best: 791
Current Best: 790
Current Best: 789
Current Best: 790
Current Best: 792
Current Best: 790
Current Best: 797
Current Best: 798
Current Best: 805
Current Best: 805
Current Best: 803
Current Best: 805
Current Best: 794
Current Best: 793
Current Best: 800
Current Best: 805
Current Best: 803
Current Best: 797
Current Best: 806
Current Best: 800
Current Best: 809
Current Best: 804
Current Best: 809
Current Best: 797
Current Best: 817
Current Best: 803
Current Best: 802
Current Best: 803
Current Best: 799
Current Best: 805
Current Best: 806
Current Best: 808
Current Best: 808
Current Best: 802
Current Best: 803
Current Best: 809
Current Best: 803
Current Best: 807
Current Best: 807
Current Best: 802
Current Best: 804
Current Best: 808
Current Best: 799
Current Best: 802
Current Best: 804
Current Best: 805
Current Best: 815
Current Best: 812
Current Best: 813
Current Best: 804
Current Best: 804
Current Best: 800
Current Best: 803
Current Best: 804
Current Best: 803
Current Best: 805
Current Best: 803
Current Best: 805
Current Best: 802
Current Best: 814
Current Best: 806
Current Best: 814
Current Best: 818
Current Best: 802
Current Best: 805
Current Best: 818
Current Best: 814
Current Best: 808
Current Best: 826
Current Best: 810
Current Best: 818
Current Best: 811
Current Best: 808
Current Best: 813
Current Best: 815
Current Best: 816
Current Best: 813
Current Best: 812
Current Best: 814
Current Best: 811
Current Best: 816
Current Best: 814
Current Best: 817
Current Best: 822
Current Best: 825
Current Best: 823
Current Best: 824
Current Best: 812
Current Best: 817
Current Best: 819
Current Best: 819
Current Best: 819
Current Best: 812
Current Best: 825
Current Best: 825
Current Best: 828
Current Best: 814
Current Best: 816
Current Best: 814
Current Best: 816
Current Best: 814
Current Best: 814
Current Best: 814
Current Best: 813
Current Best: 813
Current Best: 816
Current Best: 817
Current Best: 823
Current Best: 823
Current Best: 818
Current Best: 819
Current Best: 822
Current Best: 828
Current Best: 825
Current Best: 820
Current Best: 818
Current Best: 820
Current Best: 822
Current Best: 824
Current Best: 828
Current Best: 822
Current Best: 827
Current Best: 820
Current Best: 820
Current Best: 821
Current Best: 820
Current Best: 834
Current Best: 837
Current Best: 826
Current Best: 829
Current Best: 831
Current Best: 831
Current Best: 824
Current Best: 829
Current Best: 831
Current Best: 826
Current Best: 822
Current Best: 825
Current Best: 829
Current Best: 829
Current Best: 831
Current Best: 826
Current Best: 839
Current Best: 827
Current Best: 826
Current Best: 827
Current Best: 833
Current Best: 834
Current Best: 830
Current Best: 831
Current Best: 832
Current Best: 838
Current Best: 831
Current Best: 833
Current Best: 837
Current Best: 839
Current Best: 837
Current Best: 833
Current Best: 846
Current Best: 846
Current Best: 847
Current Best: 833
Current Best: 844
Current Best: 841
Current Best: 839
Current Best: 836
Current Best: 836
Current Best: 835
Current Best: 845
Current Best: 847
Current Best: 846
Current Best: 840
Current Best: 844
Current Best: 840
Current Best: 843
Current Best: 843
Current Best: 845
Current Best: 846
Current Best: 841
Current Best: 838
Current Best: 836
Current Best: 838
Current Best: 837
Current Best: 837
Current Best: 840
Current Best: 839
Current Best: 840
Current Best: 845
Current Best: 841
Current Best: 841
Current Best: 839
Current Best: 837
Current Best: 838
Current Best: 837
Current Best: 837
Current Best: 838
Current Best: 840
Current Best: 837
Current Best: 837
Current Best: 839
Current Best: 841
Current Best: 838
Current Best: 839
Current Best: 838
Current Best: 839
Current Best: 839
Current Best: 853
Current Best: 853
Current Best: 847
Current Best: 847
Current Best: 847
Current Best: 851
Current Best: 861
Current Best: 854
Current Best: 848
Current Best: 850
Current Best: 852
Current Best: 856
Current Best: 859
Current Best: 847
Current Best: 847
Current Best: 853
Current Best: 850
Current Best: 846
Current Best: 849
Current Best: 851
Current Best: 850
Current Best: 851
Current Best: 850
Current Best: 848
Current Best: 844
Current Best: 855
Current Best: 845
Current Best: 859
Current Best: 850
Current Best: 852
Current Best: 852
Current Best: 855
Current Best: 862
Current Best: 847
Current Best: 854
Current Best: 853
Current Best: 849
Current Best: 849
Current Best: 848
Current Best: 854
Current Best: 855
Current Best: 852
Current Best: 850
Current Best: 851
Current Best: 851
Current Best: 851
Current Best: 854
Current Best: 858
Current Best: 852
Current Best: 852
Current Best: 852
Current Best: 852
Current Best: 866
Current Best: 848
Current Best: 864
Current Best: 864
Current Best: 854
Current Best: 862
Current Best: 860
Current Best: 863
Current Best: 864
Current Best: 869
Current Best: 862
Current Best: 861
Current Best: 853
Current Best: 856
Current Best: 855
Current Best: 855
Current Best: 855
Current Best: 854
Current Best: 860
Current Best: 853
Current Best: 859
Current Best: 854
Current Best: 857
Current Best: 864
Current Best: 855
Current Best: 862
Current Best: 855
Current Best: 859
Current Best: 856
Current Best: 861
Current Best: 868
Current Best: 861
Current Best: 860
Current Best: 856
Current Best: 857
Current Best: 855
Current Best: 857
Current Best: 856
Current Best: 864
Current Best: 854
Current Best: 855
Current Best: 859
Current Best: 858
Current Best: 857
Current Best: 856
Current Best: 862
Current Best: 857
Current Best: 854
Current Best: 858
Current Best: 862
Current Best: 858
Current Best: 861
Current Best: 860
Current Best: 857
Current Best: 856
Current Best: 856
Current Best: 854
Current Best: 858
Current Best: 861
Current Best: 861
Current Best: 857
Current Best: 859
Current Best: 870
Current Best: 869
Current Best: 869
Current Best: 868
Current Best: 860
Current Best: 860
Current Best: 859
Current Best: 858
Current Best: 857
Current Best: 868
Current Best: 860
Current Best: 865
Current Best: 868
Current Best: 868
Current Best: 871
Current Best: 871
Current Best: 859
Current Best: 860
Current Best: 861
Current Best: 859
Current Best: 863
Current Best: 858
Current Best: 862
Current Best: 859
Current Best: 864
Current Best: 863
Current Best: 869
Current Best: 861
Current Best: 872
Current Best: 871
Current Best: 875
Current Best: 865
Current Best: 866
Current Best: 865
Current Best: 878
Current Best: 865
Current Best: 863
Current Best: 861
Current Best: 868
Current Best: 867
Current Best: 864
Current Best: 862
Current Best: 868
Current Best: 867
Current Best: 864
Current Best: 871
Current Best: 864
Current Best: 861
Current Best: 863
Current Best: 864
Current Best: 869
Current Best: 862
Current Best: 868
Current Best: 864
Current Best: 864
Current Best: 867
Current Best: 862
Current Best: 867
Current Best: 862
Current Best: 870
Current Best: 875
Current Best: 861
Current Best: 862
Current Best: 865
Current Best: 862
Current Best: 866
Current Best: 861
Current Best: 864
Current Best: 868
Current Best: 863
Current Best: 865
Current Best: 863
Current Best: 865
Current Best: 870
Current Best: 868
Current Best: 867
Current Best: 869
Current Best: 874
Current Best: 867
Current Best: 878
Current Best: 872
Current Best: 874
Current Best: 871
Current Best: 871
Current Best: 876
Current Best: 874
Current Best: 871
Current Best: 869
Current Best: 870
Current Best: 872
Current Best: 869
Current Best: 870
Current Best: 869
Current Best: 870
Current Best: 885
Current Best: 882
Current Best: 878
Current Best: 876
Current Best: 880
Current Best: 875
Current Best: 876
Current Best: 878
Current Best: 879
Current Best: 882
Current Best: 881
Current Best: 887
Current Best: 875
Current Best: 876
Current Best: 883
Current Best: 881
Current Best: 885
Current Best: 878
Current Best: 883
Current Best: 877
Current Best: 892
Current Best: 878
Current Best: 877
Current Best: 878
Current Best: 879
Current Best: 880
Current Best: 876
Current Best: 876
Current Best: 876
Current Best: 877
Current Best: 878
Current Best: 888
Current Best: 891
Current Best: 882
Current Best: 889
Current Best: 886
Current Best: 885
Current Best: 886
Current Best: 882
Current Best: 881
Current Best: 881
Current Best: 878
Current Best: 894
Current Best: 890
Current Best: 893
Current Best: 891
Current Best: 892
Current Best: 891
Current Best: 888
Current Best: 886
Current Best: 895
Current Best: 898
Current Best: 886
Current Best: 889
Current Best: 890
Current Best: 895
Current Best: 888
Current Best: 893
Current Best: 886
Current Best: 892
Current Best: 890
Current Best: 890
Current Best: 892
Current Best: 887
Current Best: 886
Current Best: 891
Current Best: 886
Current Best: 896
Current Best: 896
Current Best: 892
Current Best: 892
Current Best: 890
Current Best: 893
Current Best: 889
Current Best: 894
Current Best: 886
Current Best: 887
Current Best: 889
Current Best: 886
Current Best: 888
Current Best: 887
Current Best: 887
Current Best: 890
Current Best: 886
Current Best: 890
Current Best: 893
Current Best: 891
Current Best: 887
Current Best: 892
Current Best: 897
Current Best: 891
Current Best: 893
Current Best: 897
Current Best: 901
Current Best: 894
Current Best: 894
Current Best: 890
Current Best: 892
Current Best: 890
Current Best: 890
Current Best: 892
Current Best: 890
Current Best: 891
Current Best: 890
Current Best: 891
Current Best: 889
Current Best: 889
Current Best: 889
Current Best: 894
Current Best: 895
Current Best: 892
Current Best: 896
Current Best: 888
Current Best: 887
Current Best: 887
Current Best: 891
Current Best: 891
Current Best: 890
Current Best: 895
Current Best: 896
Current Best: 902
Current Best: 891
Current Best: 888
Current Best: 889
Current Best: 893
Current Best: 892
Current Best: 890
Current Best: 891
Current Best: 890
Current Best: 897
Current Best: 895
Current Best: 892
Current Best: 890
Current Best: 890
Current Best: 888
Current Best: 891
Current Best: 896
Current Best: 892
Current Best: 892
Current Best: 889
Current Best: 892
Current Best: 894
Current Best: 897
Current Best: 890
Current Best: 895
Current Best: 891
Current Best: 892
Current Best: 889
Current Best: 891
Current Best: 895
Current Best: 891
Current Best: 901
Current Best: 900
Current Best: 903
Current Best: 906
Current Best: 897
Current Best: 894
Current Best: 901
Current Best: 901
Current Best: 899
Current Best: 898
Current Best: 899
Current Best: 891
Current Best: 891
Current Best: 893
Current Best: 890
Current Best: 892
Current Best: 898
Current Best: 901
Current Best: 899
Current Best: 896
Current Best: 898
Current Best: 896
Current Best: 900
Current Best: 899
Current Best: 895
Current Best: 903
Current Best: 898
Current Best: 908
Current Best: 899
Current Best: 897
Current Best: 904
Current Best: 905
Current Best: 899
Current Best: 900
Current Best: 906
Current Best: 901
Current Best: 898
Current Best: 901
Current Best: 902
Current Best: 899
Current Best: 897
Current Best: 897
Current Best: 901
Current Best: 896
Current Best: 899
Current Best: 901
Current Best: 897
Current Best: 905
Current Best: 897
Current Best: 896
Current Best: 901
Current Best: 909
Current Best: 897
Current Best: 898
Current Best: 904
Current Best: 902
Current Best: 900
Current Best: 903
Current Best: 898
Current Best: 898
Current Best: 897
Current Best: 898
Current Best: 899
Current Best: 898
Current Best: 897
Current Best: 899
Current Best: 902
Current Best: 902
Current Best: 908
Current Best: 904
Current Best: 904
Current Best: 903
Current Best: 903
Current Best: 901
Current Best: 905
Current Best: 912
Current Best: 906
Current Best: 901
Current Best: 906
Current Best: 903
Current Best: 900
Current Best: 901
Current Best: 900
Current Best: 900
Current Best: 900
Current Best: 903
Current Best: 903
Current Best: 903
Current Best: 906
Current Best: 902
Current Best: 906
Current Best: 902
Current Best: 900
Current Best: 899
Current Best: 900
Current Best: 903
Current Best: 904
Current Best: 901
Current Best: 904
Current Best: 906
Current Best: 901
Current Best: 898
Current Best: 900
Current Best: 902
Current Best: 898
Current Best: 899
Current Best: 899
Current Best: 905
Current Best: 902
Current Best: 898
Current Best: 905
Current Best: 903
Current Best: 903
Current Best: 905
Current Best: 906
Current Best: 906
Current Best: 907
Current Best: 915
Current Best: 911
Current Best: 905
Current Best: 915
Current Best: 913
Current Best: 911
Current Best: 907
Current Best: 907
Current Best: 907
Current Best: 910
Current Best: 905
Current Best: 903
Current Best: 909
Current Best: 912
Current Best: 916
Current Best: 916
Current Best: 918
Current Best: 907
Current Best: 909
Current Best: 907
Current Best: 912
Current Best: 910
Current Best: 909
Current Best: 916
Current Best: 913
Current Best: 907
Current Best: 910
Current Best: 909
Current Best: 909
Current Best: 919
Current Best: 921
Current Best: 913
Current Best: 932
Current Best: 921
Current Best: 919
Current Best: 922
Current Best: 921
Current Best: 917
Current Best: 921
Current Best: 914
Current Best: 915
Current Best: 922
Current Best: 922
Current Best: 923
Current Best: 917
Current Best: 914
Current Best: 914
Current Best: 917
Current Best: 917
Current Best: 915
Current Best: 910
Current Best: 915
Current Best: 917
Current Best: 913
Current Best: 912
Current Best: 918
Current Best: 924
Current Best: 918
Current Best: 914
Current Best: 921
Current Best: 915
Current Best: 915
Current Best: 913
Current Best: 917
Current Best: 911
Current Best: 912
Current Best: 914
Current Best: 916
Current Best: 914
Current Best: 916
Current Best: 915
Current Best: 917
Current Best: 913
Current Best: 917
Current Best: 918
Current Best: 913
Current Best: 926
Current Best: 927
Current Best: 916
Current Best: 913
Current Best: 925
Current Best: 922
Current Best: 918
Current Best: 922
Current Best: 913
Current Best: 915
Current Best: 915
Current Best: 917
Current Best: 917
Current Best: 921
Current Best: 924
Current Best: 925
Current Best: 920
Current Best: 916
Current Best: 916
Current Best: 916
Current Best: 916
Current Best: 918
Current Best: 922
Current Best: 919
Current Best: 925
Current Best: 923
Current Best: 927
Current Best: 921
Current Best: 916
Current Best: 917
Current Best: 919
Current Best: 921
Current Best: 916
Current Best: 916
Current Best: 920
Current Best: 918
Current Best: 916
Current Best: 920
Current Best: 923
Current Best: 923
Current Best: 922
Current Best: 918
Current Best: 918
Current Best: 917
Current Best: 923
Current Best: 918
Current Best: 920
Current Best: 925
Current Best: 919
Current Best: 922
Current Best: 922
Current Best: 916
Current Best: 922
Current Best: 920
Current Best: 925
Current Best: 937
Current Best: 921
Current Best: 931
Current Best: 924
Current Best: 922
Current Best: 921
Current Best: 920
Current Best: 918
Current Best: 921
Current Best: 925
Current Best: 923
Current Best: 918
Current Best: 919
Current Best: 918
Current Best: 919
Current Best: 919
Current Best: 918
Current Best: 918
Current Best: 919
Current Best: 923
Current Best: 920
Current Best: 924
Current Best: 930
Current Best: 928
Current Best: 925
Current Best: 921
Current Best: 923
Current Best: 918
Current Best: 918
Current Best: 918
Current Best: 926
Current Best: 918
Current Best: 920
Current Best: 924
Current Best: 927
Current Best: 931
Current Best: 929
Current Best: 922
Current Best: 919
Current Best: 924
Current Best: 926
Current Best: 935
Current Best: 929
Current Best: 936
Current Best: 930
Current Best: 938
Current Best: 931
Current Best: 931
Current Best: 924
Current Best: 926
Current Best: 935
Current Best: 928
Current Best: 925
Current Best: 930
Current Best: 929
Current Best: 929
Current Best: 927
Current Best: 927
Current Best: 926
Current Best: 928
Current Best: 927
Current Best: 925
Current Best: 925
Current Best: 926
Current Best: 926
Current Best: 929
Current Best: 930
Current Best: 930
Current Best: 926
Current Best: 935
Current Best: 927
Current Best: 927
Current Best: 929
Current Best: 925
Current Best: 927
Current Best: 925
Current Best: 925
Current Best: 926
Current Best: 934
Current Best: 927
Current Best: 926
Current Best: 924
Current Best: 926
Current Best: 925
Current Best: 925
Current Best: 924
Current Best: 929
Current Best: 934
Current Best: 927
Current Best: 933
Current Best: 932
Current Best: 935
Current Best: 927
Current Best: 929
Current Best: 925
Current Best: 927
Current Best: 933
Current Best: 930
Current Best: 927
Current Best: 924
Current Best: 926
Current Best: 931
Current Best: 925
Current Best: 925
Current Best: 924
Current Best: 924
Current Best: 925
Current Best: 924
Current Best: 928
Current Best: 926
Current Best: 925
Current Best: 924
Current Best: 924
Current Best: 926
Current Best: 928
Current Best: 924
Current Best: 929
Current Best: 924
Current Best: 927
Current Best: 932
Current Best: 932
Current Best: 924
Current Best: 929
Current Best: 927
Current Best: 925
Current Best: 925
Current Best: 927
Current Best: 928
Current Best: 926
Current Best: 934
Current Best: 938
Current Best: 927
Current Best: 928
Current Best: 929
Current Best: 933
Current Best: 927
Current Best: 926
Current Best: 924
Current Best: 925
Current Best: 928
Current Best: 928
Current Best: 930
Current Best: 930
Current Best: 926
Current Best: 929
Current Best: 925
Current Best: 927
Current Best: 929
Current Best: 929
Current Best: 934
Current Best: 927
Current Best: 933
Current Best: 937
Current Best: 933
Current Best: 936
Current Best: 931
Current Best: 927
Current Best: 926
Current Best: 933
Current Best: 937
Current Best: 937
Current Best: 930
Current Best: 930
Current Best: 936
Current Best: 933
Current Best: 931
Current Best: 931
Current Best: 929
Current Best: 940
Current Best: 937
Current Best: 937
Current Best: 934
Current Best: 934
Current Best: 941
Current Best: 931
Current Best: 932
Current Best: 940
Current Best: 940
Current Best: 936
Current Best: 943
Current Best: 937
Current Best: 934
Current Best: 933
Current Best: 935
Current Best: 941
Current Best: 932
Current Best: 938
Current Best: 937
Current Best: 938
Current Best: 935
Current Best: 938
Current Best: 938
Current Best: 936
Current Best: 933
Current Best: 938
Current Best: 932
Current Best: 935
Current Best: 932
Current Best: 933
Current Best: 932
Current Best: 932
Current Best: 935
Current Best: 936
Current Best: 935
Current Best: 936
Current Best: 938
Current Best: 938
Current Best: 938
Current Best: 940
Current Best: 938
Current Best: 936
Current Best: 936
Current Best: 935
Current Best: 945
Current Best: 939
Current Best: 943
Current Best: 947
Current Best: 940
Current Best: 934
Current Best: 936
Current Best: 943
Current Best: 939
Current Best: 947
Current Best: 942
Current Best: 941
Current Best: 940
Current Best: 938
Current Best: 941
Current Best: 936
Current Best: 934
Current Best: 934
Current Best: 941
Current Best: 947
Current Best: 943
Current Best: 941
Current Best: 938
Current Best: 942
Current Best: 942
Current Best: 941
Current Best: 939
Current Best: 944
Current Best: 945
Current Best: 940
Current Best: 947
Current Best: 944
Current Best: 946
Current Best: 947
Current Best: 948
Current Best: 947
Current Best: 944
Current Best: 936
Current Best: 938
Current Best: 942
Current Best: 944
Current Best: 938
Current Best: 946
Current Best: 943
Current Best: 942
Current Best: 939
Current Best: 939
Current Best: 936
Current Best: 942
Current Best: 940
Current Best: 942
Current Best: 949
Current Best: 937
Current Best: 947
Current Best: 939
Current Best: 949
Current Best: 942
Current Best: 941
Current Best: 949
Current Best: 950
Current Best: 950
Current Best: 946
Current Best: 951
Current Best: 946
Current Best: 954
Current Best: 945
Current Best: 948
Current Best: 946
Current Best: 945
Current Best: 945
Current Best: 947
Current Best: 945
Current Best: 946
Current Best: 945
Current Best: 946
Current Best: 947
Current Best: 948
Current Best: 949
Current Best: 956
Current Best: 951
Current Best: 957
Current Best: 945
Current Best: 957
Current Best: 952
Current Best: 947
Current Best: 953
Current Best: 948
Current Best: 953
Current Best: 954
Current Best: 946
Current Best: 945
Current Best: 948
Current Best: 949
Current Best: 950
Current Best: 948
Current Best: 946
Current Best: 954
Current Best: 952
Current Best: 952
Current Best: 950
Current Best: 949
Current Best: 946
Current Best: 947
Current Best: 947
Current Best: 948
Current Best: 946
Current Best: 945
Current Best: 950
Current Best: 945
Current Best: 952
Current Best: 948
Current Best: 947
Current Best: 945
Current Best: 950
Current Best: 947
Current Best: 951
Current Best: 954
Current Best: 951
Current Best: 950
Current Best: 954
Current Best: 950
Current Best: 951
Current Best: 951
Current Best: 954
Current Best: 960
Current Best: 958
Current Best: 957
Current Best: 959
Current Best: 949
Current Best: 952
Current Best: 964
Current Best: 963
Current Best: 962
Current Best: 953
Current Best: 957
Current Best: 950
Current Best: 951
Current Best: 950
Current Best: 950
Current Best: 950
Current Best: 954
Current Best: 955
Current Best: 959
Current Best: 955
Current Best: 959
Current Best: 953
Current Best: 953
Current Best: 954
Current Best: 953
Current Best: 953
Current Best: 953
Current Best: 953
Current Best: 958
Current Best: 955
Current Best: 953
Current Best: 953
Current Best: 953
Current Best: 949
Current Best: 950
Current Best: 949
Current Best: 951
Current Best: 951
Current Best: 951
Current Best: 949
Current Best: 951
Current Best: 950
Current Best: 951
Current Best: 954
Current Best: 954
Current Best: 954
Current Best: 951
Current Best: 951
Current Best: 950
Current Best: 950
Current Best: 953
Current Best: 952
Current Best: 950
Current Best: 952
Current Best: 951
Current Best: 953
Current Best: 954
Current Best: 950
Current Best: 950
Current Best: 953
Current Best: 949
Current Best: 950
Current Best: 951
Current Best: 950
Current Best: 951
Current Best: 950
Current Best: 951
Current Best: 950
Current Best: 950
Current Best: 951
Current Best: 956
Current Best: 949
Current Best: 949
Current Best: 952
Current Best: 954
Current Best: 954
Current Best: 951
Current Best: 949
Current Best: 950
Current Best: 950
Current Best: 954
Current Best: 951
Current Best: 953
Current Best: 950
Current Best: 950
Current Best: 951
Current Best: 955
Current Best: 953
Current Best: 953
Current Best: 953
Current Best: 957
Current Best: 953
Current Best: 957
Current Best: 956
Current Best: 951
Current Best: 955
Current Best: 964
Current Best: 957
Current Best: 953
Current Best: 953
Current Best: 953
Current Best: 954
Current Best: 953
Current Best: 954
Current Best: 959
Current Best: 957
Current Best: 961
Current Best: 957
Current Best: 958
Current Best: 958
Current Best: 958
Current Best: 957
Current Best: 959
Current Best: 954
Current Best: 955
Current Best: 954
Current Best: 956
Current Best: 953
Current Best: 956
Current Best: 954
Current Best: 955
Current Best: 955
Current Best: 958
Current Best: 958
Current Best: 957
Current Best: 955
Current Best: 955
Current Best: 959
Current Best: 954
Current Best: 954
Current Best: 960
Current Best: 953
Current Best: 957
Current Best: 957
Current Best: 956
Current Best: 954
Current Best: 953
Current Best: 955
Current Best: 957
Current Best: 954
Current Best: 959
Current Best: 955
Current Best: 955
Current Best: 956
Current Best: 959
Current Best: 956
Current Best: 955
Current Best: 954
Current Best: 954
Current Best: 953
Current Best: 956
Current Best: 953
Current Best: 953
Current Best: 954
Current Best: 955
Current Best: 953
Current Best: 954
Current Best: 953
Current Best: 955
Current Best: 954
Current Best: 956
Current Best: 958
Current Best: 960
Current Best: 956
Current Best: 955
Current Best: 955
Current Best: 954
Current Best: 954
Current Best: 955
Current Best: 963
Current Best: 963
Current Best: 962
Current Best: 955
Current Best: 957
Current Best: 959
Current Best: 956
Current Best: 954
Current Best: 958
Current Best: 959
Current Best: 956
Current Best: 955
Current Best: 962
Current Best: 954
Current Best: 959
Current Best: 958
Current Best: 957
Current Best: 956
Current Best: 958
Current Best: 955
Current Best: 955
Current Best: 958
Current Best: 958
Current Best: 955
Current Best: 957
Current Best: 960
Current Best: 956
Current Best: 954
Current Best: 954
Current Best: 956
Current Best: 960
Current Best: 961
Current Best: 954
Current Best: 954
Current Best: 956
Current Best: 961
Current Best: 956
Current Best: 959
Current Best: 959
Current Best: 959
Current Best: 963
Current Best: 965
Current Best: 963
Current Best: 964
Current Best: 959
Current Best: 962
Current Best: 958
Current Best: 957
Current Best: 963
Current Best: 962
Current Best: 958
Current Best: 959
Current Best: 962
Current Best: 958
Current Best: 960
Current Best: 957
Current Best: 960
Current Best: 960
Current Best: 961
Current Best: 962
Current Best: 964
Current Best: 964
Current Best: 959
Current Best: 963
Current Best: 957
Current Best: 959
Current Best: 959
Current Best: 959
Current Best: 959
Current Best: 960
Current Best: 961
Current Best: 958
Current Best: 959
Current Best: 963
Current Best: 962
Current Best: 961
Current Best: 960
Current Best: 957
Current Best: 960
Current Best: 963
Current Best: 962
Current Best: 962
Current Best: 959
Current Best: 958
Current Best: 961
Current Best: 962
Current Best: 959
Current Best: 961
Current Best: 962
Current Best: 961
Current Best: 963
Current Best: 960
Current Best: 960
Current Best: 958
Current Best: 961
Current Best: 960
Current Best: 959
Current Best: 959
Current Best: 963
Current Best: 961
Current Best: 959
Current Best: 959
Current Best: 965
Current Best: 960
Current Best: 959
Current Best: 961
Current Best: 960
Current Best: 962
Current Best: 962
Current Best: 964
Current Best: 964
Current Best: 959
Current Best: 960
Current Best: 958
Current Best: 961
Current Best: 967
Current Best: 962
Current Best: 961
Current Best: 961
Current Best: 964
Current Best: 962
Current Best: 961
Current Best: 962
Current Best: 963
Current Best: 961
Current Best: 964
Current Best: 963
Current Best: 965
Current Best: 964
Current Best: 967
Current Best: 969
Current Best: 964
Current Best: 961
Current Best: 961
Current Best: 961
Current Best: 961
Current Best: 964
Current Best: 963
Current Best: 963
Current Best: 961
Current Best: 965
Current Best: 966
Current Best: 966
Current Best: 968
Current Best: 963
Current Best: 962
Current Best: 961
Current Best: 963
Current Best: 961
Current Best: 963
Current Best: 961
Current Best: 961
Current Best: 961
Current Best: 964
Current Best: 965
Current Best: 961
Current Best: 965
Current Best: 961
Current Best: 961
Current Best: 961
Current Best: 964
Current Best: 962
Current Best: 966
Current Best: 966
Current Best: 963
Current Best: 964
Current Best: 961
Current Best: 961
Current Best: 962
Current Best: 961
Current Best: 966
Current Best: 963
Current Best: 964
Current Best: 962
Current Best: 965
Current Best: 963
Current Best: 974
Current Best: 966
Current Best: 970
Current Best: 966
Current Best: 962
Current Best: 963
Current Best: 962
Current Best: 962
Current Best: 964
Current Best: 963
Current Best: 961
Current Best: 964
Current Best: 961
Current Best: 962
Current Best: 961
Current Best: 962
Current Best: 962
Current Best: 964
Current Best: 961
Current Best: 962
Current Best: 962
Current Best: 963
Current Best: 970
Current Best: 962
Current Best: 961
Current Best: 965
Current Best: 965
Current Best: 967
Current Best: 963
Current Best: 967
Current Best: 969
Current Best: 964
Current Best: 964
Current Best: 964
Current Best: 968
Current Best: 964
Current Best: 962
Current Best: 963
Current Best: 962
Current Best: 963
Current Best: 963
Current Best: 962
Current Best: 964
Current Best: 965
Current Best: 973
Current Best: 970
Current Best: 968
Current Best: 967
Current Best: 964
Current Best: 965
Current Best: 970
Current Best: 966
Current Best: 975
Current Best: 967
Current Best: 970
Current Best: 968
Current Best: 965
Current Best: 969
Current Best: 972
Current Best: 971
Current Best: 969
Current Best: 968
Current Best: 968
Current Best: 968
Current Best: 970
Current Best: 965
Current Best: 968
Current Best: 966
Current Best: 969
Current Best: 972
Current Best: 973
Current Best: 972
Current Best: 969
Current Best: 972
Current Best: 969
Current Best: 972
Current Best: 968
Current Best: 970
Current Best: 970
Current Best: 973
Current Best: 969
Current Best: 967
Current Best: 968
Current Best: 967
Current Best: 970
Current Best: 970
Current Best: 972
Current Best: 972
Current Best: 973
Current Best: 973
Current Best: 970
Current Best: 973
Current Best: 972
Current Best: 970
Current Best: 969
Current Best: 970
Current Best: 969
Current Best: 972
Current Best: 973
Current Best: 972
Current Best: 973
Current Best: 970
Current Best: 969
Current Best: 971
Current Best: 972
Current Best: 972
Current Best: 972
Current Best: 972
Current Best: 972
Current Best: 971
Current Best: 971
Current Best: 976
Current Best: 972
Current Best: 970
Current Best: 974
Current Best: 974
Current Best: 971
Current Best: 969
Current Best: 972
Current Best: 970
Current Best: 973
Current Best: 977
Current Best: 977
Current Best: 969
Current Best: 973
Current Best: 969
Current Best: 969
Current Best: 969
Current Best: 972
Current Best: 969
Current Best: 969
Current Best: 972
Current Best: 974
Current Best: 971
Current Best: 974
Current Best: 970
Current Best: 978
Current Best: 971
Current Best: 978
Current Best: 977
Current Best: 972
Current Best: 971
Current Best: 973
Current Best: 972
Current Best: 973
Current Best: 973
Current Best: 973
Current Best: 977
Current Best: 969
Current Best: 969
Current Best: 973
Current Best: 971
Current Best: 974
Current Best: 972
Current Best: 974
Current Best: 971
Current Best: 975
Current Best: 972
Current Best: 973
Current Best: 970
Current Best: 969
Current Best: 973
Current Best: 973
Current Best: 974
Current Best: 978
Current Best: 978
Current Best: 978
Current Best: 972
Current Best: 977
Current Best: 975
Current Best: 978
Current Best: 976
Current Best: 972
Current Best: 973
Current Best: 973
Current Best: 973
Current Best: 973
Current Best: 974
Current Best: 974
Current Best: 974
Current Best: 974
Current Best: 976
Current Best: 976
Current Best: 973
Current Best: 980
Current Best: 977
Current Best: 972
Current Best: 975
Current Best: 976
Current Best: 975
Current Best: 975
Current Best: 975
Current Best: 974
Current Best: 975
Current Best: 980
Current Best: 972
Current Best: 978
Current Best: 973
Current Best: 973
Current Best: 973
Current Best: 973
Current Best: 975
Current Best: 976
Current Best: 973
Current Best: 974
Current Best: 974
Current Best: 975
Current Best: 974
Current Best: 975
Current Best: 976
Current Best: 974
Current Best: 975
Current Best: 972
Current Best: 976
Current Best: 977
Current Best: 973
Current Best: 974
Current Best: 973
Current Best: 972
Current Best: 973
Current Best: 973
Current Best: 974
Current Best: 972
Current Best: 973
Current Best: 974
Current Best: 976
Current Best: 973
Current Best: 973
Current Best: 976
Current Best: 974
Current Best: 975
Current Best: 972
Current Best: 976
Current Best: 975
Current Best: 975
Current Best: 975
Current Best: 976
Current Best: 972
Current Best: 974
Current Best: 974
Current Best: 975
Current Best: 973
Current Best: 975
Current Best: 972
Current Best: 973
Current Best: 973
Current Best: 973
Current Best: 975
Current Best: 972
Current Best: 975
Current Best: 975
Current Best: 974
Current Best: 978
Current Best: 974
Current Best: 980
Current Best: 977
Current Best: 981
Current Best: 973
Current Best: 974
Current Best: 977
Current Best: 976
Current Best: 973
Current Best: 978
Current Best: 973
Current Best: 976
Current Best: 977
Current Best: 976
Current Best: 977
Current Best: 975
Current Best: 974
Current Best: 977
Current Best: 974
Current Best: 976
Current Best: 976
Current Best: 974
Current Best: 974
Current Best: 974
Current Best: 976
Current Best: 974
Current Best: 976
Current Best: 976
Current Best: 975
Current Best: 978
Current Best: 976
Current Best: 975
Current Best: 978
Current Best: 974
Current Best: 974
Current Best: 975
Current Best: 975
Current Best: 979
Current Best: 978
Current Best: 973
Current Best: 979
Current Best: 974
Current Best: 974
Current Best: 975
Current Best: 978
Current Best: 975
Current Best: 976
Current Best: 976
Current Best: 982
Current Best: 980
Current Best: 975
Current Best: 976
Current Best: 973
Current Best: 973
Current Best: 975
Current Best: 977
Current Best: 975
Current Best: 975
Current Best: 979
Current Best: 975
Current Best: 973
Current Best: 974
Current Best: 975
Current Best: 981
Current Best: 980
Current Best: 981
Current Best: 976
Current Best: 977
Current Best: 976
Current Best: 977
Current Best: 973
Current Best: 974
Current Best: 974
Current Best: 975
Current Best: 976
Current Best: 976
Current Best: 976
Current Best: 976
Current Best: 975
Current Best: 976
Current Best: 985
Current Best: 981
Current Best: 977
Current Best: 976
Current Best: 975
Current Best: 974
Current Best: 973
Current Best: 974
Current Best: 975
Current Best: 976
Current Best: 976
Current Best: 976
Current Best: 977
Current Best: 977
Current Best: 975
Current Best: 978
Current Best: 975
Current Best: 975
Current Best: 979
Current Best: 977
Current Best: 977
Current Best: 975
Current Best: 975
Current Best: 975
Current Best: 975
Current Best: 975
Current Best: 975
Current Best: 975
Current Best: 973
Current Best: 973
Current Best: 973
Current Best: 975
Current Best: 976
Current Best: 976
Current Best: 976
Current Best: 975
Current Best: 975
Current Best: 974
Current Best: 974
Current Best: 974
Current Best: 973
Current Best: 978
Current Best: 977
Current Best: 978
Current Best: 975
Current Best: 975
Current Best: 984
Current Best: 980
Current Best: 980
Current Best: 980
Current Best: 979
Current Best: 979
Current Best: 975
Current Best: 977
Current Best: 974
Current Best: 975
Current Best: 976
Current Best: 979
Current Best: 978
Current Best: 980
Current Best: 980
Current Best: 981
Current Best: 977
Current Best: 979
Current Best: 979
Current Best: 981
Current Best: 978
Current Best: 983
Current Best: 978
Current Best: 980
Current Best: 982
Current Best: 980
Current Best: 981
Current Best: 978
Current Best: 978
Current Best: 980
Current Best: 979
Current Best: 979
Current Best: 980
Current Best: 979
Current Best: 978
Current Best: 980
Current Best: 984
Current Best: 978
Current Best: 983
Current Best: 981
Current Best: 981
Current Best: 980
Current Best: 979
Current Best: 979
Current Best: 978
Current Best: 977
Current Best: 978
Current Best: 980
Current Best: 985
Current Best: 980
Current Best: 979
Current Best: 984
Current Best: 984
Current Best: 981
Current Best: 979
Current Best: 977
Current Best: 981
Current Best: 979
Current Best: 980
Current Best: 978
Current Best: 979
Current Best: 978
Current Best: 980
Current Best: 981
Current Best: 981
Current Best: 979
Current Best: 977
Current Best: 978
Current Best: 977
Current Best: 977
Current Best: 978
Current Best: 977
Current Best: 978
Current Best: 977
Current Best: 980
Current Best: 978
Current Best: 978
Current Best: 978
Current Best: 983
Current Best: 978
Current Best: 979
Current Best: 978
Current Best: 978
Current Best: 979
Current Best: 979
Current Best: 978
Current Best: 977
Current Best: 977
Current Best: 978
Current Best: 978
Current Best: 979
Current Best: 979
Current Best: 977
Current Best: 979
Current Best: 978
Current Best: 979
Current Best: 981
Current Best: 979
Current Best: 981
Current Best: 981
Current Best: 980
Current Best: 979
Current Best: 980
Current Best: 980
Current Best: 978
Current Best: 977
Current Best: 977
Current Best: 982
Current Best: 980
Current Best: 982
Current Best: 977
Current Best: 980
Current Best: 980
Current Best: 983
Current Best: 983
Current Best: 978
Current Best: 982
Current Best: 979
Current Best: 982
Current Best: 977
Current Best: 977
Current Best: 978
Current Best: 979
Current Best: 978
Current Best: 978
Current Best: 979
Current Best: 980
Current Best: 979
Current Best: 977
Current Best: 977
Current Best: 977
Current Best: 981
Current Best: 980
Current Best: 977
Current Best: 978
Current Best: 983
Current Best: 978
Current Best: 981
Current Best: 978
Current Best: 981
Current Best: 978
Current Best: 977
Current Best: 978
Current Best: 979
Current Best: 977
Current Best: 979
Current Best: 980
Current Best: 979
Current Best: 979
Current Best: 981
Current Best: 977
Current Best: 981
Current Best: 979
Current Best: 982
Current Best: 982
Current Best: 981
Current Best: 978
Current Best: 980
Current Best: 979
Current Best: 978
Current Best: 980
Current Best: 979
Current Best: 979
Current Best: 979
Current Best: 979
Current Best: 985
Current Best: 980
Current Best: 980
Current Best: 981
Current Best: 980
Current Best: 982
Current Best: 979
Current Best: 978
Current Best: 980
Current Best: 979
Current Best: 983
Current Best: 982
Current Best: 980
Current Best: 978
Current Best: 983
Current Best: 983
Current Best: 982
Current Best: 983
Current Best: 982
Current Best: 978
Current Best: 978
Current Best: 978
Current Best: 980
Current Best: 978
Current Best: 980
Current Best: 978
Current Best: 982
Current Best: 980
Current Best: 981
Current Best: 981
Current Best: 982
Current Best: 982
Current Best: 978
Current Best: 979
Current Best: 978
Current Best: 978
Current Best: 981
Current Best: 978
Current Best: 978
Current Best: 978
Current Best: 983
Current Best: 982
Current Best: 982
Current Best: 979
Current Best: 983
Current Best: 979
Current Best: 982
Current Best: 978
Current Best: 979
Current Best: 978
Current Best: 980
Current Best: 981
Current Best: 983
Current Best: 979
Current Best: 978
Current Best: 979
Current Best: 978
Current Best: 981
Current Best: 978
Current Best: 979
Current Best: 981
Current Best: 979
Current Best: 978
Current Best: 981
Current Best: 978
Current Best: 979
Current Best: 982
Current Best: 979
Current Best: 979
Current Best: 980
Current Best: 979
Current Best: 981
Current Best: 978
Current Best: 979
Current Best: 979
Current Best: 981
Current Best: 978
Current Best: 981
Current Best: 979
Current Best: 979
Current Best: 979
Current Best: 980
Current Best: 980
Current Best: 983
Current Best: 980
Current Best: 982
Current Best: 982
Current Best: 980
Current Best: 981
Current Best: 984
Current Best: 981
Current Best: 981
Current Best: 983
Current Best: 981
Current Best: 982
Current Best: 981
Current Best: 982
Current Best: 980
Current Best: 980
Current Best: 981
Current Best: 980
Current Best: 983
Current Best: 983
Current Best: 987
Current Best: 987
Current Best: 986
Current Best: 986
Current Best: 986
Current Best: 982
Current Best: 988
Current Best: 985
Current Best: 983
Current Best: 984
Current Best: 985
Current Best: 983
Current Best: 983
Current Best: 984
Current Best: 983
Current Best: 985
Current Best: 983
Current Best: 985
Current Best: 985
Current Best: 986
Current Best: 983
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 983
Current Best: 984
Current Best: 983
Current Best: 983
Current Best: 984
Current Best: 983
Current Best: 986
Current Best: 984
Current Best: 983
Current Best: 983
Current Best: 987
Current Best: 987
Current Best: 986
Current Best: 986
Current Best: 987
Current Best: 985
Current Best: 985
Current Best: 984
Current Best: 983
Current Best: 985
Current Best: 985
Current Best: 985
Current Best: 985
Current Best: 984
Current Best: 984
Current Best: 985
Current Best: 983
Current Best: 987
Current Best: 984
Current Best: 985
Current Best: 987
Current Best: 985
Current Best: 985
Current Best: 985
Current Best: 983
Current Best: 984
Current Best: 984
Current Best: 985
Current Best: 985
Current Best: 985
Current Best: 985
Current Best: 984
Current Best: 986
Current Best: 983
Current Best: 983
Current Best: 984
Current Best: 984
Current Best: 983
Current Best: 985
Current Best: 984
Current Best: 985
Current Best: 983
Current Best: 983
Current Best: 984
Current Best: 988
Current Best: 985
Current Best: 985
Current Best: 987
Current Best: 983
Current Best: 983
Current Best: 983
Current Best: 986
Current Best: 986
Current Best: 983
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 983
Current Best: 985
Current Best: 987
Current Best: 988
Current Best: 986
Current Best: 985
Current Best: 985
Current Best: 985
Current Best: 985
Current Best: 986
Current Best: 983
Current Best: 983
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 986
Current Best: 984
Current Best: 983
Current Best: 984
Current Best: 983
Current Best: 985
Current Best: 985
Current Best: 983
Current Best: 985
Current Best: 984
Current Best: 987
Current Best: 985
Current Best: 983
Current Best: 983
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 987
Current Best: 984
Current Best: 987
Current Best: 985
Current Best: 988
Current Best: 988
Current Best: 989
Current Best: 986
Current Best: 987
Current Best: 988
Current Best: 984
Current Best: 984
Current Best: 985
Current Best: 984
Current Best: 984
Current Best: 985
Current Best: 985
Current Best: 986
Current Best: 987
Current Best: 985
Current Best: 986
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 986
Current Best: 985
Current Best: 985
Current Best: 985
Current Best: 985
Current Best: 988
Current Best: 987
Current Best: 987
Current Best: 985
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 985
Current Best: 986
Current Best: 984
Current Best: 984
Current Best: 989
Current Best: 987
Current Best: 984
Current Best: 986
Current Best: 985
Current Best: 987
Current Best: 987
Current Best: 985
Current Best: 989
Current Best: 988
Current Best: 989
Current Best: 986
Current Best: 985
Current Best: 986
Current Best: 985
Current Best: 985
Current Best: 984
Current Best: 984
Current Best: 986
Current Best: 986
Current Best: 987
Current Best: 986
Current Best: 986
Current Best: 984
Current Best: 987
Current Best: 984
Current Best: 984
Current Best: 985
Current Best: 985
Current Best: 984
Current Best: 984
Current Best: 984
Current Best: 985
Current Best: 987
Current Best: 986
Current Best: 987
Current Best: 989
Current Best: 987
Current Best: 986
Current Best: 986
Current Best: 985
Current Best: 993
Current Best: 990
Current Best: 987
Current Best: 986
Current Best: 986
Current Best: 989
Current Best: 990
Current Best: 990
Current Best: 990
Current Best: 989
Current Best: 990
Current Best: 988
Current Best: 987
Current Best: 987
Current Best: 988
Current Best: 987
Current Best: 988
Current Best: 988
Current Best: 990
Current Best: 992
Current Best: 990
Current Best: 986
Current Best: 988
Current Best: 991
Current Best: 987
Current Best: 986
Current Best: 987
Current Best: 987
Current Best: 987
Current Best: 987
Current Best: 986
Current Best: 987
Current Best: 986
Current Best: 986
Current Best: 986
Current Best: 990
Current Best: 989
Current Best: 988
Current Best: 986
Current Best: 987
Current Best: 988
Current Best: 986
Current Best: 987
Current Best: 987
Current Best: 989
Current Best: 989
Current Best: 987
Current Best: 989
Current Best: 988
Current Best: 987
Current Best: 988
Current Best: 988
Current Best: 989
Current Best: 989
Current Best: 989
Current Best: 991
Current Best: 989
Current Best: 989
Current Best: 992
Current Best: 990
Current Best: 990
Current Best: 989
Current Best: 990
Current Best: 990
Current Best: 989
Current Best: 990
Current Best: 991
Current Best: 990
Current Best: 991
Current Best: 989
Current Best: 990
Current Best: 990
Current Best: 989
Current Best: 990
Current Best: 989
Current Best: 989
Current Best: 989
Current Best: 989
Current Best: 989
Current Best: 990
Current Best: 989
Current Best: 989
Current Best: 989
Current Best: 989
Current Best: 990
Current Best: 991
Current Best: 990
Current Best: 989
Current Best: 990
Current Best: 989
Current Best: 990
Current Best: 989
Current Best: 992
Current Best: 990
Current Best: 990
Current Best: 989
Current Best: 990
Current Best: 989
Current Best: 989
Current Best: 992
Current Best: 992
Current Best: 994
Current Best: 991
Current Best: 994
Current Best: 993
Current Best: 993
Current Best: 990
Current Best: 989
Current Best: 990
Current Best: 991
Current Best: 991
Current Best: 991
Current Best: 991
Current Best: 990
Current Best: 992
Current Best: 992
Current Best: 991
Current Best: 992
Current Best: 992
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 990
Current Best: 991
Current Best: 990
Current Best: 989
Current Best: 989
Current Best: 993
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 991
Current Best: 989
Current Best: 989
Current Best: 991
Current Best: 991
Current Best: 992
Current Best: 990
Current Best: 989
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 994
Current Best: 992
Current Best: 994
Current Best: 995
Current Best: 995
Current Best: 991
Current Best: 993
Current Best: 993
Current Best: 992
Current Best: 991
Current Best: 992
Current Best: 993
Current Best: 991
Current Best: 992
Current Best: 992
Current Best: 991
Current Best: 992
Current Best: 990
Current Best: 991
Current Best: 993
Current Best: 992
Current Best: 991
Current Best: 991
Current Best: 991
Current Best: 991
Current Best: 992
Current Best: 992
Current Best: 990
Current Best: 990
Current Best: 994
Current Best: 994
Current Best: 994
Current Best: 994
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 990
Current Best: 990
Current Best: 992
Current Best: 991
Current Best: 991
Current Best: 990
Current Best: 991
Current Best: 991
Current Best: 990
Current Best: 992
Current Best: 991
Current Best: 992
Current Best: 991
Current Best: 990
Current Best: 991
Current Best: 992
Current Best: 991
Current Best: 994
Current Best: 993
Current Best: 990
Current Best: 992
Current Best: 991
Current Best: 990
Current Best: 991
Current Best: 991
Current Best: 990
Current Best: 991
Current Best: 991
Current Best: 992
Current Best: 994
Current Best: 993
Current Best: 991
Current Best: 991
Current Best: 991
Current Best: 993
Current Best: 991
Current Best: 991
Current Best: 991
Current Best: 992
Current Best: 994
Current Best: 990
Current Best: 994
Current Best: 993
Current Best: 995
Current Best: 991
Current Best: 992
Current Best: 991
Current Best: 991
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 990
Current Best: 991
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 994
Current Best: 996
Current Best: 994
Current Best: 991
Current Best: 993
Current Best: 992
Current Best: 991
Current Best: 991
Current Best: 993
Current Best: 991
Current Best: 991
Current Best: 994
Current Best: 993
Current Best: 994
Current Best: 993
Current Best: 993
Current Best: 994
Current Best: 993
Current Best: 992
Current Best: 993
Current Best: 991
Current Best: 992
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 995
Current Best: 994
Current Best: 994
Current Best: 994
Current Best: 992
Current Best: 991
Current Best: 993
Current Best: 993
Current Best: 992
Current Best: 993
Current Best: 991
Current Best: 991
Current Best: 993
Current Best: 992
Current Best: 991
Current Best: 992
Current Best: 992
Current Best: 991
Current Best: 991
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 991
Current Best: 991
Current Best: 993
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 993
Current Best: 994
Current Best: 991
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 992
Current Best: 994
Current Best: 995
Current Best: 994
Current Best: 994
Current Best: 994
Current Best: 994
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 994
Current Best: 993
Current Best: 994
Current Best: 993
Current Best: 994
Current Best: 994
Current Best: 995
Current Best: 993
Current Best: 992
Current Best: 991
Current Best: 993
Current Best: 991
Current Best: 994
Current Best: 991
Current Best: 994
Current Best: 992
Current Best: 994
Current Best: 992
Current Best: 992
Current Best: 993
Current Best: 994
Current Best: 996
Current Best: 997
Current Best: 998
Current Best: 996
Current Best: 995
Current Best: 994
Current Best: 995
Current Best: 997
Current Best: 994
Current Best: 991
Current Best: 992
Current Best: 994
Current Best: 991
Current Best: 996
Current Best: 996
Current Best: 995
Current Best: 996
Current Best: 995
Current Best: 993
Current Best: 992
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 993
Current Best: 992
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 992
Current Best: 993
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 995
Current Best: 992
Current Best: 994
Current Best: 995
Current Best: 993
Current Best: 995
Current Best: 993
Current Best: 994
Current Best: 994
Current Best: 993
Current Best: 994
Current Best: 994
Current Best: 994
Current Best: 995
Current Best: 993
Current Best: 994
Current Best: 994
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 996
Current Best: 995
Current Best: 994
Current Best: 994
Current Best: 995
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 994
Current Best: 993
Current Best: 994
Current Best: 993
Current Best: 993
Current Best: 994
Current Best: 993
Current Best: 995
Current Best: 996
Current Best: 995
Current Best: 995
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 994
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 995
Current Best: 992
Current Best: 994
Current Best: 992
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 992
Current Best: 993
Current Best: 992
Current Best: 992
Current Best: 992
Current Best: 993
Current Best: 994
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 995
Current Best: 995
Current Best: 993
Current Best: 993
Current Best: 993
Current Best: 992
Current Best: 994
Current Best: 994
Current Best: 993
Current Best: 992
Current Best: 993
Current Best: 993
Current Best: 992
Current Best: 994
Current Best: 996
Current Best: 995
Current Best: 996
Current Best: 996
Current Best: 995
Current Best: 995
Current Best: 996
Current Best: 997
Current Best: 995
Current Best: 995
Current Best: 996
Current Best: 997
Current Best: 996
Current Best: 997
Current Best: 996
Current Best: 995
Current Best: 997
Current Best: 998
Current Best: 997
Current Best: 996
Current Best: 997
Current Best: 998
Current Best: 997
Current Best: 996
Current Best: 995
Current Best: 996
Current Best: 997
Current Best: 995
Current Best: 996
Current Best: 997
Current Best: 997
Current Best: 996
Current Best: 997
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 997
Current Best: 998
Current Best: 998
Current Best: 996
Current Best: 995
Current Best: 996
Current Best: 995
Current Best: 997
Current Best: 995
Current Best: 995
Current Best: 995
Current Best: 996
Current Best: 997
Current Best: 996
Current Best: 995
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 995
Current Best: 995
Current Best: 996
Current Best: 997
Current Best: 996
Current Best: 997
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 997
Current Best: 999
Current Best: 997
Current Best: 995
Current Best: 997
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 995
Current Best: 997
Current Best: 995
Current Best: 996
Current Best: 997
Current Best: 997
Current Best: 997
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 995
Current Best: 995
Current Best: 995
Current Best: 996
Current Best: 997
Current Best: 997
Current Best: 997
Current Best: 997
Current Best: 997
Current Best: 999
Current Best: 995
Current Best: 996
Current Best: 995
Current Best: 995
Current Best: 999
Current Best: 997
Current Best: 997
Current Best: 999
Current Best: 999
Current Best: 996
Current Best: 998
Current Best: 998
Current Best: 996
Current Best: 996
Current Best: 995
Current Best: 996
Current Best: 996
Current Best: 998
Current Best: 997
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 997
Current Best: 997
Current Best: 998
Current Best: 996
Current Best: 995
Current Best: 995
Current Best: 995
Current Best: 997
Current Best: 999
Current Best: 996
Current Best: 998
Current Best: 997
Current Best: 995
Current Best: 996
Current Best: 996
Current Best: 995
Current Best: 995
Current Best: 995
Current Best: 995
Current Best: 998
Current Best: 997
Current Best: 997
Current Best: 997
Current Best: 998
Current Best: 998
Current Best: 997
Current Best: 995
Current Best: 996
Current Best: 996
Current Best: 997
Current Best: 997
Current Best: 996
Current Best: 997
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 996
Current Best: 997
Current Best: 996
Current Best: 998
Current Best: 997
Current Best: 1000
Answer is
:ok