The list of letters for each round is built before the exercise is ran to prevent list generation logic from interfering with application timing. The list is built by looping total amount of lists needed by multiplying the amount of condition types by the amount of trials then adding the amount of catch trials like so: (Condition Types*Trials)+Catch Trials A condition is then randomly selected for list generation. An array holding the count of each condition used is used to balance the condition selection and prevent a condition from being used more than the maximum amount of times. If a condition has been used the maximum amount of times it is skipped and another condition is randomly selected until the use count for the selected item is less than the maximum count for that item. The list is then generated by first randomly generating the position for the first target inside the required range then generating the position for the second target inside the required range if required. Once the target positions are established a randomly selected letter is added to the list if the count is not equal to a target position. If the count is equal to a target position a target is randomly selected and added to the list. The list is checked before letters are inserted to insure that letters do not repeat in the list. This continues until the list reaches the required length. The conditions loop then continues until all lists have been generated.