create a hash to hold processed pairs, with a key like "3 4" to indicate that 3 has been processed against 4 get minimum and maximum key values (3 & 11 in this case) loop from minimum to maximum minus interval if interval contains more than one item for each pair of items in interval check hash to see if the pair has been processed if not process the pair mark the pair in the hash #### minimum = 3, maximum = 11, so loop from 3 to 7 first interval is 3-7, so includes 3,4,6,7 process 3 & 4 process 3 & 6 process 3 & 7 process 4 & 6 process 4 & 7 process 6 & 7 next interval is 4-8, so includes 4,6,7,8 skip 4 & 6, already done skip 4 & 7, already done process 4 & 8 skip 6 & 7, already done process 6 & 8 process 7 & 8 next interval is 5-9, so includes 6,7,8 skip 6 & 7, already done skip 6 & 8, already done skip 7 & 8, already done next interval is 6-10, so includes 6,7,8 skip 6 & 7, already done skip 6 & 8, already done skip 7 & 8, already done next interval is 7-11, so includes 7,8,11 skip 7 & 8, already done process 7 & 11 process 8 & 11