A number of problems from coded in ARM assembly language Problems

http://www.fourtheye.org/cgi-bin/language.pl?language=asm

NOTE: This documents my investigation into assembly language programming on the ARM processor running my SheevaPlug. This runs Debian GNU/Linux. I use the GNU assembler, gas, the GNU linker, ld and the GNU debugger, gdb.


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Description of problem

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.

001.s

.syntax unified .equ max3start,999 .equ max5start,995 number .req r4 matched .req r5 sum .req r6 max3 .req r7 max5 .req r8 .section .rodata .align 2 string: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r8, lr} ldr max5, =max5start ldr max3, =max3start ldr number, =max3start @ start at 1000 - 1 ; numbers < 1000 mov matched, 0 mov sum, 0 loop: cmp number, max3 bne test5 # matched a multiple of 3 - decrement max3, add to sum and set matched to 1 mov matched, 1 add sum, sum, number subs max3, max3, 3 test5: cmp number, max5 bne last # matched a multiple of 5 - decrement max5, add to sum and set matched to 1 subs max5, max5, 5 cmp matched, 1 @ have we already added it? addne sum, sum, number @ if not add it to the total last: # decrement number and reset matched and loop mov matched, 0 subs number, number, 1 bne loop mov r1, sum ldr r0, =string @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r8, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

002.s

.syntax unified .equ maxfib,4000000 previous .req r4 current .req r5 next .req r6 sum .req r7 max .req r8 tmp .req r9 .section .rodata .align 2 fibstring: .asciz "fib is %d\n" sumstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r9, lr} ldr max, =maxfib mov previous, 1 mov current, 1 mov sum, 0 # mov r1, current # ldr r0, =fibstring @ store address of start of string to r0 # bl printf loop: cmp current, max bgt last # mov r1, current # ldr r0, =fibstring @ store address of start of string to r0 # bl printf add next, current, previous movs tmp, current, lsr 1 @ set carry flag from lsr - for the odd-valued terms addcc sum, sum, current @ these are even-valued fibonacci (when cc is true) mov previous, current mov current, next b loop last: mov r1, sum ldr r0, =sumstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r9, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.

010.s

.syntax unified .equ word,4 .equ logword,2 .equ limit,2000000 .equ numprimes4,595732 sum_hi .req r4 sum_lo .req r5 numprimes .req r6 primes_ptr .req r7 number .req r8 limit .req r9 .align 2 .section .bss .lcomm primes_vector,numprimes4 .section .rodata .align 2 llustring: .asciz "%llu\n" primestring: .asciz "num %d primality is %d\n" .text .align 8 .global main .type main, %function main: stmfd sp!, {r4-r9, fp, lr} ldr primes_ptr, =primes_vector mov numprimes, 1 mov number, 2 strb number, [primes_ptr] ldr limit, =limit mov sum_hi, 0 mov sum_lo, 2 mov number, 3 loop: cmp number, limit bge printme mov r0, number ldr r1, =primes_vector mov r2, numprimes bl prime_vector teq r0, 1 bne nexti str number, [primes_ptr, numprimes, lsl 2] add numprimes, numprimes, 1 adds sum_lo, sum_lo, number adc sum_hi, sum_hi, 0 nexti: add number, number, 2 b loop printme: mov r2, sum_lo mov r3, sum_hi ldr r0, =llustring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r9, fp, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

The prime factors of 13195 are 5, 7, 13 and 29.

What is the largest prime factor of the number 600851475143 ?

003.s

.syntax unified @ 600851475143 is 8BE589EAC7 in hex @ root 600851475143 is 775146.099 .align 4 .equ numhi,139 @ 0x8b .equ numlo,3851020999 @ 0xe589eac7 .equ root,775147 num_hi .req r4 num_lo .req r5 maxdiv .req r6 n .req r7 tmp .req r8 .section .rodata .align 2 resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r8, lr} mov maxdiv, 0 ldr n, =root ldr num_lo, =numlo ldr num_hi, =numhi loop: ldr r0, =numlo ldr r1, =numhi mov r2, n mov r3, 0 bl long_divide mov tmp, r0 teq r2, 0 bne nextn teq r3, 0 bne nextn bl isprime teq r0, 1 bne testn cmp maxdiv, tmp movlt maxdiv, tmp testn: mov r0, n bl isprime teq r0, 1 bne nextn cmp maxdiv, n movlt maxdiv, n nextn: sub n, n, 2 teq n, 1 beq printme b loop printme: mov r1, maxdiv ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r8, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

isprime.s

.syntax unified # this subroutine returns 1 if the passed number is prime; 0 if not # inputs # r0 - integer to test # outputs # r0 - prime boolean number .req r4 divisor .req r5 tmp .req r6 .global isprime .type isprime, %function .text .align 2 isprime: stmfd sp!, {r4-r6, lr} mov number, r0 ands tmp, number, 1 bne odd mov r0, 0 cmp number, 2 @ 2 is the only prime even number bne last mov r0, 1 b last odd: mov divisor, 3 cmp number, 8 bgt big mov r0, 1 cmp number, 1 @ 1 is the only odd number < 8 not prime bne last mov r0, 0 b last big: mov r0, number mov r1, divisor bl divide teq r1, 0 beq factor add divisor, divisor, 2 mul tmp, divisor, divisor subs tmp, tmp, number ble big mov r0, 1 b last factor: mov r0, 0 last: ldmfd sp!, {r4-r6, pc}
Description of problem

A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.

Find the largest palindrome made from the product of two 3-digit numbers.

004.s

.syntax unified .equ max3,999 .equ min3,100 .equ maxdigits,6 i .req r4 j .req r5 product .req r6 maxp .req r7 mini .req r8 minj .req r9 maxj .req r10 .section .rodata .align 2 sumstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r10, lr} ldr i, =max3 ldr mini, =min3 ldr maxj, =max3 ldr minj, =min3 iloop: mov j, maxj jloop: mul product, i, j mov r0, product bl is_palindromic cmp r0, #1 bne next cmp product, maxp ble next mov maxp, product mov r0, product bl divide_by_10 @ divides r0 by 10 bl divide_by_10 @ so 3 consecutive calls bl divide_by_10 @ will divide by 1000 mov minj, r0 mov minj, r0 next: subs j, j, 1 cmp j, minj bgt jloop subs i, i, 1 mov maxj, i cmp i, mini bgt iloop last: mov r1, maxp ldr r0, =sumstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r10, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

ispalindromic.s

.syntax unified .equ datum_size, 1 .equ digits, 6 # this subroutine returns 1 if the passed 6-digit number is palindromic; 0 if not # the number is a product of 2 3-digit numbers so we assume the product has 6 digits # # inputs # r0 - integer to test # # outputs # r0 - palindromic boolean # # local # left .req r4 right .req r5 counter .req r6 buffer_address .req r7 running .req r8 tmp .req r9 # .section .bss .lcomm buffer, 6 # .global is_palindromic .type is_palindromic, %function .global get_digits .type get_digits, %function .text .align 2 # is_palindromic: stmfd sp!, {r4-r9, lr} bl get_digits mov counter, 3 ldr buffer_address, =buffer ip_last: sub left, buffer_address, counter ldrb tmp, [left, 3] add right, buffer_address, counter ldrb running, [right, 2] teq tmp, running bne no subs counter, counter, 1 bgt ip_last mov r0, 1 b last no: mov r0, 0 last: ldmfd sp!, {r4-r9, pc} # get_digits: stmfd sp!, {r7-r8, lr} ldr running, =digits ldr buffer_address, =buffer gd_loop: subs running, running, 1 bl divide_by_10_remainder strb r1, [buffer_address], #datum_size bgt gd_loop gd_last: ldmfd sp!, {r7-r8, pc}
Description of problem

The sum of the squares of the first ten natural numbers is,

1 2 + 2 2 + ... + 10 2 = 385

The square of the sum of the first ten natural numbers is,

(1 + 2 + ... + 10) 2 = 55 2 = 3025

Hence the difference between the sum of the squares of the first ten natural numbers and the square of the sum is 3025 ? 385 = 2640.

Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.

006.s

.syntax unified .equ limit,100 number .req r4 sumsq .req r5 sqsum .req r6 tmp .req r7 .section .rodata .align 2 string: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r7, lr} mov sqsum, 0 mov sumsq, 0 ldr number, =limit loop: mul tmp, number, number add sqsum, sqsum, tmp # decrement number and loop or exit subs number, number, 1 beq end_loop b loop end_loop: ldr number, =limit add number, number, 1 ldr sumsq, =limit mul sumsq, sumsq, number lsr sumsq, sumsq, 1 mul sumsq, sumsq, sumsq last: sub tmp, sumsq, sqsum mov r1, tmp ldr r0, =string @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r7, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

test_ispalindromic.s

.equ nonpalindromic,123456 .equ palindromic1,123321 .equ palindromic2,815518 .syntax unified number .req r4 palindromicflag .req r5 .macro num_is_palindromic a ldr number, =\a mov r0, number bl is_palindromic mov palindromicflag, r0 mov r2, palindromicflag mov r1, number ldr r0, =palindromicstring bl printf .endm .section .rodata .align 2 palindromicstring: .asciz "num %d palindromicity is %d\n" .text .align 2 .global main .type main, %function main: num_is_palindromic nonpalindromic num_is_palindromic palindromic1 num_is_palindromic palindromic2 mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

test_isprime.s

.syntax unified number .req r4 primeflag .req r5 .macro num_is_prime a mov number, \a mov r0, number bl isprime mov primeflag, r0 mov r2, primeflag mov r1, number ldr r0, =primestring bl printf .endm .section .rodata .align 2 primestring: .asciz "num %d primality is %d\n" .text .align 2 .global main .type main, %function main: num_is_prime 1 num_is_prime 2 num_is_prime 3 num_is_prime 4 num_is_prime 5 num_is_prime 7 num_is_prime 9 num_is_prime 11 num_is_prime 13 num_is_prime 15 num_is_prime 17 num_is_prime 19 num_is_prime 20 num_is_prime 21 num_is_prime 23 num_is_prime 25 num_is_prime 27 num_is_prime 29 ldr number, =716151937 mov r0, number bl isprime mov primeflag, r0 mov r2, primeflag mov r1, number ldr r0, =primestring bl printf mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

divide_by_10.s

.syntax unified # this subroutine divides the passed number by 10 and # returns the dividend and remainder # # The const -0x33333333 is 0xccccccd (2s complement) # 0xcccccccc is 12/15th (0.8) of 0xffffffff and we use this as # a multiplier, then shift right by 3 bits (divide by 8) to # effect a multiplication by 0.1 # # We multiply this number by 10 (multiply by 4, add 1 then multiply by 2) # and subtract from the original number to give the remainder on division # by 10. # # inputs # r0 - integer to divide # # outputs # r0 - the dividend # r1 - the remainder .equ const,-0x33333333 #.equ const,0xcccccccd .text .align 2 .global divide_by_10_remainder .type divide_by_10_remainder, %function divide_by_10_remainder: stmfd sp!, {lr} cmp r0, 10 blt rsmall ldr r1, =const umull r2, r3, r1, r0 mov r2, r3, lsr #3 @ r2 = r3 / 8 == r0 / 10 mov r3, r2 @ r3 = r2 mov r3, r3, asl #2 @ r3 = 4 * r3 add r3, r3, r2 @ r3 = r3 + r2 mov r3, r3, asl #1 @ r3 = 2 * r3 rsb r3, r3, r0 @ r3 = r0 - r3 = r0 - 10*int(r0/10) mov r1, r3 @ the remainder mov r0, r2 @ the dividend b rlast rsmall: mov r1, r0 mov r0, 0 rlast: ldmfd sp!, {pc} # this subroutine divides the passed number by 10 # returns the dividend # # The const -0x33333333 is 0xccccccd (2s complement) # 0xcccccccc is 12/15th (0.8) of 0xffffffff and we use this as # a multiplier, then shift right by 3 bits (divide by 8) to # effect a multiplication by 0.1 # # We multiply this number by 10 (multiply by 4, add 1 then multiply by 2) # # inputs # r0 - integer to divide # # outputs # r0 - the dividend .align 2 .global divide_by_10 .type divide_by_10, %function divide_by_10: stmfd sp!, {lr} cmp r0, 10 blt small ldr r1, =const umull r2, r3, r1, r0 mov r2, r3, lsr #3 @ r2 = r3 / 8 == r0 / 10 mov r0, r2 @ the dividend b last small: mov r0, 0 last: ldmfd sp!, {pc}
Description of problem

2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?

005.s

.syntax unified .equ limit,20 .align 4 @ algorithm @ initialise try_products to 1 @ foreach number > 1 and <= limit @ test if it is prime @ if try_products is set, then multiply the number by itself @ while it does not exceed limit, then multiply the total by @ this product. if the number squared exceeds the limit, then @ set try_product to 0. @ if try_products is 0 and the number is prime, then multiply @ the total by number. try_product .req r4 number .req r5 last .req r6 total .req r7 tmp .req r8 .section .rodata .align 2 resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r8, lr} mov total, 1 mov try_product, 1 mov number, 2 loop: mov r0, number bl isprime20 cmp r0, 1 bne nexti cmp try_product, 1 bne no_product mul tmp, number, number cmp tmp, limit ble prod_start mov try_product, 0 b no_product prod_start: mov tmp, number mov last, tmp prod_loop: cmp tmp, limit bgt last_mul mov last, tmp mul tmp, tmp, number b prod_loop last_mul: mul total, total, last no_product: cmp try_product, 0 bne nexti mul total, total, number nexti: cmp number, limit beq printme add number, number, 1 b loop printme: mov r1, total ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r8, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux # this subroutine returns 1 if the passed number (<= 20) is prime; 0 if not # # inputs # r0 - integer to test # # outputs # r0 - prime boolean .global isprime20 .type isprime20, %function .text .align 2 isprime20: stmfd sp!, {lr} mov r1, r0 ands r2, r1, 1 bne odd mov r0, 0 cmp r1, 2 @ 2 is the only prime even r1 bne last mov r0, 1 b last odd: mov r0, 1 cmp r1, 9 bne test15 mov r0, 0 b last test15: cmp r1, 15 bne last mov r0, 0 last: ldmfd sp!, {pc}

test_divide_by_10.s

.equ num0,7830 .equ num3,783 .equ num7,7847 .equ num8,78 .equ num9,7 .syntax unified .macro dividend num ldr r1, =\num ldr r0, =numstring bl printf ldr r0, =\num bl divide_by_10 mov r1, r0 ldr r0, =dividendstring bl printf .endm .macro remainder num ldr r1, =\num ldr r0, =numstring bl printf ldr r0, =\num bl divide_by_10_remainder mov r2, r0 ldr r0, =remainderstring bl printf .endm .section .rodata .align 2 numstring: .asciz "num is %d\n" dividendstring: .asciz "dividend is %d\n" remainderstring: .asciz "remainder is %d and dividend is %d\n" .text .align 2 .global main .type main, %function main: remainder num0 remainder num7 remainder num3 remainder num8 remainder num9 dividend num0 dividend num7 dividend num3 dividend num8 dividend num9 mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

By listing the first six prime numbers: 2, 3, 5, 7, 11, and 13, we can see that the 6th prime is 13.

What is the 10 001st prime number?

007.s

.syntax unified .equ limit,10000 .equ limit4,40000 .align 4 number .req r4 count .req r5 numprimes .req r6 primes_ptr .req r7 .section .bss .lcomm primes_vector,limit4 .section .rodata .align 2 resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r7, lr} ldr primes_ptr, =primes_vector mov numprimes, 1 mov number, 2 strb number, [primes_ptr] ldr count, =limit mov number, 3 @ 2 is the first prime loop: mov r0, number ldr r1, =primes_vector mov r2, numprimes bl prime_vector teq r0, 1 bne nexti str number, [primes_ptr, numprimes, lsl 2] add numprimes, numprimes, 1 subs count, count, 1 beq printme nexti: add number, number, 2 b loop printme: mov r1, number ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r7, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

Find the greatest product of five consecutive digits in the 1000-digit number.

73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450

008.s

.syntax unified .equ limit,10000 .equ outer, 996 .equ inner, 5 .align 4 address .req r4 thisbyte .req r5 icounter .req r6 ocounter .req r7 maxv .req r8 tmp .req r9 .section .data buffer: .byte 7, 3, 1, 6, 7, 1, 7, 6, 5, 3, 1, 3, 3, 0, 6, 2, 4, 9, 1, 9, 2, 2 .byte 5, 1, 1, 9, 6, 7, 4, 4, 2, 6, 5, 7, 4, 7, 4, 2, 3, 5, 5, 3, 4, 9, 1, 9 .byte 4, 9, 3, 4, 9, 6, 9, 8, 3, 5, 2, 0, 3, 1, 2, 7, 7, 4, 5, 0, 6, 3, 2, 6 .byte 2, 3, 9, 5, 7, 8, 3, 1, 8, 0, 1, 6, 9, 8, 4, 8, 0, 1, 8, 6, 9, 4, 7, 8 .byte 8, 5, 1, 8, 4, 3, 8, 5, 8, 6, 1, 5, 6, 0, 7, 8, 9, 1, 1, 2, 9, 4, 9, 4 .byte 9, 5, 4, 5, 9, 5, 0, 1, 7, 3, 7, 9, 5, 8, 3, 3, 1, 9, 5, 2, 8, 5, 3, 2 .byte 0, 8, 8, 0, 5, 5, 1, 1, 1, 2, 5, 4, 0, 6, 9, 8, 7, 4, 7, 1, 5, 8, 5, 2 .byte 3, 8, 6, 3, 0, 5, 0, 7, 1, 5, 6, 9, 3, 2, 9, 0, 9, 6, 3, 2, 9, 5, 2, 2 .byte 7, 4, 4, 3, 0, 4, 3, 5, 5, 7, 6, 6, 8, 9, 6, 6, 4, 8, 9, 5, 0, 4, 4, 5 .byte 2, 4, 4, 5, 2, 3, 1, 6, 1, 7, 3, 1, 8, 5, 6, 4, 0, 3, 0, 9, 8, 7, 1, 1 .byte 1, 2, 1, 7, 2, 2, 3, 8, 3, 1, 1, 3, 6, 2, 2, 2, 9, 8, 9, 3, 4, 2, 3, 3 .byte 8, 0, 3, 0, 8, 1, 3, 5, 3, 3, 6, 2, 7, 6, 6, 1, 4, 2, 8, 2, 8, 0, 6, 4 .byte 4, 4, 4, 8, 6, 6, 4, 5, 2, 3, 8, 7, 4, 9, 3, 0, 3, 5, 8, 9, 0, 7, 2, 9 .byte 6, 2, 9, 0, 4, 9, 1, 5, 6, 0, 4, 4, 0, 7, 7, 2, 3, 9, 0, 7, 1, 3, 8, 1 .byte 0, 5, 1, 5, 8, 5, 9, 3, 0, 7, 9, 6, 0, 8, 6, 6, 7, 0, 1, 7, 2, 4, 2, 7 .byte 1, 2, 1, 8, 8, 3, 9, 9, 8, 7, 9, 7, 9, 0, 8, 7, 9, 2, 2, 7, 4, 9, 2, 1 .byte 9, 0, 1, 6, 9, 9, 7, 2, 0, 8, 8, 8, 0, 9, 3, 7, 7, 6, 6, 5, 7, 2, 7, 3 .byte 3, 3, 0, 0, 1, 0, 5, 3, 3, 6, 7, 8, 8, 1, 2, 2, 0, 2, 3, 5, 4, 2, 1, 8 .byte 0, 9, 7, 5, 1, 2, 5, 4, 5, 4, 0, 5, 9, 4, 7, 5, 2, 2, 4, 3, 5, 2, 5, 8 .byte 4, 9, 0, 7, 7, 1, 1, 6, 7, 0, 5, 5, 6, 0, 1, 3, 6, 0, 4, 8, 3, 9, 5, 8 .byte 6, 4, 4, 6, 7, 0, 6, 3, 2, 4, 4, 1, 5, 7, 2, 2, 1, 5, 5, 3, 9, 7, 5, 3 .byte 6, 9, 7, 8, 1, 7, 9, 7, 7, 8, 4, 6, 1, 7, 4, 0, 6, 4, 9, 5, 5, 1, 4, 9 .byte 2, 9, 0, 8, 6, 2, 5, 6, 9, 3, 2, 1, 9, 7, 8, 4, 6, 8, 6, 2, 2, 4, 8, 2 .byte 8, 3, 9, 7, 2, 2, 4, 1, 3, 7, 5, 6, 5, 7, 0, 5, 6, 0, 5, 7, 4, 9, 0, 2 .byte 6, 1, 4, 0, 7, 9, 7, 2, 9, 6, 8, 6, 5, 2, 4, 1, 4, 5, 3, 5, 1, 0, 0, 4 .byte 7, 4, 8, 2, 1, 6, 6, 3, 7, 0, 4, 8, 4, 4, 0, 3, 1, 9, 9, 8, 9, 0, 0, 0 .byte 8, 8, 9, 5, 2, 4, 3, 4, 5, 0, 6, 5, 8, 5, 4, 1, 2, 2, 7, 5, 8, 8, 6, 6 .byte 6, 8, 8, 1, 1, 6, 4, 2, 7, 1, 7, 1, 4, 7, 9, 9, 2, 4, 4, 4, 2, 9, 2, 8 .byte 2, 3, 0, 8, 6, 3, 4, 6, 5, 6, 7, 4, 8, 1, 3, 9, 1, 9, 1, 2, 3, 1, 6, 2 .byte 8, 2, 4, 5, 8, 6, 1, 7, 8, 6, 6, 4, 5, 8, 3, 5, 9, 1, 2, 4, 5, 6, 6, 5 .byte 2, 9, 4, 7, 6, 5, 4, 5, 6, 8, 2, 8, 4, 8, 9, 1, 2, 8, 8, 3, 1, 4, 2, 6 .byte 0, 7, 6, 9, 0, 0, 4, 2, 2, 4, 2, 1, 9, 0, 2, 2, 6, 7, 1, 0, 5, 5, 6, 2 .byte 6, 3, 2, 1, 1, 1, 1, 1, 0, 9, 3, 7, 0, 5, 4, 4, 2, 1, 7, 5, 0, 6, 9, 4 .byte 1, 6, 5, 8, 9, 6, 0, 4, 0, 8, 0, 7, 1, 9, 8, 4, 0, 3, 8, 5, 0, 9, 6, 2 .byte 4, 5, 5, 4, 4, 4, 3, 6, 2, 9, 8, 1, 2, 3, 0, 9, 8, 7, 8, 7, 9, 9, 2, 7 .byte 2, 4, 4, 2, 8, 4, 9, 0, 9, 1, 8, 8, 8, 4, 5, 8, 0, 1, 5, 6, 1, 6, 6, 0 .byte 9, 7, 9, 1, 9, 1, 3, 3, 8, 7, 5, 4, 9, 9, 2, 0, 0, 5, 2, 4, 0, 6, 3, 6 .byte 8, 9, 9, 1, 2, 5, 6, 0, 7, 1, 7, 6, 0, 6, 0, 5, 8, 8, 6, 1, 1, 6, 4, 6 .byte 7, 1, 0, 9, 4, 0, 5, 0, 7, 7, 5, 4, 1, 0, 0, 2, 2, 5, 6, 9, 8, 3, 1, 5 .byte 5, 2, 0, 0, 0, 5, 5, 9, 3, 5, 7, 2, 9, 7, 2, 5, 7, 1, 6, 3, 6, 2, 6, 9 .byte 5, 6, 1, 8, 8, 2, 6, 7, 0, 4, 2, 8, 2, 5, 2, 4, 8, 3, 6, 0, 0, 8, 2, 3 .byte 2, 5, 7, 5, 3, 0, 4, 2, 0, 7, 5, 2, 9, 6, 3, 4, 5, 0 .section .rodata .align 2 resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r9, lr} ldr address, =buffer ldr ocounter, =outer outer_start: ldr icounter, =inner mov tmp, #1 inner_start: ldrb thisbyte, [address], 1 mul tmp, tmp, thisbyte subs icounter, icounter, 1 bne inner_start cmp maxv, tmp movlt maxv, tmp sub address, address, 4 subs ocounter, ocounter, 1 bne outer_start printme: mov r1, maxv ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r9, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

A Pythagorean triplet is a set of three natural numbers, a c, for which,
	</p>
	<div style= a2 + b2 = c2

For example, 32 + 42 = 9 + 16 = 25 = 52.

There exists exactly one Pythagorean triplet for which a + b + c = 1000.
Find the product abc.

009.s

.syntax unified .equ limit,1000 .align 4 icount .req r4 jcount .req r5 kcount .req r6 tmp .req r8 jksum .req r9 .section .rodata .align 2 resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r9, lr} ldr icount, =limit istart: subs jcount, icount, 1 beq nexti jstart: subs kcount, jcount, 1 beq nextj add tmp, icount, jcount kstart: add tmp, tmp, kcount cmp tmp, #limit bne nextk mul jksum, kcount, kcount mul tmp, jcount, jcount add jksum, jksum, tmp mul tmp, icount, icount cmp jksum, tmp beq printme nextk: add tmp, icount, jcount subs kcount, kcount, 1 bne kstart nextj: subs jcount, jcount, 1 bne jstart nexti: subs icount, icount, 1 bne istart printme: mul tmp, icount, jcount mul tmp, tmp, kcount mov r1, tmp ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r9, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

In the 20×20 grid below, four numbers along a diagonal line have been marked in red.

08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48

The product of these numbers is 26 × 63 × 78 × 14 = 1788696.

What is the greatest product of four adjacent numbers in the same direction (up, down, left, right, or diagonally) in the 20×20 grid?

011.s

.syntax unified .align 2 .section .rodata buffer: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .byte 0, 0, 0, 8, 2, 22, 97, 38, 15, 0, 40, 0, 75, 4, 5, 7, 78, 52, 12, 50, 77, 91, 8, 0, 0, 0 .byte 0, 0, 0, 49, 49, 99, 40, 17, 81, 18, 57, 60, 87, 17, 40, 98, 43, 69, 48, 4, 56, 62, 0, 0, 0, 0 .byte 0, 0, 0, 81, 49, 31, 73, 55, 79, 14, 29, 93, 71, 40, 67, 53, 88, 30, 3, 49, 13, 36, 65, 0, 0, 0 .byte 0, 0, 0, 52, 70, 95, 23, 4, 60, 11, 42, 69, 24, 68, 56, 1, 32, 56, 71, 37, 2, 36, 91, 0, 0, 0 .byte 0, 0, 0, 22, 31, 16, 71, 51, 67, 63, 89, 41, 92, 36, 54, 22, 40, 40, 28, 66, 33, 13, 80, 0, 0, 0 .byte 0, 0, 0, 24, 47, 32, 60, 99, 3, 45, 2, 44, 75, 33, 53, 78, 36, 84, 20, 35, 17, 12, 50, 0, 0, 0 .byte 0, 0, 0, 32, 98, 81, 28, 64, 23, 67, 10, 26, 38, 40, 67, 59, 54, 70, 66, 18, 38, 64, 70, 0, 0, 0 .byte 0, 0, 0, 67, 26, 20, 68, 2, 62, 12, 20, 95, 63, 94, 39, 63, 8, 40, 91, 66, 49, 94, 21, 0, 0, 0 .byte 0, 0, 0, 24, 55, 58, 5, 66, 73, 99, 26, 97, 17, 78, 78, 96, 83, 14, 88, 34, 89, 63, 72, 0, 0, 0 .byte 0, 0, 0, 21, 36, 23, 9, 75, 0, 76, 44, 20, 45, 35, 14, 0, 61, 33, 97, 34, 31, 33, 95, 0, 0, 0 .byte 0, 0, 0, 78, 17, 53, 28, 22, 75, 31, 67, 15, 94, 3, 80, 4, 62, 16, 14, 9, 53, 56, 92, 0, 0, 0 .byte 0, 0, 0, 16, 39, 5, 42, 96, 35, 31, 47, 55, 58, 88, 24, 0, 17, 54, 24, 36, 29, 85, 57, 0, 0, 0 .byte 0, 0, 0, 86, 56, 0, 48, 35, 71, 89, 7, 5, 44, 44, 37, 44, 60, 21, 58, 51, 54, 17, 58, 0, 0, 0 .byte 0, 0, 0, 19, 80, 81, 68, 5, 94, 47, 69, 28, 73, 92, 13, 86, 52, 17, 77, 4, 89, 55, 40, 0, 0, 0 .byte 0, 0, 0, 4, 52, 8, 83, 97, 35, 99, 16, 7, 97, 57, 32, 16, 26, 26, 79, 33, 27, 98, 66, 0, 0, 0 .byte 0, 0, 0, 88, 36, 68, 87, 57, 62, 20, 72, 3, 46, 33, 67, 46, 55, 12, 32, 63, 93, 53, 69, 0, 0, 0 .byte 0, 0, 0, 4, 42, 16, 73, 38, 25, 39, 11, 24, 94, 72, 18, 8, 46, 29, 32, 40, 62, 76, 36, 0, 0, 0 .byte 0, 0, 0, 20, 69, 36, 41, 72, 30, 23, 88, 34, 62, 99, 69, 82, 67, 59, 85, 74, 4, 36, 16, 0, 0, 0 .byte 0, 0, 0, 20, 73, 35, 29, 78, 31, 90, 1, 74, 31, 49, 71, 48, 86, 81, 16, 23, 57, 5, 54, 0, 0, 0 .byte 0, 0, 0, 1, 70, 54, 71, 83, 51, 54, 69, 16, 92, 33, 48, 61, 43, 52, 1, 89, 19, 67, 48, 0, 0, 0 .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 resstring: .asciz "%d\n" .equ ocolumns, 26 .equ icolumns, 20 .equ colstart, 23 .equ border, 3 .equ offset, 2 .equ points, 4 .equ north, -ocolumns .equ north_east, -ocolumns+1 .equ east, 1 .equ south_east, ocolumns+1 .equ south, ocolumns .equ south_west, ocolumns - 1 .equ west, -1 .equ north_west, -ocolumns-1 .equ point_set, 1 tmp .req r2 pointv .req r3 data_ptr .req r4 icount .req r5 jcount .req r6 kcount .req r7 maxv .req r8 dpstore .req r9 .macro direction a mov data_ptr, dpstore mov kcount, points mov pointv, point_set kloop\@: ldrb tmp, [data_ptr], \a mul pointv, pointv, tmp subs kcount, kcount, 1 bne kloop\@ cmp maxv, pointv movlt maxv, pointv @ set maxv to max of maxv and pointv .endm .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r9, lr} mov icount, icolumns iloop: mov jcount, icolumns jloop: mov tmp, ocolumns add data_ptr, icount, offset mul tmp, tmp, data_ptr add tmp, tmp, jcount add tmp, tmp, offset ldr data_ptr, =buffer add dpstore, data_ptr, tmp @ data[i][j] direction north direction north_east direction east direction south_east direction south direction south_west direction west direction north_west subs jcount, jcount, 1 bne jloop subs icount, icount, 1 bne iloop printme: mov r1, maxv ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r9, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

The sequence of triangle numbers is generated by adding the natural numbers. So the 7th triangle number would be 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28. The first ten terms would be:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...

Let us list the factors of the first seven triangle numbers:

 1: 1
 3: 1,3
 6: 1,2,3,6
10: 1,2,5,10
15: 1,3,5,15
21: 1,3,7,21
28: 1,2,4,7,14,28

We can see that 28 is the first triangle number to have over five divisors.

What is the value of the first triangle number to have over five hundred divisors?

012.s

.syntax unified .align 2 .section .rodata resstring: .asciz "%d\n" .equ last, 250 icount .req r4 jcount .req r5 tmp .req r6 num .req r7 .text .align 2 .global get_num_divisors .type get_num_divisors, %function get_num_divisors: stmfd sp!, {r4-r7, lr} mov num, r0 mov icount, 0 mov jcount, 1 jstart: mov r0, num mov r1, jcount bl divide teq r1, 0 beq factor b nextj factor: add icount, icount, 1 nextj: add jcount, jcount, 1 mul tmp, jcount, jcount cmp num, tmp bgt jstart mov r0, icount ldmfd sp!, {r4-r7, pc} .align 2 .global main .type main, %function main: stmfd sp!, {r4-r7, lr} mov num, 0 mov icount, 0 mov jcount, 1 loop: cmp num, #last bge printme add icount, icount, jcount mov r0, icount bl get_num_divisors mov num, r0 add jcount, jcount, 1 b loop printme: mov r1, icount ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r7, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

Work out the first ten digits of the sum of the following one-hundred 50-digit numbers.

37107287533902102798797998220837590246510135740250
46376937677490009712648124896970078050417018260538
74324986199524741059474233309513058123726617309629
91942213363574161572522430563301811072406154908250
23067588207539346171171980310421047513778063246676
89261670696623633820136378418383684178734361726757
28112879812849979408065481931592621691275889832738
44274228917432520321923589422876796487670272189318
47451445736001306439091167216856844588711603153276
70386486105843025439939619828917593665686757934951
62176457141856560629502157223196586755079324193331
64906352462741904929101432445813822663347944758178
92575867718337217661963751590579239728245598838407
58203565325359399008402633568948830189458628227828
80181199384826282014278194139940567587151170094390
35398664372827112653829987240784473053190104293586
86515506006295864861532075273371959191420517255829
71693888707715466499115593487603532921714970056938
54370070576826684624621495650076471787294438377604
53282654108756828443191190634694037855217779295145
36123272525000296071075082563815656710885258350721
45876576172410976447339110607218265236877223636045
17423706905851860660448207621209813287860733969412
81142660418086830619328460811191061556940512689692
51934325451728388641918047049293215058642563049483
62467221648435076201727918039944693004732956340691
15732444386908125794514089057706229429197107928209
55037687525678773091862540744969844508330393682126
18336384825330154686196124348767681297534375946515
80386287592878490201521685554828717201219257766954
78182833757993103614740356856449095527097864797581
16726320100436897842553539920931837441497806860984
48403098129077791799088218795327364475675590848030
87086987551392711854517078544161852424320693150332
59959406895756536782107074926966537676326235447210
69793950679652694742597709739166693763042633987085
41052684708299085211399427365734116182760315001271
65378607361501080857009149939512557028198746004375
35829035317434717326932123578154982629742552737307
94953759765105305946966067683156574377167401875275
88902802571733229619176668713819931811048770190271
25267680276078003013678680992525463401061632866526
36270218540497705585629946580636237993140746255962
24074486908231174977792365466257246923322810917141
91430288197103288597806669760892938638285025333403
34413065578016127815921815005561868836468420090470
23053081172816430487623791969842487255036638784583
11487696932154902810424020138335124462181441773470
63783299490636259666498587618221225225512486764533
67720186971698544312419572409913959008952310058822
95548255300263520781532296796249481641953868218774
76085327132285723110424803456124867697064507995236
37774242535411291684276865538926205024910326572967
23701913275725675285653248258265463092207058596522
29798860272258331913126375147341994889534765745501
18495701454879288984856827726077713721403798879715
38298203783031473527721580348144513491373226651381
34829543829199918180278916522431027392251122869539
40957953066405232632538044100059654939159879593635
29746152185502371307642255121183693803580388584903
41698116222072977186158236678424689157993532961922
62467957194401269043877107275048102390895523597457
23189706772547915061505504953922979530901129967519
86188088225875314529584099251203829009407770775672
11306739708304724483816533873502340845647058077308
82959174767140363198008187129011875491310547126581
97623331044818386269515456334926366572897563400500
42846280183517070527831839425882145521227251250327
55121603546981200581762165212827652751691296897789
32238195734329339946437501907836945765883352399886
75506164965184775180738168837861091527357929701337
62177842752192623401942399639168044983993173312731
32924185707147349566916674687634660915035914677504
99518671430235219628894890102423325116913619626622
73267460800591547471830798392868535206946944540724
76841822524674417161514036427982273348055556214818
97142617910342598647204516893989422179826088076852
87783646182799346313767754307809363333018982642090
10848802521674670883215120185883543223812876952786
71329612474782464538636993009049310363619763878039
62184073572399794223406235393808339651327408011116
66627891981488087797941876876144230030984490851411
60661826293682836764744779239180335110989069790714
85786944089552990653640447425576083659976645795096
66024396409905389607120198219976047599490197230297
64913982680032973156037120041377903785566085089252
16730939319872750275468906903707539413042652315011
94809377245048795150954100921645863754710598436791
78639167021187492431995700641917969777599028300699
15368713711936614952811305876380278410754449733078
40789923115535562561142322423255033685442488917353
44889911501440648020369068063960672322193204149535
41503128880339536053299340368006977710650566631954
81234880673210146739058568557934581403627822703280
82616570773948327592232845941706525094512325230608
22918802058777319719839450180888072429661980811197
77158542502016545090413245809786882778948721859617
72107838435069186155435662884062257473692284509516
20849603980134001723930671666823555245252804609722
53503534226472524250874054075591789781264330331690

013.s

.syntax unified .equ ten, 10 .equ hundred, 100 .equ col_nums,50 .equ row_nums,100 .equ col_offset,50 @ maximum sum of any column is 900 - if all elements were 9 .align 4 const .req r1 byte .req r2 col_num .req r4 row_num .req r5 row1 .req r6 data_ptr .req r8 col_sum .req r9 tmp .req r10 .section .bss .lcomm result, 52 .section .data buffer: .byte 3, 7, 1, 0, 7, 2, 8, 7, 5, 3, 3, 9, 0, 2, 1, 0, 2, 7, 9, 8, 7, 9, 7, 9, 9, 8, 2, 2, 0, 8, 3, 7, 5, 9, 0, 2, 4, 6, 5, 1, 0, 1, 3, 5, 7, 4, 0, 2, 5, 0 .byte 4, 6, 3, 7, 6, 9, 3, 7, 6, 7, 7, 4, 9, 0, 0, 0, 9, 7, 1, 2, 6, 4, 8, 1, 2, 4, 8, 9, 6, 9, 7, 0, 0, 7, 8, 0, 5, 0, 4, 1, 7, 0, 1, 8, 2, 6, 0, 5, 3, 8 .byte 7, 4, 3, 2, 4, 9, 8, 6, 1, 9, 9, 5, 2, 4, 7, 4, 1, 0, 5, 9, 4, 7, 4, 2, 3, 3, 3, 0, 9, 5, 1, 3, 0, 5, 8, 1, 2, 3, 7, 2, 6, 6, 1, 7, 3, 0, 9, 6, 2, 9 .byte 9, 1, 9, 4, 2, 2, 1, 3, 3, 6, 3, 5, 7, 4, 1, 6, 1, 5, 7, 2, 5, 2, 2, 4, 3, 0, 5, 6, 3, 3, 0, 1, 8, 1, 1, 0, 7, 2, 4, 0, 6, 1, 5, 4, 9, 0, 8, 2, 5, 0 .byte 2, 3, 0, 6, 7, 5, 8, 8, 2, 0, 7, 5, 3, 9, 3, 4, 6, 1, 7, 1, 1, 7, 1, 9, 8, 0, 3, 1, 0, 4, 2, 1, 0, 4, 7, 5, 1, 3, 7, 7, 8, 0, 6, 3, 2, 4, 6, 6, 7, 6 .byte 8, 9, 2, 6, 1, 6, 7, 0, 6, 9, 6, 6, 2, 3, 6, 3, 3, 8, 2, 0, 1, 3, 6, 3, 7, 8, 4, 1, 8, 3, 8, 3, 6, 8, 4, 1, 7, 8, 7, 3, 4, 3, 6, 1, 7, 2, 6, 7, 5, 7 .byte 2, 8, 1, 1, 2, 8, 7, 9, 8, 1, 2, 8, 4, 9, 9, 7, 9, 4, 0, 8, 0, 6, 5, 4, 8, 1, 9, 3, 1, 5, 9, 2, 6, 2, 1, 6, 9, 1, 2, 7, 5, 8, 8, 9, 8, 3, 2, 7, 3, 8 .byte 4, 4, 2, 7, 4, 2, 2, 8, 9, 1, 7, 4, 3, 2, 5, 2, 0, 3, 2, 1, 9, 2, 3, 5, 8, 9, 4, 2, 2, 8, 7, 6, 7, 9, 6, 4, 8, 7, 6, 7, 0, 2, 7, 2, 1, 8, 9, 3, 1, 8 .byte 4, 7, 4, 5, 1, 4, 4, 5, 7, 3, 6, 0, 0, 1, 3, 0, 6, 4, 3, 9, 0, 9, 1, 1, 6, 7, 2, 1, 6, 8, 5, 6, 8, 4, 4, 5, 8, 8, 7, 1, 1, 6, 0, 3, 1, 5, 3, 2, 7, 6 .byte 7, 0, 3, 8, 6, 4, 8, 6, 1, 0, 5, 8, 4, 3, 0, 2, 5, 4, 3, 9, 9, 3, 9, 6, 1, 9, 8, 2, 8, 9, 1, 7, 5, 9, 3, 6, 6, 5, 6, 8, 6, 7, 5, 7, 9, 3, 4, 9, 5, 1 .byte 6, 2, 1, 7, 6, 4, 5, 7, 1, 4, 1, 8, 5, 6, 5, 6, 0, 6, 2, 9, 5, 0, 2, 1, 5, 7, 2, 2, 3, 1, 9, 6, 5, 8, 6, 7, 5, 5, 0, 7, 9, 3, 2, 4, 1, 9, 3, 3, 3, 1 .byte 6, 4, 9, 0, 6, 3, 5, 2, 4, 6, 2, 7, 4, 1, 9, 0, 4, 9, 2, 9, 1, 0, 1, 4, 3, 2, 4, 4, 5, 8, 1, 3, 8, 2, 2, 6, 6, 3, 3, 4, 7, 9, 4, 4, 7, 5, 8, 1, 7, 8 .byte 9, 2, 5, 7, 5, 8, 6, 7, 7, 1, 8, 3, 3, 7, 2, 1, 7, 6, 6, 1, 9, 6, 3, 7, 5, 1, 5, 9, 0, 5, 7, 9, 2, 3, 9, 7, 2, 8, 2, 4, 5, 5, 9, 8, 8, 3, 8, 4, 0, 7 .byte 5, 8, 2, 0, 3, 5, 6, 5, 3, 2, 5, 3, 5, 9, 3, 9, 9, 0, 0, 8, 4, 0, 2, 6, 3, 3, 5, 6, 8, 9, 4, 8, 8, 3, 0, 1, 8, 9, 4, 5, 8, 6, 2, 8, 2, 2, 7, 8, 2, 8 .byte 8, 0, 1, 8, 1, 1, 9, 9, 3, 8, 4, 8, 2, 6, 2, 8, 2, 0, 1, 4, 2, 7, 8, 1, 9, 4, 1, 3, 9, 9, 4, 0, 5, 6, 7, 5, 8, 7, 1, 5, 1, 1, 7, 0, 0, 9, 4, 3, 9, 0 .byte 3, 5, 3, 9, 8, 6, 6, 4, 3, 7, 2, 8, 2, 7, 1, 1, 2, 6, 5, 3, 8, 2, 9, 9, 8, 7, 2, 4, 0, 7, 8, 4, 4, 7, 3, 0, 5, 3, 1, 9, 0, 1, 0, 4, 2, 9, 3, 5, 8, 6 .byte 8, 6, 5, 1, 5, 5, 0, 6, 0, 0, 6, 2, 9, 5, 8, 6, 4, 8, 6, 1, 5, 3, 2, 0, 7, 5, 2, 7, 3, 3, 7, 1, 9, 5, 9, 1, 9, 1, 4, 2, 0, 5, 1, 7, 2, 5, 5, 8, 2, 9 .byte 7, 1, 6, 9, 3, 8, 8, 8, 7, 0, 7, 7, 1, 5, 4, 6, 6, 4, 9, 9, 1, 1, 5, 5, 9, 3, 4, 8, 7, 6, 0, 3, 5, 3, 2, 9, 2, 1, 7, 1, 4, 9, 7, 0, 0, 5, 6, 9, 3, 8 .byte 5, 4, 3, 7, 0, 0, 7, 0, 5, 7, 6, 8, 2, 6, 6, 8, 4, 6, 2, 4, 6, 2, 1, 4, 9, 5, 6, 5, 0, 0, 7, 6, 4, 7, 1, 7, 8, 7, 2, 9, 4, 4, 3, 8, 3, 7, 7, 6, 0, 4 .byte 5, 3, 2, 8, 2, 6, 5, 4, 1, 0, 8, 7, 5, 6, 8, 2, 8, 4, 4, 3, 1, 9, 1, 1, 9, 0, 6, 3, 4, 6, 9, 4, 0, 3, 7, 8, 5, 5, 2, 1, 7, 7, 7, 9, 2, 9, 5, 1, 4, 5 .byte 3, 6, 1, 2, 3, 2, 7, 2, 5, 2, 5, 0, 0, 0, 2, 9, 6, 0, 7, 1, 0, 7, 5, 0, 8, 2, 5, 6, 3, 8, 1, 5, 6, 5, 6, 7, 1, 0, 8, 8, 5, 2, 5, 8, 3, 5, 0, 7, 2, 1 .byte 4, 5, 8, 7, 6, 5, 7, 6, 1, 7, 2, 4, 1, 0, 9, 7, 6, 4, 4, 7, 3, 3, 9, 1, 1, 0, 6, 0, 7, 2, 1, 8, 2, 6, 5, 2, 3, 6, 8, 7, 7, 2, 2, 3, 6, 3, 6, 0, 4, 5 .byte 1, 7, 4, 2, 3, 7, 0, 6, 9, 0, 5, 8, 5, 1, 8, 6, 0, 6, 6, 0, 4, 4, 8, 2, 0, 7, 6, 2, 1, 2, 0, 9, 8, 1, 3, 2, 8, 7, 8, 6, 0, 7, 3, 3, 9, 6, 9, 4, 1, 2 .byte 8, 1, 1, 4, 2, 6, 6, 0, 4, 1, 8, 0, 8, 6, 8, 3, 0, 6, 1, 9, 3, 2, 8, 4, 6, 0, 8, 1, 1, 1, 9, 1, 0, 6, 1, 5, 5, 6, 9, 4, 0, 5, 1, 2, 6, 8, 9, 6, 9, 2 .byte 5, 1, 9, 3, 4, 3, 2, 5, 4, 5, 1, 7, 2, 8, 3, 8, 8, 6, 4, 1, 9, 1, 8, 0, 4, 7, 0, 4, 9, 2, 9, 3, 2, 1, 5, 0, 5, 8, 6, 4, 2, 5, 6, 3, 0, 4, 9, 4, 8, 3 .byte 6, 2, 4, 6, 7, 2, 2, 1, 6, 4, 8, 4, 3, 5, 0, 7, 6, 2, 0, 1, 7, 2, 7, 9, 1, 8, 0, 3, 9, 9, 4, 4, 6, 9, 3, 0, 0, 4, 7, 3, 2, 9, 5, 6, 3, 4, 0, 6, 9, 1 .byte 1, 5, 7, 3, 2, 4, 4, 4, 3, 8, 6, 9, 0, 8, 1, 2, 5, 7, 9, 4, 5, 1, 4, 0, 8, 9, 0, 5, 7, 7, 0, 6, 2, 2, 9, 4, 2, 9, 1, 9, 7, 1, 0, 7, 9, 2, 8, 2, 0, 9 .byte 5, 5, 0, 3, 7, 6, 8, 7, 5, 2, 5, 6, 7, 8, 7, 7, 3, 0, 9, 1, 8, 6, 2, 5, 4, 0, 7, 4, 4, 9, 6, 9, 8, 4, 4, 5, 0, 8, 3, 3, 0, 3, 9, 3, 6, 8, 2, 1, 2, 6 .byte 1, 8, 3, 3, 6, 3, 8, 4, 8, 2, 5, 3, 3, 0, 1, 5, 4, 6, 8, 6, 1, 9, 6, 1, 2, 4, 3, 4, 8, 7, 6, 7, 6, 8, 1, 2, 9, 7, 5, 3, 4, 3, 7, 5, 9, 4, 6, 5, 1, 5 .byte 8, 0, 3, 8, 6, 2, 8, 7, 5, 9, 2, 8, 7, 8, 4, 9, 0, 2, 0, 1, 5, 2, 1, 6, 8, 5, 5, 5, 4, 8, 2, 8, 7, 1, 7, 2, 0, 1, 2, 1, 9, 2, 5, 7, 7, 6, 6, 9, 5, 4 .byte 7, 8, 1, 8, 2, 8, 3, 3, 7, 5, 7, 9, 9, 3, 1, 0, 3, 6, 1, 4, 7, 4, 0, 3, 5, 6, 8, 5, 6, 4, 4, 9, 0, 9, 5, 5, 2, 7, 0, 9, 7, 8, 6, 4, 7, 9, 7, 5, 8, 1 .byte 1, 6, 7, 2, 6, 3, 2, 0, 1, 0, 0, 4, 3, 6, 8, 9, 7, 8, 4, 2, 5, 5, 3, 5, 3, 9, 9, 2, 0, 9, 3, 1, 8, 3, 7, 4, 4, 1, 4, 9, 7, 8, 0, 6, 8, 6, 0, 9, 8, 4 .byte 4, 8, 4, 0, 3, 0, 9, 8, 1, 2, 9, 0, 7, 7, 7, 9, 1, 7, 9, 9, 0, 8, 8, 2, 1, 8, 7, 9, 5, 3, 2, 7, 3, 6, 4, 4, 7, 5, 6, 7, 5, 5, 9, 0, 8, 4, 8, 0, 3, 0 .byte 8, 7, 0, 8, 6, 9, 8, 7, 5, 5, 1, 3, 9, 2, 7, 1, 1, 8, 5, 4, 5, 1, 7, 0, 7, 8, 5, 4, 4, 1, 6, 1, 8, 5, 2, 4, 2, 4, 3, 2, 0, 6, 9, 3, 1, 5, 0, 3, 3, 2 .byte 5, 9, 9, 5, 9, 4, 0, 6, 8, 9, 5, 7, 5, 6, 5, 3, 6, 7, 8, 2, 1, 0, 7, 0, 7, 4, 9, 2, 6, 9, 6, 6, 5, 3, 7, 6, 7, 6, 3, 2, 6, 2, 3, 5, 4, 4, 7, 2, 1, 0 .byte 6, 9, 7, 9, 3, 9, 5, 0, 6, 7, 9, 6, 5, 2, 6, 9, 4, 7, 4, 2, 5, 9, 7, 7, 0, 9, 7, 3, 9, 1, 6, 6, 6, 9, 3, 7, 6, 3, 0, 4, 2, 6, 3, 3, 9, 8, 7, 0, 8, 5 .byte 4, 1, 0, 5, 2, 6, 8, 4, 7, 0, 8, 2, 9, 9, 0, 8, 5, 2, 1, 1, 3, 9, 9, 4, 2, 7, 3, 6, 5, 7, 3, 4, 1, 1, 6, 1, 8, 2, 7, 6, 0, 3, 1, 5, 0, 0, 1, 2, 7, 1 .byte 6, 5, 3, 7, 8, 6, 0, 7, 3, 6, 1, 5, 0, 1, 0, 8, 0, 8, 5, 7, 0, 0, 9, 1, 4, 9, 9, 3, 9, 5, 1, 2, 5, 5, 7, 0, 2, 8, 1, 9, 8, 7, 4, 6, 0, 0, 4, 3, 7, 5 .byte 3, 5, 8, 2, 9, 0, 3, 5, 3, 1, 7, 4, 3, 4, 7, 1, 7, 3, 2, 6, 9, 3, 2, 1, 2, 3, 5, 7, 8, 1, 5, 4, 9, 8, 2, 6, 2, 9, 7, 4, 2, 5, 5, 2, 7, 3, 7, 3, 0, 7 .byte 9, 4, 9, 5, 3, 7, 5, 9, 7, 6, 5, 1, 0, 5, 3, 0, 5, 9, 4, 6, 9, 6, 6, 0, 6, 7, 6, 8, 3, 1, 5, 6, 5, 7, 4, 3, 7, 7, 1, 6, 7, 4, 0, 1, 8, 7, 5, 2, 7, 5 .byte 8, 8, 9, 0, 2, 8, 0, 2, 5, 7, 1, 7, 3, 3, 2, 2, 9, 6, 1, 9, 1, 7, 6, 6, 6, 8, 7, 1, 3, 8, 1, 9, 9, 3, 1, 8, 1, 1, 0, 4, 8, 7, 7, 0, 1, 9, 0, 2, 7, 1 .byte 2, 5, 2, 6, 7, 6, 8, 0, 2, 7, 6, 0, 7, 8, 0, 0, 3, 0, 1, 3, 6, 7, 8, 6, 8, 0, 9, 9, 2, 5, 2, 5, 4, 6, 3, 4, 0, 1, 0, 6, 1, 6, 3, 2, 8, 6, 6, 5, 2, 6 .byte 3, 6, 2, 7, 0, 2, 1, 8, 5, 4, 0, 4, 9, 7, 7, 0, 5, 5, 8, 5, 6, 2, 9, 9, 4, 6, 5, 8, 0, 6, 3, 6, 2, 3, 7, 9, 9, 3, 1, 4, 0, 7, 4, 6, 2, 5, 5, 9, 6, 2 .byte 2, 4, 0, 7, 4, 4, 8, 6, 9, 0, 8, 2, 3, 1, 1, 7, 4, 9, 7, 7, 7, 9, 2, 3, 6, 5, 4, 6, 6, 2, 5, 7, 2, 4, 6, 9, 2, 3, 3, 2, 2, 8, 1, 0, 9, 1, 7, 1, 4, 1 .byte 9, 1, 4, 3, 0, 2, 8, 8, 1, 9, 7, 1, 0, 3, 2, 8, 8, 5, 9, 7, 8, 0, 6, 6, 6, 9, 7, 6, 0, 8, 9, 2, 9, 3, 8, 6, 3, 8, 2, 8, 5, 0, 2, 5, 3, 3, 3, 4, 0, 3 .byte 3, 4, 4, 1, 3, 0, 6, 5, 5, 7, 8, 0, 1, 6, 1, 2, 7, 8, 1, 5, 9, 2, 1, 8, 1, 5, 0, 0, 5, 5, 6, 1, 8, 6, 8, 8, 3, 6, 4, 6, 8, 4, 2, 0, 0, 9, 0, 4, 7, 0 .byte 2, 3, 0, 5, 3, 0, 8, 1, 1, 7, 2, 8, 1, 6, 4, 3, 0, 4, 8, 7, 6, 2, 3, 7, 9, 1, 9, 6, 9, 8, 4, 2, 4, 8, 7, 2, 5, 5, 0, 3, 6, 6, 3, 8, 7, 8, 4, 5, 8, 3 .byte 1, 1, 4, 8, 7, 6, 9, 6, 9, 3, 2, 1, 5, 4, 9, 0, 2, 8, 1, 0, 4, 2, 4, 0, 2, 0, 1, 3, 8, 3, 3, 5, 1, 2, 4, 4, 6, 2, 1, 8, 1, 4, 4, 1, 7, 7, 3, 4, 7, 0 .byte 6, 3, 7, 8, 3, 2, 9, 9, 4, 9, 0, 6, 3, 6, 2, 5, 9, 6, 6, 6, 4, 9, 8, 5, 8, 7, 6, 1, 8, 2, 2, 1, 2, 2, 5, 2, 2, 5, 5, 1, 2, 4, 8, 6, 7, 6, 4, 5, 3, 3 .byte 6, 7, 7, 2, 0, 1, 8, 6, 9, 7, 1, 6, 9, 8, 5, 4, 4, 3, 1, 2, 4, 1, 9, 5, 7, 2, 4, 0, 9, 9, 1, 3, 9, 5, 9, 0, 0, 8, 9, 5, 2, 3, 1, 0, 0, 5, 8, 8, 2, 2 .byte 9, 5, 5, 4, 8, 2, 5, 5, 3, 0, 0, 2, 6, 3, 5, 2, 0, 7, 8, 1, 5, 3, 2, 2, 9, 6, 7, 9, 6, 2, 4, 9, 4, 8, 1, 6, 4, 1, 9, 5, 3, 8, 6, 8, 2, 1, 8, 7, 7, 4 .byte 7, 6, 0, 8, 5, 3, 2, 7, 1, 3, 2, 2, 8, 5, 7, 2, 3, 1, 1, 0, 4, 2, 4, 8, 0, 3, 4, 5, 6, 1, 2, 4, 8, 6, 7, 6, 9, 7, 0, 6, 4, 5, 0, 7, 9, 9, 5, 2, 3, 6 .byte 3, 7, 7, 7, 4, 2, 4, 2, 5, 3, 5, 4, 1, 1, 2, 9, 1, 6, 8, 4, 2, 7, 6, 8, 6, 5, 5, 3, 8, 9, 2, 6, 2, 0, 5, 0, 2, 4, 9, 1, 0, 3, 2, 6, 5, 7, 2, 9, 6, 7 .byte 2, 3, 7, 0, 1, 9, 1, 3, 2, 7, 5, 7, 2, 5, 6, 7, 5, 2, 8, 5, 6, 5, 3, 2, 4, 8, 2, 5, 8, 2, 6, 5, 4, 6, 3, 0, 9, 2, 2, 0, 7, 0, 5, 8, 5, 9, 6, 5, 2, 2 .byte 2, 9, 7, 9, 8, 8, 6, 0, 2, 7, 2, 2, 5, 8, 3, 3, 1, 9, 1, 3, 1, 2, 6, 3, 7, 5, 1, 4, 7, 3, 4, 1, 9, 9, 4, 8, 8, 9, 5, 3, 4, 7, 6, 5, 7, 4, 5, 5, 0, 1 .byte 1, 8, 4, 9, 5, 7, 0, 1, 4, 5, 4, 8, 7, 9, 2, 8, 8, 9, 8, 4, 8, 5, 6, 8, 2, 7, 7, 2, 6, 0, 7, 7, 7, 1, 3, 7, 2, 1, 4, 0, 3, 7, 9, 8, 8, 7, 9, 7, 1, 5 .byte 3, 8, 2, 9, 8, 2, 0, 3, 7, 8, 3, 0, 3, 1, 4, 7, 3, 5, 2, 7, 7, 2, 1, 5, 8, 0, 3, 4, 8, 1, 4, 4, 5, 1, 3, 4, 9, 1, 3, 7, 3, 2, 2, 6, 6, 5, 1, 3, 8, 1 .byte 3, 4, 8, 2, 9, 5, 4, 3, 8, 2, 9, 1, 9, 9, 9, 1, 8, 1, 8, 0, 2, 7, 8, 9, 1, 6, 5, 2, 2, 4, 3, 1, 0, 2, 7, 3, 9, 2, 2, 5, 1, 1, 2, 2, 8, 6, 9, 5, 3, 9 .byte 4, 0, 9, 5, 7, 9, 5, 3, 0, 6, 6, 4, 0, 5, 2, 3, 2, 6, 3, 2, 5, 3, 8, 0, 4, 4, 1, 0, 0, 0, 5, 9, 6, 5, 4, 9, 3, 9, 1, 5, 9, 8, 7, 9, 5, 9, 3, 6, 3, 5 .byte 2, 9, 7, 4, 6, 1, 5, 2, 1, 8, 5, 5, 0, 2, 3, 7, 1, 3, 0, 7, 6, 4, 2, 2, 5, 5, 1, 2, 1, 1, 8, 3, 6, 9, 3, 8, 0, 3, 5, 8, 0, 3, 8, 8, 5, 8, 4, 9, 0, 3 .byte 4, 1, 6, 9, 8, 1, 1, 6, 2, 2, 2, 0, 7, 2, 9, 7, 7, 1, 8, 6, 1, 5, 8, 2, 3, 6, 6, 7, 8, 4, 2, 4, 6, 8, 9, 1, 5, 7, 9, 9, 3, 5, 3, 2, 9, 6, 1, 9, 2, 2 .byte 6, 2, 4, 6, 7, 9, 5, 7, 1, 9, 4, 4, 0, 1, 2, 6, 9, 0, 4, 3, 8, 7, 7, 1, 0, 7, 2, 7, 5, 0, 4, 8, 1, 0, 2, 3, 9, 0, 8, 9, 5, 5, 2, 3, 5, 9, 7, 4, 5, 7 .byte 2, 3, 1, 8, 9, 7, 0, 6, 7, 7, 2, 5, 4, 7, 9, 1, 5, 0, 6, 1, 5, 0, 5, 5, 0, 4, 9, 5, 3, 9, 2, 2, 9, 7, 9, 5, 3, 0, 9, 0, 1, 1, 2, 9, 9, 6, 7, 5, 1, 9 .byte 8, 6, 1, 8, 8, 0, 8, 8, 2, 2, 5, 8, 7, 5, 3, 1, 4, 5, 2, 9, 5, 8, 4, 0, 9, 9, 2, 5, 1, 2, 0, 3, 8, 2, 9, 0, 0, 9, 4, 0, 7, 7, 7, 0, 7, 7, 5, 6, 7, 2 .byte 1, 1, 3, 0, 6, 7, 3, 9, 7, 0, 8, 3, 0, 4, 7, 2, 4, 4, 8, 3, 8, 1, 6, 5, 3, 3, 8, 7, 3, 5, 0, 2, 3, 4, 0, 8, 4, 5, 6, 4, 7, 0, 5, 8, 0, 7, 7, 3, 0, 8 .byte 8, 2, 9, 5, 9, 1, 7, 4, 7, 6, 7, 1, 4, 0, 3, 6, 3, 1, 9, 8, 0, 0, 8, 1, 8, 7, 1, 2, 9, 0, 1, 1, 8, 7, 5, 4, 9, 1, 3, 1, 0, 5, 4, 7, 1, 2, 6, 5, 8, 1 .byte 9, 7, 6, 2, 3, 3, 3, 1, 0, 4, 4, 8, 1, 8, 3, 8, 6, 2, 6, 9, 5, 1, 5, 4, 5, 6, 3, 3, 4, 9, 2, 6, 3, 6, 6, 5, 7, 2, 8, 9, 7, 5, 6, 3, 4, 0, 0, 5, 0, 0 .byte 4, 2, 8, 4, 6, 2, 8, 0, 1, 8, 3, 5, 1, 7, 0, 7, 0, 5, 2, 7, 8, 3, 1, 8, 3, 9, 4, 2, 5, 8, 8, 2, 1, 4, 5, 5, 2, 1, 2, 2, 7, 2, 5, 1, 2, 5, 0, 3, 2, 7 .byte 5, 5, 1, 2, 1, 6, 0, 3, 5, 4, 6, 9, 8, 1, 2, 0, 0, 5, 8, 1, 7, 6, 2, 1, 6, 5, 2, 1, 2, 8, 2, 7, 6, 5, 2, 7, 5, 1, 6, 9, 1, 2, 9, 6, 8, 9, 7, 7, 8, 9 .byte 3, 2, 2, 3, 8, 1, 9, 5, 7, 3, 4, 3, 2, 9, 3, 3, 9, 9, 4, 6, 4, 3, 7, 5, 0, 1, 9, 0, 7, 8, 3, 6, 9, 4, 5, 7, 6, 5, 8, 8, 3, 3, 5, 2, 3, 9, 9, 8, 8, 6 .byte 7, 5, 5, 0, 6, 1, 6, 4, 9, 6, 5, 1, 8, 4, 7, 7, 5, 1, 8, 0, 7, 3, 8, 1, 6, 8, 8, 3, 7, 8, 6, 1, 0, 9, 1, 5, 2, 7, 3, 5, 7, 9, 2, 9, 7, 0, 1, 3, 3, 7 .byte 6, 2, 1, 7, 7, 8, 4, 2, 7, 5, 2, 1, 9, 2, 6, 2, 3, 4, 0, 1, 9, 4, 2, 3, 9, 9, 6, 3, 9, 1, 6, 8, 0, 4, 4, 9, 8, 3, 9, 9, 3, 1, 7, 3, 3, 1, 2, 7, 3, 1 .byte 3, 2, 9, 2, 4, 1, 8, 5, 7, 0, 7, 1, 4, 7, 3, 4, 9, 5, 6, 6, 9, 1, 6, 6, 7, 4, 6, 8, 7, 6, 3, 4, 6, 6, 0, 9, 1, 5, 0, 3, 5, 9, 1, 4, 6, 7, 7, 5, 0, 4 .byte 9, 9, 5, 1, 8, 6, 7, 1, 4, 3, 0, 2, 3, 5, 2, 1, 9, 6, 2, 8, 8, 9, 4, 8, 9, 0, 1, 0, 2, 4, 2, 3, 3, 2, 5, 1, 1, 6, 9, 1, 3, 6, 1, 9, 6, 2, 6, 6, 2, 2 .byte 7, 3, 2, 6, 7, 4, 6, 0, 8, 0, 0, 5, 9, 1, 5, 4, 7, 4, 7, 1, 8, 3, 0, 7, 9, 8, 3, 9, 2, 8, 6, 8, 5, 3, 5, 2, 0, 6, 9, 4, 6, 9, 4, 4, 5, 4, 0, 7, 2, 4 .byte 7, 6, 8, 4, 1, 8, 2, 2, 5, 2, 4, 6, 7, 4, 4, 1, 7, 1, 6, 1, 5, 1, 4, 0, 3, 6, 4, 2, 7, 9, 8, 2, 2, 7, 3, 3, 4, 8, 0, 5, 5, 5, 5, 6, 2, 1, 4, 8, 1, 8 .byte 9, 7, 1, 4, 2, 6, 1, 7, 9, 1, 0, 3, 4, 2, 5, 9, 8, 6, 4, 7, 2, 0, 4, 5, 1, 6, 8, 9, 3, 9, 8, 9, 4, 2, 2, 1, 7, 9, 8, 2, 6, 0, 8, 8, 0, 7, 6, 8, 5, 2 .byte 8, 7, 7, 8, 3, 6, 4, 6, 1, 8, 2, 7, 9, 9, 3, 4, 6, 3, 1, 3, 7, 6, 7, 7, 5, 4, 3, 0, 7, 8, 0, 9, 3, 6, 3, 3, 3, 3, 0, 1, 8, 9, 8, 2, 6, 4, 2, 0, 9, 0 .byte 1, 0, 8, 4, 8, 8, 0, 2, 5, 2, 1, 6, 7, 4, 6, 7, 0, 8, 8, 3, 2, 1, 5, 1, 2, 0, 1, 8, 5, 8, 8, 3, 5, 4, 3, 2, 2, 3, 8, 1, 2, 8, 7, 6, 9, 5, 2, 7, 8, 6 .byte 7, 1, 3, 2, 9, 6, 1, 2, 4, 7, 4, 7, 8, 2, 4, 6, 4, 5, 3, 8, 6, 3, 6, 9, 9, 3, 0, 0, 9, 0, 4, 9, 3, 1, 0, 3, 6, 3, 6, 1, 9, 7, 6, 3, 8, 7, 8, 0, 3, 9 .byte 6, 2, 1, 8, 4, 0, 7, 3, 5, 7, 2, 3, 9, 9, 7, 9, 4, 2, 2, 3, 4, 0, 6, 2, 3, 5, 3, 9, 3, 8, 0, 8, 3, 3, 9, 6, 5, 1, 3, 2, 7, 4, 0, 8, 0, 1, 1, 1, 1, 6 .byte 6, 6, 6, 2, 7, 8, 9, 1, 9, 8, 1, 4, 8, 8, 0, 8, 7, 7, 9, 7, 9, 4, 1, 8, 7, 6, 8, 7, 6, 1, 4, 4, 2, 3, 0, 0, 3, 0, 9, 8, 4, 4, 9, 0, 8, 5, 1, 4, 1, 1 .byte 6, 0, 6, 6, 1, 8, 2, 6, 2, 9, 3, 6, 8, 2, 8, 3, 6, 7, 6, 4, 7, 4, 4, 7, 7, 9, 2, 3, 9, 1, 8, 0, 3, 3, 5, 1, 1, 0, 9, 8, 9, 0, 6, 9, 7, 9, 0, 7, 1, 4 .byte 8, 5, 7, 8, 6, 9, 4, 4, 0, 8, 9, 5, 5, 2, 9, 9, 0, 6, 5, 3, 6, 4, 0, 4, 4, 7, 4, 2, 5, 5, 7, 6, 0, 8, 3, 6, 5, 9, 9, 7, 6, 6, 4, 5, 7, 9, 5, 0, 9, 6 .byte 6, 6, 0, 2, 4, 3, 9, 6, 4, 0, 9, 9, 0, 5, 3, 8, 9, 6, 0, 7, 1, 2, 0, 1, 9, 8, 2, 1, 9, 9, 7, 6, 0, 4, 7, 5, 9, 9, 4, 9, 0, 1, 9, 7, 2, 3, 0, 2, 9, 7 .byte 6, 4, 9, 1, 3, 9, 8, 2, 6, 8, 0, 0, 3, 2, 9, 7, 3, 1, 5, 6, 0, 3, 7, 1, 2, 0, 0, 4, 1, 3, 7, 7, 9, 0, 3, 7, 8, 5, 5, 6, 6, 0, 8, 5, 0, 8, 9, 2, 5, 2 .byte 1, 6, 7, 3, 0, 9, 3, 9, 3, 1, 9, 8, 7, 2, 7, 5, 0, 2, 7, 5, 4, 6, 8, 9, 0, 6, 9, 0, 3, 7, 0, 7, 5, 3, 9, 4, 1, 3, 0, 4, 2, 6, 5, 2, 3, 1, 5, 0, 1, 1 .byte 9, 4, 8, 0, 9, 3, 7, 7, 2, 4, 5, 0, 4, 8, 7, 9, 5, 1, 5, 0, 9, 5, 4, 1, 0, 0, 9, 2, 1, 6, 4, 5, 8, 6, 3, 7, 5, 4, 7, 1, 0, 5, 9, 8, 4, 3, 6, 7, 9, 1 .byte 7, 8, 6, 3, 9, 1, 6, 7, 0, 2, 1, 1, 8, 7, 4, 9, 2, 4, 3, 1, 9, 9, 5, 7, 0, 0, 6, 4, 1, 9, 1, 7, 9, 6, 9, 7, 7, 7, 5, 9, 9, 0, 2, 8, 3, 0, 0, 6, 9, 9 .byte 1, 5, 3, 6, 8, 7, 1, 3, 7, 1, 1, 9, 3, 6, 6, 1, 4, 9, 5, 2, 8, 1, 1, 3, 0, 5, 8, 7, 6, 3, 8, 0, 2, 7, 8, 4, 1, 0, 7, 5, 4, 4, 4, 9, 7, 3, 3, 0, 7, 8 .byte 4, 0, 7, 8, 9, 9, 2, 3, 1, 1, 5, 5, 3, 5, 5, 6, 2, 5, 6, 1, 1, 4, 2, 3, 2, 2, 4, 2, 3, 2, 5, 5, 0, 3, 3, 6, 8, 5, 4, 4, 2, 4, 8, 8, 9, 1, 7, 3, 5, 3 .byte 4, 4, 8, 8, 9, 9, 1, 1, 5, 0, 1, 4, 4, 0, 6, 4, 8, 0, 2, 0, 3, 6, 9, 0, 6, 8, 0, 6, 3, 9, 6, 0, 6, 7, 2, 3, 2, 2, 1, 9, 3, 2, 0, 4, 1, 4, 9, 5, 3, 5 .byte 4, 1, 5, 0, 3, 1, 2, 8, 8, 8, 0, 3, 3, 9, 5, 3, 6, 0, 5, 3, 2, 9, 9, 3, 4, 0, 3, 6, 8, 0, 0, 6, 9, 7, 7, 7, 1, 0, 6, 5, 0, 5, 6, 6, 6, 3, 1, 9, 5, 4 .byte 8, 1, 2, 3, 4, 8, 8, 0, 6, 7, 3, 2, 1, 0, 1, 4, 6, 7, 3, 9, 0, 5, 8, 5, 6, 8, 5, 5, 7, 9, 3, 4, 5, 8, 1, 4, 0, 3, 6, 2, 7, 8, 2, 2, 7, 0, 3, 2, 8, 0 .byte 8, 2, 6, 1, 6, 5, 7, 0, 7, 7, 3, 9, 4, 8, 3, 2, 7, 5, 9, 2, 2, 3, 2, 8, 4, 5, 9, 4, 1, 7, 0, 6, 5, 2, 5, 0, 9, 4, 5, 1, 2, 3, 2, 5, 2, 3, 0, 6, 0, 8 .byte 2, 2, 9, 1, 8, 8, 0, 2, 0, 5, 8, 7, 7, 7, 3, 1, 9, 7, 1, 9, 8, 3, 9, 4, 5, 0, 1, 8, 0, 8, 8, 8, 0, 7, 2, 4, 2, 9, 6, 6, 1, 9, 8, 0, 8, 1, 1, 1, 9, 7 .byte 7, 7, 1, 5, 8, 5, 4, 2, 5, 0, 2, 0, 1, 6, 5, 4, 5, 0, 9, 0, 4, 1, 3, 2, 4, 5, 8, 0, 9, 7, 8, 6, 8, 8, 2, 7, 7, 8, 9, 4, 8, 7, 2, 1, 8, 5, 9, 6, 1, 7 .byte 7, 2, 1, 0, 7, 8, 3, 8, 4, 3, 5, 0, 6, 9, 1, 8, 6, 1, 5, 5, 4, 3, 5, 6, 6, 2, 8, 8, 4, 0, 6, 2, 2, 5, 7, 4, 7, 3, 6, 9, 2, 2, 8, 4, 5, 0, 9, 5, 1, 6 .byte 2, 0, 8, 4, 9, 6, 0, 3, 9, 8, 0, 1, 3, 4, 0, 0, 1, 7, 2, 3, 9, 3, 0, 6, 7, 1, 6, 6, 6, 8, 2, 3, 5, 5, 5, 2, 4, 5, 2, 5, 2, 8, 0, 4, 6, 0, 9, 7, 2, 2 .byte 5, 3, 5, 0, 3, 5, 3, 4, 2, 2, 6, 4, 7, 2, 5, 2, 4, 2, 5, 0, 8, 7, 4, 0, 5, 4, 0, 7, 5, 5, 9, 1, 7, 8, 9, 7, 8, 1, 2, 6, 4, 3, 3, 0, 3, 3, 1, 6, 9, 0 .section .rodata .align 2 numstring: .asciz "%d" nlstring: .asciz "\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r10, lr} ldr col_num, =col_nums loopstart: ldr row1, =buffer ldr tmp, =col_nums add row1, row1, tmp col_loop: mov col_sum, 0 ldr row_num, =row_nums sub row1, row1, 1 mov data_ptr, row1 subs col_num, col_num, 1 blt printme row_loop: ldrb byte, [data_ptr], col_offset add col_sum, col_sum, byte subs row_num, row_num, 1 bne row_loop mov r0, col_num bl get_3_result mov tmp, r0 add col_sum, col_sum, tmp mov r0, col_sum mov r1, col_num bl put_3_result b col_loop printme: ldr row1, =ten ldr data_ptr, =result next_digit: ldrb r1, [data_ptr], 1 ldr r0, =numstring bl printf subs row1, row1, 1 bne next_digit last: ldr r0, =nlstring bl printf mov r0, 0 ldmfd sp!, {r4-r10, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux .global get_3_result .type get_3_result, %function get_3_result: stmfd sp!, {data_ptr, tmp, lr} ldr data_ptr, =result add data_ptr, data_ptr, r0 ldrb byte, [data_ptr], 1 mov const, hundred mul byte, byte, const mov tmp, byte ldrb byte, [data_ptr], 1 mov const, ten mul byte, byte, const add tmp, tmp, byte ldrb byte, [data_ptr], 1 add tmp, tmp, byte mov r0, tmp ldmfd sp!, {data_ptr, tmp, pc} .global put_3_result .type put_3_result, %function put_3_result: stmfd sp!, {data_ptr, lr} ldr data_ptr, =result add data_ptr, data_ptr, r1 add data_ptr, data_ptr, 2 bl divide_by_10_remainder strb r1, [data_ptr], -1 bl divide_by_10_remainder strb r1, [data_ptr], -1 strb r0, [data_ptr] ldmfd sp!, {data_ptr, pc}
Description of problem

The following iterative sequence is defined for the set of positive integers:

n →n/2 (n is even)
n → 3n + 1 (n is odd)

Using the rule above and starting with 13, we generate the following sequence:

13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1

It can be seen that this sequence (starting at 13 and finishing at 1) contains 10 terms. Although it has not been proved yet (Collatz Problem), it is thought that all starting numbers finish at 1.

Which starting number, under one million, produces the longest chain?

NOTE: Once the chain starts the terms are allowed to go above one million.

014.s

.syntax unified .equ last, 1000000 .equ first, 500000 .align 4 maxi .req r4 maxv .req r5 counter .req r6 i .req r7 j_hi .req r8 j_lo .req r9 limit .req r10 .section .rodata .align 2 numstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r10, lr} mov maxi, 0 mov maxv, 0 ldr i, =first ldr limit, =last loopstart: mov counter, 0 mov j_lo, i inner: cmp j_lo, 1 beq inc_counter mov r0, j_hi mov r1, j_lo bl next_term mov j_hi, r0 mov j_lo, r1 add counter, counter, 1 b inner inc_counter: add counter, counter, 1 cmp maxv, counter movlt maxv, counter movlt maxi, i adds i, i, 1 cmp i, limit blt loopstart printme: mov r1, maxi ldr r0, =numstring bl printf mov r0, 0 ldmfd sp!, {r4-r10, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux .global next_term .type next_term, %function next_term: stmfd sp!, {lr} ands r2, r1, 1 bne odd movs r0, r0, lsr 1 @ leave bit 0 in carry rrx r1, r1 @ then get it and push it on b next_term_last odd: adds r2, r1, r1 adc r0, r0, 0 adds r2, r2, r1 adc r0, r0, 0 adds r2, r2, 1 adc r0, r0, 0 mov r1, r2 @ r1 is 3n+1 - any overflow to r0 next_term_last: ldmfd sp!, {pc}
Description of problem

Starting in the top left corner of a 2×2 grid, and only being able to move to the right and down, there are exactly 6 routes to the bottom right corner.

How many such routes are there through a 20×20 grid?

015.s

.syntax unified .align 4 .macro factor2 d n ldr i, =start_offset inext\@: ldr i_ptr, =\d add i_ptr, i_ptr, i ldrb dtmp, [i_ptr], -1 ldr j, =start_offset jnext\@: cmp dtmp, 1 beq nexti\@ ldr j_ptr, =\n add j_ptr, j_ptr, j ldrb ntmp, [j_ptr], -1 cmp ntmp, dtmp @ if numerator < denominator use next numerator element blt nextj\@ mov tmp, 0 mov r0, 0 mod_start\@: add r0, r0, 1 add tmp, tmp, dtmp cmp ntmp, tmp bgt mod_start\@ blt nextj\@ strb r0, [j_ptr, 1] mov dtmp, 1 strb dtmp, [i_ptr, 1] nextj\@: subs j, j, 1 bgt jnext\@ nexti\@: subs i, i, 1 bgt inext\@ .endm .equ num, 20 .equ start_offset, 19 i .req r4 j .req r5 i_ptr .req r6 j_ptr .req r7 res_hi .req r6 res_lo .req r7 tmp .req r8 dtmp .req r9 ntmp .req r10 .section .data numerator: .byte 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 denominator: .byte 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 .section .rodata .align 2 llustring: .asciz "%llu\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r10, lr} factor2 denominator numerator nloop: ldr r0, =numerator bl needs_factor cmp r0, 0 beq printme factor2 numerator denominator ldr r0, =denominator bl needs_factor cmp r0, 0 beq printme factor2 denominator numerator b nloop printme: ldr j, =start_offset ldr j_ptr, =numerator add j_ptr, j_ptr, j mov r0, 1 mov r1, 0 mnumerator: ldrb ntmp, [j_ptr], -1 mov r2, ntmp mov r3, 0 bl mul_64to64 subs j, j, 1 bge mnumerator mov r2, r0 mov r3, r1 ldr r0, =llustring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r10, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux .align 2 .global needs_factor .type needs_factor, %function needs_factor: stmfd sp!, {lr} ldr r1, =start_offset add r2, r0, r1 next_byte: ldrb r3, [r2], -1 cmp r3, 1 bne ret1 subs r1, r1, 1 bne next_byte mov r0, 0 b leave ret1: mov r0, 1 leave: ldmfd sp!, {pc}

mul_64to64.s

# long long mul_64to64 (long long b, long long c) b_0 .req r0 @ b bits [31:00] (b low) b_1 .req r1 @ b bits [63:32] (b high) c_0 .req r2 @ c bits [31:00] (c low) c_1 .req r3 @ c bits [63:32] (c high) a_0 .req r4 @ a bits [31:00] (a low-low) a_1 .req r5 @ a bits [63:32] (a low-high) .globl mul_64to64 .align 2 .text mul_64to64: nop stmfd sp!, {r4, r5, lr} @ 64-bit a = 64-bit b * 64-bit c umull a_0, a_1, b_0, c_0 @ low*low mla a_1, b_0, c_1, a_1 @ low*high mla a_1, b_1, c_0, a_1 @ high*low @ return wrapper mov r0, a_0 mov r1, a_1 ldmfd sp!, {r4, r5, pc}
Description of problem

215 = 32768 and the sum of its digits is 3 + 2 + 7 + 6 + 8 = 26.

What is the sum of the digits of the number 21000?

016.s

.syntax unified .equ power,1000 .equ iLENGTH,302 .equ scalar2,2 .section .rodata sum_string: .asciz "%d\n" .section .data input: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 .section bss .lcomm output,iLENGTH .text .align 2 .global main .type main, %function main: ldr r4, =power next: ldr r0, =input ldr r1, =iLENGTH ldr r2, =scalar2 ldr r3, =output bl mul_digit_string ldr r0, =output ldr r1, =iLENGTH ldr r2, =input bl copybytes subs r4, r4, 1 bne next ldr r0, =output ldr r1, =iLENGTH bl sum_output mov r1, r0 ldr r0, =sum_string bl printf mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux # printbytes takes input pointer in r0, input length in r1 and writes printable vector to r2 (with trailing null) printbytes: stmfd sp!, {lr} printloop: ldrb r3, [r0], 1 add r3, r3, 48 strb r3, [r2], 1 subs r1, r1, 1 bne printloop mov r3, 0 strb r3, [r2], 1 ldmfd sp!, {pc} # copybytes takes input pointer in r0, input length in r1 and copies vector to r2 copybytes: stmfd sp!, {lr} copyloop: ldrb r3, [r0], 1 strb r3, [r2], 1 subs r1, r1, 1 bne copyloop ldmfd sp!, {pc} # sum_output sums the elements of the r1 elements of the vector passed in r0 and returns the sum in r0 sum_output: stmfd sp!, {lr} mov r2, 0 sumloop: ldrb r3, [r0], 1 add r2, r2, r3 subs r1, r1, 1 bne sumloop mov r0, r2 ldmfd sp!, {pc}

mul_digit_string.s

.syntax unified # this subroutine multiplies the byte array at r0, length r1 by the digit r2 # and stores to r0 with output length in r1 # # inputs # r0 - pointer to input vector # r1 - length of input vector # r2 - multiplicand # r3 - pointer to output vector # # outputs # r0 - pointer to output vector # r1 - length of output vector iptr .req r4 optr .req r5 offset .req r6 tmp .req r7 carry .req r8 multiplier .req r9 cell .req r10 .global mul_digit_string .type mul_digit_string, %function .text .align 2 mul_digit_string: stmfd sp!, {r4-r10, lr} teq r2, 0 bne mds_one moveq r0, r3 moveq tmp, r3 moveq r1, 1 bleq clearbytes mov r0, tmp moveq r1, 1 b mds_end mds_one: teq r2, 1 bne mds_start moveq r2, r3 moveq tmp, r0 moveq cell, r1 bleq copybytes mov r0, tmp mov r1, cell b mds_end mds_start: mov carry, r0 mov tmp, r1 mov offset, r3 mov r0, r3 add r1, r1, 1 bl clearbytes mov r0, carry mov r1, tmp mov r3, offset mov carry, 0 mov multiplier, r2 mov offset, r1 sub offset, offset, 1 add iptr, r0, offset add optr, r3, offset add offset, offset, 1 mov tmp, r1 mds_loopstart: ldrb cell, [iptr], -1 mul r0, cell, multiplier add r0, r0, carry bl divide_by_10_remainder strb r1, [optr], -1 mov carry, r0 subs offset, offset, 1 beq mds_last b mds_loopstart mds_last: cmp carry, 0 addeq r0, optr, 1 moveq r1, tmp strbne carry, [optr] movne r0, optr addne r1, tmp, 1 mds_end: ldmfd sp!, {r4-r10, pc}

test_mul_digit_string.s

.syntax unified .macro multiplystring num ldr r0, =input ldr r1, =iLENGTH ldr r2, =\num ldr r3, =output bl mul_digit_string ldr r2, =print_vector bl printbytes ldr r1, =\num ldr r2, =print_vector ldr r0, =outstring bl printf .endm .equ iLENGTH,4 .equ ipLENGTH,iLENGTH+1 .equ oLENGTH,iLENGTH+1 .equ opLENGTH,oLENGTH+1 .equ scalar0,0 .equ scalar1,1 .equ scalar2,2 .equ scalar3,3 .equ scalar8,8 number .req r4 .section .rodata .align 2 input: .byte 4, 3, 2, 7 instring: .asciz "input string is %s\n" outstring: .asciz "scalar is %d and output string is %s\n" .section bss .lcomm print_vector,ipLENGTH .lcomm output,oLENGTH .text .align 2 .global main .type main, %function main: ldr r0, =input ldr r1, =iLENGTH ldr r2, =print_vector bl printbytes ldr r1, =print_vector ldr r0, =instring bl printf multiplystring scalar3 multiplystring scalar0 multiplystring scalar1 multiplystring scalar8 multiplystring scalar2 mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3 + 3 + 5 + 4 + 4 = 19 letters used in total.

If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?


NOTE: Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.

017.s

.syntax unified .equ one,3 .equ two,3 .equ three,5 .equ four,4 .equ five,4 .equ six,3 .equ seven,5 .equ eight,5 .equ nine,4 .equ ten,3 .equ eleven,6 .equ twelve,6 .equ thirteen,8 .equ fourteen,8 .equ fifteen,7 .equ sixteen,7 .equ seventeen,9 .equ eighteen,8 .equ nineteen,8 .equ twenty,6 .equ thirty,6 .equ forty,5 .equ fifty,5 .equ sixty,5 .equ seventy,7 .equ eighty,6 .equ ninety,6 .equ hundred,7 .equ thousand,8 .equ and,3 .macro units add r0, r0, one add r0, r0, two add r0, r0, three add r0, r0, four add r0, r0, five add r0, r0, six add r0, r0, seven add r0, r0, eight add r0, r0, nine .endm .macro teens add r0, r0, ten add r0, r0, eleven add r0, r0, twelve add r0, r0, thirteen add r0, r0, fourteen add r0, r0, fifteen add r0, r0, sixteen add r0, r0, seventeen add r0, r0, eighteen add r0, r0, nineteen .endm .macro tens tenmul ldr r1, =\tenmul mov r2, 10 mul r1, r1, r2 add r0, r0, r1 units .endm .macro alltens teens tens twenty tens thirty tens forty tens fifty tens sixty tens seventy tens eighty tens ninety .endm .macro hundreds hundredmul ldr r1, =\hundredmul add r1, r1, hundred mov r2, 100 mul r1, r1, r2 add r0, r0, r1 ldr r1, =and mov r2, 99 mul r1, r1, r2 add r0, r0, r1 units alltens .endm .section .rodata sum_string: .asciz "%d\n" .text .align 2 .global main .type main, %function main: mov r0, 0 units alltens hundreds one hundreds two hundreds three hundreds four hundreds five hundreds six hundreds seven hundreds eight hundreds nine add r0, r0, one add r0, r0, thousand mov r1, r0 ldr r0, =sum_string bl printf mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top to bottom is 23.

3
7 4
2 4 6
8 5 9 3

That is, 3 + 7 + 4 + 9 = 23.

Find the maximum total from top to bottom of the triangle below:

75
95 64
17 47 82
18 35 87 10
20 04 82 47 65
19 01 23 75 03 34
88 02 77 73 07 63 67
99 65 04 28 06 16 70 92
41 41 26 56 83 40 80 70 33
41 48 72 33 47 32 37 16 94 29
53 71 44 65 25 43 91 52 97 51 14
70 11 33 28 77 73 17 78 39 68 17 57
91 71 52 38 17 14 91 43 58 50 27 29 48
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23

NOTE: As there are only 16384 routes, it is possible to solve this problem by trying every route. However, Problem 67, is the same challenge with a triangle containing one-hundred rows; it cannot be solved by brute force, and requires a clever method! ;o)

018.s

.syntax unified .equ maxij, 14 .equ width, 2 .equ logwidth, 1 .align 4 iptr .req r0 tmp .req r1 icount .req r4 jcount .req r5 maxc .req r6 jptr .req r7 cell .req r8 .macro get_element i, j ldr iptr, =last mov r1, \i add iptr, iptr, r1 sub iptr, iptr, 1 ldrb tmp, [iptr] ldr jptr, =buffer add jptr, jptr, tmp, asl logwidth mov tmp, \j add jptr, jptr, tmp, asl logwidth sub jptr, jptr, width ldrh cell, [jptr] .endm .macro update_element i, j mov r2, \i add r2, r2, 1 mov r3, \j add r3, r3, 1 get_element r2 r3 sub r3, r3, 1 mov maxc, cell get_element r2 r3 cmp maxc, cell movlt maxc, cell sub r2, r2, 1 get_element r2 r3 add cell, cell, maxc strh cell, [jptr] .endm .section .data last: .byte 0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, 66, 78, 91, 105, 120 buffer: .hword 75 .hword 95, 64 .hword 17, 47, 82 .hword 18, 35, 87, 10 .hword 20, 4, 82, 47, 65 .hword 19, 1, 23, 75, 3, 34 .hword 88, 2, 77, 73, 7, 63, 67 .hword 99, 65, 4, 28, 6, 16, 70, 92 .hword 41, 41, 26, 56, 83, 40, 80, 70, 33 .hword 41, 48, 72, 33, 47, 32, 37, 16, 94, 29 .hword 53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14 .hword 70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57 .hword 91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48 .hword 63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31 .hword 4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23 .section .rodata .align 2 resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r8, lr} ldr icount, =maxij iloop: mov jcount, icount jloop: update_element icount jcount subs jcount, jcount, 1 bne jloop subs icount, icount, 1 bne iloop printme: mov r1, cell ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r8, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

You are given the following information, but you may prefer to do some research for yourself.

  • 1 Jan 1900 was a Monday.
  • Thirty days has September,
    April, June and November.
    All the rest have thirty-one,
    Saving February alone,
    Which has twenty-eight, rain or shine.
    And on leap years, twenty-nine.
  • A leap year occurs on any year evenly divisible by 4, but not on a century unless it is divisible by 400.

How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?

019.s

.syntax unified .equ months,48 .equ cycles,25 tmp .req r1 scount .req r4 ccount .req r5 mcount .req r6 dow .req r7 cptr .req r8 .section .rodata cycle: .byte 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r8, lr} mov scount, 0 mov dow, 2 ldr ccount, =cycles cstart: mov mcount, 0 ldr cptr, =cycle mstart: teq dow, 0 addeq scount, scount, 1 ldrb tmp, [cptr], 1 add r0, dow, tmp mov r1, 7 bl divide mov dow, r1 add mcount, mcount, 1 cmp mcount, months blt mstart subs ccount, ccount, 1 bne cstart last: mov r1, scount ldr r0, =resstring bl printf mov r0, 0 ldmfd sp!, {r4-r8, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

add_digit_strings.s

.syntax unified # see usage in test_add_digit_strings.s - it requires # the fifth parameter to be passed on the stack .equ datum_size, 1 .text optr .req r4 sptr .req r5 lptr .req r6 scell .req r7 lcell .req r8 carry .req r9 ltmp .req r9 counter .req r10 ptmp .req r10 # this subroutine adds the byte array at r0, length r1 # to the byte array at r2, length r3. The data is output # to the pointer passed as r4. # # inputs # r0 - pointer to input1 vector # r1 - length of input1 vector # r2 - pointer to input2 vector # r3 - length of input2 vector # r4 - pointer to output vector # # outputs # r0 - pointer to output vector # r1 - length of output vector .text .align 2 .global add_digit_strings .type add_digit_strings, %function add_digit_strings: stmfd sp!, {r9-r10, lr} cmp r3, r1 movlt ptmp, r0 movlt r0, r2 movlt r2, ptmp movlt ltmp, r1 movlt r1, r3 movlt r3, ltmp bl add_strings_short_to_long ldmfd sp!, {r9-r10, pc} # this subroutine adds the short byte array at r0, length r1 # to the byte array at r2, length r3. # # inputs # r0 - pointer to short vector # r1 - length of short vector # r2 - pointer to long vector # r3 - length of long vector # r4 - pointer to output vector # # outputs # r0 - pointer to output vector # r1 - length of output vector .global add_strings_short_to_long .type add_strings_short_to_long, %function add_strings_short_to_long: stmfd sp!, {r5-r10, lr} @ 7 longs ldr optr, [sp, #40] mov sptr, r0 add sptr, sptr, r1 sub sptr, sptr, 1 mov lptr, r2 add lptr, lptr, r3 sub lptr, lptr, 1 add optr, optr, r3 mov carry, 0 mov counter, r1 sstart: ldrb scell, [sptr], -1 ldrb lcell, [lptr], -1 add lcell, lcell, scell add lcell, lcell, carry mov carry, 0 cmp lcell, 10 movge carry, 1 subge lcell, lcell, 10 strb lcell, [optr], -1 subs counter, counter, 1 bne sstart mov counter, r3 subs counter, counter, r1 beq asstl_last lstart: ldrb lcell, [lptr], -1 add lcell, lcell, carry mov carry, 0 cmp lcell, 10 movge carry, 1 subge lcell, lcell, 10 strb lcell, [optr], -1 subs counter, counter, 1 bne lstart asstl_last: cmp carry, 1 strbeq carry, [optr], -1 add r0, optr, 1 add r1, r3, carry ldmfd sp!, {r5-r10, pc}

test_add_digit_strings.s

.syntax unified .equ sLENGTH,4 .equ lLENGTH,5 .equ ipLENGTH,lLENGTH+1 .equ oLENGTH,lLENGTH+1 .equ opLENGTH,oLENGTH+1 .macro add_strings a al b bl c ldr r0, =\a ldr r1, =\al ldr r2, =print_vector bl printbytes ldr r1, =print_vector ldr r0, =instring bl printf ldr r0, =\b ldr r1, =\bl ldr r2, =print_vector bl printbytes ldr r1, =print_vector ldr r0, =instring bl printf stmfd sp!, {r4} @ stash r4 on the stack - we destroy it in add_digit_strings ldr r0, =\c stmfd sp!, {r0} @ this is the fifth parameter for the subroutine ldr r0, =\a ldr r1, =\al ldr r2, =\b ldr r3, =\bl bl add_digit_strings add sp, sp, 4 @ revert sp to before (1) ldmfd sp!, {r4} @ and get stashed r4 ldr r2, =print_vector bl printbytes ldr r1, =print_vector ldr r0, =outstring bl printf .endm .section .data .align 2 short: .byte 4, 3, 2, 7 long: .byte 6, 6, 6, 6, 6 nines2: .byte 9, 9 nines4: .byte 9, 9, 9, 9 nines6: .byte 9, 9, 9, 9, 0, 9 nines7: .byte 9, 0, 9, 0, 0, 9, 9 instring: .asciz "input string is %s\n" outstring: .asciz "output string is %s\n" .section .bss .lcomm print_vector,ipLENGTH .lcomm output,oLENGTH .text .align 2 .global main .type main, %function main: add_strings short sLENGTH long lLENGTH output add_strings long lLENGTH short sLENGTH output add_strings nines2 2 nines4 4 output add_strings nines6 6 nines4 4 output add_strings nines6 6 nines2 2 output add_strings nines7 7 nines2 2 output add_strings nines7 7 nines6 6 output add_strings nines7 7 nines4 4 output mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

clearbytes.s

.syntax unified # clearbytes takes pointer in r0, input length in r1 # and sets all vector elements to 0 .global clearbytes .type clearbytes, %function clearbytes: stmfd sp!, {lr} mov r3, 0 clearbytesloopstart: strb r3, [r0], 1 subs r1, r1, 1 bne clearbytesloopstart ldmfd sp!, {pc}

copybytes.s

.syntax unified # copybytes takes input pointer in r0, input length in r1 and writes to r2 ptr .req r4 len .req r5 .global copybytes .type copybytes, %function copybytes: stmfd sp!, {ptr, len, lr} mov len, r1 mov ptr, r2 copybytesloopstart: ldrb r3, [r0], 1 strb r3, [r2], 1 subs r1, r1, 1 bne copybytesloopstart mov r0, ptr mov r1, len ldmfd sp!, {ptr, len, pc}

mul_int_string.s

.syntax unified .equ datum_size, 1 .equ MAXLEN,192 .section bss .lcomm tmp_vector,MAXLEN # this subroutine multiplies the byte array at r0, length r1 by the int r2 # and stores to r0 with output length in r1 # # inputs # r0 - pointer to input vector # r1 - length of input vector # r2 - multiplicand # r3 - pointer to output vector # # outputs # r0 - pointer to output vector # r1 - length of output vector iptr .req r4 optr .req r5 ilength .req r6 tlength .req r7 olength .req r8 tmp .req r9 multiplier .req r10 .global mul_int_string .type mul_int_string, %function .text .align 2 mul_int_string: stmfd sp!, {r4-r10, lr} mov iptr, r0 mov ilength, r1 mov tlength, r1 mov olength, r1 mov multiplier, r2 mov optr, r3 mis_loopstart: teq multiplier, 0 beq mis_last ldr r0, =tmp_vector mov r1, tlength bl clearbytes mov r0, multiplier bl divide_by_10_remainder mov multiplier, r0 mov r2, r1 mov r0, iptr mov r1, ilength ldr r3, =tmp_vector bm: bl mul_digit_string am: mov tmp, r0 cmp tlength, r1 movlt tlength, r1 @ set tlength to max of tlength and r1 stmfd sp!, {r4} mov r0, optr stmfd sp!, {r0} @ this is the fifth parameter for the subroutine mov r0, tmp mov r1, tlength mov r2, optr ba: mov r3, olength bl add_digit_strings mov optr, r0 cmp olength, r1 movlt olength, r1 add sp, sp, 4 @ revert sp to before (1) ldmfd sp!, {r4} aa: ldr r0, =tmp_vector mov r1, tlength bl clearbytes mov r0, optr mov r1, olength teq multiplier, 0 addne ilength, ilength, 1 beq mis_last bne mis_loopstart mis_last: ldmfd sp!, {r4-r10, pc}

printbytes.s

.syntax unified # printbytes takes input pointer in r0, input length in r1 and writes printable vector to r2 (with trailing null) .global printbytes .type printbytes, %function printbytes: stmfd sp!, {lr} printbytes_loopstart: ldrb r3, [r0], 1 add r3, r3, 48 strb r3, [r2], 1 subs r1, r1, 1 bne printbytes_loopstart mov r3, 0 strb r3, [r2], 1 ldmfd sp!, {pc}

test_mul_int_string.s

.syntax unified .macro multiplystring num ldr r0, =input ldr r1, =iLENGTH ldr r2, =\num ldr r3, =output bl mul_int_string ldr r2, =print_vector bl printbytes ldr r1, =\num ldr r2, =print_vector ldr r0, =outstring bl printf ldr r0, =output ldr r1, =oLENGTH bl clearbytes .endm .equ iLENGTH,10 .equ ipLENGTH,iLENGTH+1 .equ oLENGTH,iLENGTH+2 .equ opLENGTH,oLENGTH+1 .equ scalar1,1 .equ scalar3,3 .equ scalar14,14 .equ scalar20,20 .equ scalar31,31 .equ scalar32,32 .equ scalar87,87 .section .data .align 2 input: #.byte 4, 3, 2, 7 #.byte 1, 2, 3 #fact13: .byte 6, 2, 2, 7, 0, 2, 0, 8, 0, 0 .section .rodata instring: .asciz "input string is %s\n" outstring: .asciz "scalar is %d and output string is %s\n" .section bss .lcomm print_vector,ipLENGTH .lcomm output,oLENGTH .text .align 2 .global main .type main, %function main: ldr r0, =input ldr r1, =iLENGTH ldr r2, =print_vector bl printbytes ldr r1, =print_vector ldr r0, =instring bl printf multiplystring scalar1 multiplystring scalar3 multiplystring scalar14 multiplystring scalar31 multiplystring scalar32 multiplystring scalar87 multiplystring scalar20 mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

n! means n × (n ? 1) × ... × 3 × 2 × 1

For example, 10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800,
and the sum of the digits in the number 10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27.

Find the sum of the digits in the number 100!

020.s

.syntax unified .equ LENGTH,200 .equ scalar100,100 .section .rodata sumstring: .asciz "%d\n" .section bss .align 2 .lcomm input,LENGTH .lcomm output,LENGTH .text .align 2 .global main .type main, %function main: mov r3, 1 ldr r0, =input strb r3, [r0] ldr r0, =scalar100 ldr r1, =input ldr r2, =output bl factorial mov r2, 0 lstart: ldrb r3, [r0], 1 add r2, r2, r3 subs r1, r1, 1 bne lstart mov r1, r2 ldr r0, =sumstring bl printf mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

factorial.s

.syntax unified # this computes the factorial of the number passed # # inputs # r0 - the number used for factorial # r1 - pointer to input vector of bytes # r2 - pointer to output vector of bytes # # outputs # r0 - output vector pointer # r1 - length of output vector number .req r4 iptr .req r5 ilen .req r6 tmp .req r7 counter .req r8 optr .req r9 .text .align 2 .global factorial .type factorial, %function factorial: stmfd sp!, {r4-r9, lr} cmp r0, 2 bge factorial_ok mov r0, r1 mov r1, 1 bl copybytes b factorial_end factorial_ok: mov number, r0 mov iptr, r1 mov optr, r2 mov ilen, 1 mov counter, 2 mov r0, optr factorial_start: mov r0, optr mov r1, ilen add r1, r1, 1 bclear: bl clearbytes aclear: mov r0, iptr mov r1, ilen mov r2, counter mov r3, optr bmis: bl mul_int_string amis: teq counter, number beq factorial_last mov ilen, r1 mov r2, iptr bcopy: bl copybytes acopy: add counter, counter, 1 b factorial_start factorial_last: mov counter, r0 mov tmp, r1 mov r0, iptr mov r1, ilen bl clearbytes mov r1, tmp mov r0, counter factorial_end: ldmfd sp!, {r4-r9, pc}

test_factorial.s

.syntax unified .macro dofac s mov r3, 1 ldr r0, =input strb r3, [r0] ldr r0, =\s ldr r1, =input ldr r2, =output bl factorial ldr r2, =print_vector bl printbytes ldr r2, =print_vector ldr r1, =\s ldr r0, =outstring bl printf ldr r0, =output ldr r1, =oLENGTH bl clearbytes .endm .equ iLENGTH,1 .equ ipLENGTH,200 .equ oLENGTH,200 .equ scalar1,1 .equ scalar2,2 .equ scalar3,3 .equ scalar4,4 .equ scalar5,5 .equ scalar6,6 .equ scalar7,7 .equ scalar8,8 .equ scalar9,9 .equ scalar10,10 .equ scalar11,11 .equ scalar12,12 .equ scalar13,13 .equ scalar14,14 .equ scalar15,15 .equ scalar16,16 .equ scalar17,17 .equ scalar18,18 .equ scalar19,19 .equ scalar20,20 .equ scalar30,30 .equ scalar40,40 .equ scalar50,50 .equ scalar60,60 .equ scalar70,70 .equ scalar80,80 .equ scalar90,90 .equ scalar100,100 .section .rodata instring: .asciz "input string is %s\n" outstring: .asciz "number is %d and factorial is %s\n" .section bss .align 2 .lcomm print_vector,ipLENGTH .lcomm output,oLENGTH .lcomm input,oLENGTH .text .align 2 .global main .type main, %function main: dofac scalar1 dofac scalar2 dofac scalar3 dofac scalar4 dofac scalar5 dofac scalar6 dofac scalar7 dofac scalar8 dofac scalar9 dofac scalar10 dofac scalar11 dofac scalar12 dofac scalar13 dofac scalar14 dofac scalar15 dofac scalar16 dofac scalar17 dofac scalar18 dofac scalar19 dofac scalar20 dofac scalar30 dofac scalar40 dofac scalar50 dofac scalar60 dofac scalar70 dofac scalar80 dofac scalar90 dofac scalar100 mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

divide.s

.syntax unified # divide takes value in r0, divisor in r1 and returns dividend in r0 and modulus in r1 .global divide .type divide, %function divide: stmfd sp!, {lr} # see http://infocenter.arm.com/help/topic/com.arm.doc.ihi0043d/IHI0043D_rtabi.pdf bl __aeabi_uidivmod ldmfd sp!, {pc}
Description of problem

Let d(n) be defined as the sum of proper divisors of n (numbers less than n which divide evenly into n).
If d(a) = b and d(b) = a, where a ≠b, then a and b are an amicable pair and each of a and b are called amicable numbers.

For example, the proper divisors of 220 are 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 and 110; therefore d(220) = 284. The proper divisors of 284 are 1, 2, 4, 71 and 142; so d(284) = 220.

Evaluate the sum of all the amicable numbers under 10000.

021.s

.syntax unified .equ SIZE, 10000 .equ SIZEB, 40000 .align 4 aptr .req r4 number .req r4 sum .req r5 tmp .req r5 icount .req r6 total .req r7 .section .bss .lcomm array,SIZEB .section .rodata resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r8, lr} mov icount, 0 ldr aptr, =array array_loop: mov r0, icount bl sum_factors str r0, [aptr], 4 add icount, icount, 1 ldr tmp, =SIZE cmp icount, tmp blt array_loop ldr aptr, =array mov tmp, 0 ldr icount, =SIZE mov total, 0 ploop: ldr r2, [aptr, tmp, lsl 2] cmp r2, icount bge pnext teq tmp, r2 beq pnext ldr r3, [aptr, r2, lsl 2] teq tmp, r3 bne pnext add total, total, tmp pnext: add tmp, tmp, 1 cmp tmp, icount bne ploop printme: mov r1, total ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r8, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux .global sum_factors .type sum_factors, %function sum_factors: stmfd sp!, {r4-r6, lr} mov number, r0 mov sum, 1 mov icount, 2 sf_loop: mul r0, icount, icount cmp r0, number bgt sf_end mov r0, number mov r1, icount bl divide teq r1, 0 bne sf_next add sum, sum, r0 add sum, sum, icount sf_next: add icount, icount, 1 b sf_loop sf_end: mov r0, sum ldmfd sp!, {r4-r6, pc}
Description of problem

Using names.txt (right click and 'Save Link/Target As...'), a 46K text file containing over five-thousand first names, begin by sorting it into alphabetical order. Then working out the alphabetical value for each name, multiply this value by its alphabetical position in the list to obtain a name score.

For example, when the list is sorted into alphabetical order, COLIN, which is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So, COLIN would obtain a score of 938 × 53 = 49714.

What is the total of all the name scores in the file?

022.s

.syntax unified .equ comma, 44 .equ ASCII, 64 .equ NAMES, 5163 # from perl -ne '$count = $_ =~ tr/,/,/; print $count,"\n"' ../names.txt .equ SIZE, 46448 #from wc -c ../names.txt .align 4 names_ptr .req r4 count .req r5 nstart .req r6 tmp .req r7 nsize .req r7 sorted_ptr .req r7 start_ptr .req r8 size_ptr .req r9 swapped .req r10 .section .bss .lcomm namestart,NAMES<<1 @ need 16 bit ints (half words) to handle 5163 .lcomm namesize,NAMES @ none of the names are > 255 characters so use bytes .lcomm sorted,NAMES<<1 .lcomm printname,63 # actually namesize is superfluous; we know the the size of i is from istart to (i+1)start-3? (3 from 2 " and 1 ,) .section .rodata res_string: .asciz "%d\n" names: .asciz "\"MARY\",\"PATRICIA\",\"LINDA\",\"BARBARA\",\"ELIZABETH\",\"JENNIFER\",\"MARIA\",\"SUSAN\",\"MARGARET\",\"DOROTHY\",\"LISA\",\"NANCY\",\"KAREN\",\"BETTY\",\"HELEN\",\"SANDRA\",\"DONNA\",\"CAROL\",\"RUTH\",\"SHARON\",\"MICHELLE\",\"LAURA\",\"SARAH\",\"KIMBERLY\",\"DEBORAH\",\"JESSICA\",\"SHIRLEY\",\"CYNTHIA\",\"ANGELA\",\"MELISSA\",\"BRENDA\",\"AMY\",\"ANNA\",\"REBECCA\",\"VIRGINIA\",\"KATHLEEN\",\"PAMELA\",\"MARTHA\",\"DEBRA\",\"AMANDA\",\"STEPHANIE\",\"CAROLYN\",\"CHRISTINE\",\"MARIE\",\"JANET\",\"CATHERINE\",\"FRANCES\",\"ANN\",\"JOYCE\",\"DIANE\",\"ALICE\",\"JULIE\",\"HEATHER\",\"TERESA\",\"DORIS\",\"GLORIA\",\"EVELYN\",\"JEAN\",\"CHERYL\",\"MILDRED\",\"KATHERINE\",\"JOAN\",\"ASHLEY\",\"JUDITH\",\"ROSE\",\"JANICE\",\"KELLY\",\"NICOLE\",\"JUDY\",\"CHRISTINA\",\"KATHY\",\"THERESA\",\"BEVERLY\",\"DENISE\",\"TAMMY\",\"IRENE\",\"JANE\",\"LORI\",\"RACHEL\",\"MARILYN\",\"ANDREA\",\"KATHRYN\",\"LOUISE\",\"SARA\",\"ANNE\",\"JACQUELINE\",\"WANDA\",\"BONNIE\",\"JULIA\",\"RUBY\",\"LOIS\",\"TINA\",\"PHYLLIS\",\"NORMA\",\"PAULA\",\"DIANA\",\"ANNIE\",\"LILLIAN\",\"EMILY\",\"ROBIN\",\"PEGGY\",\"CRYSTAL\",\"GLADYS\",\"RITA\",\"DAWN\",\"CONNIE\",\"FLORENCE\",\"TRACY\",\"EDNA\",\"TIFFANY\",\"CARMEN\",\"ROSA\",\"CINDY\",\"GRACE\",\"WENDY\",\"VICTORIA\",\"EDITH\",\"KIM\",\"SHERRY\",\"SYLVIA\",\"JOSEPHINE\",\"THELMA\",\"SHANNON\",\"SHEILA\",\"ETHEL\",\"ELLEN\",\"ELAINE\",\"MARJORIE\",\"CARRIE\",\"CHARLOTTE\",\"MONICA\",\"ESTHER\",\"PAULINE\",\"EMMA\",\"JUANITA\",\"ANITA\",\"RHONDA\",\"HAZEL\",\"AMBER\",\"EVA\",\"DEBBIE\",\"APRIL\",\"LESLIE\",\"CLARA\",\"LUCILLE\",\"JAMIE\",\"JOANNE\",\"ELEANOR\",\"VALERIE\",\"DANIELLE\",\"MEGAN\",\"ALICIA\",\"SUZANNE\",\"MICHELE\",\"GAIL\",\"BERTHA\",\"DARLENE\",\"VERONICA\",\"JILL\",\"ERIN\",\"GERALDINE\",\"LAUREN\",\"CATHY\",\"JOANN\",\"LORRAINE\",\"LYNN\",\"SALLY\",\"REGINA\",\"ERICA\",\"BEATRICE\",\"DOLORES\",\"BERNICE\",\"AUDREY\",\"YVONNE\",\"ANNETTE\",\"JUNE\",\"SAMANTHA\",\"MARION\",\"DANA\",\"STACY\",\"ANA\",\"RENEE\",\"IDA\",\"VIVIAN\",\"ROBERTA\",\"HOLLY\",\"BRITTANY\",\"MELANIE\",\"LORETTA\",\"YOLANDA\",\"JEANETTE\",\"LAURIE\",\"KATIE\",\"KRISTEN\",\"VANESSA\",\"ALMA\",\"SUE\",\"ELSIE\",\"BETH\",\"JEANNE\",\"VICKI\",\"CARLA\",\"TARA\",\"ROSEMARY\",\"EILEEN\",\"TERRI\",\"GERTRUDE\",\"LUCY\",\"TONYA\",\"ELLA\",\"STACEY\",\"WILMA\",\"GINA\",\"KRISTIN\",\"JESSIE\",\"NATALIE\",\"AGNES\",\"VERA\",\"WILLIE\",\"CHARLENE\",\"BESSIE\",\"DELORES\",\"MELINDA\",\"PEARL\",\"ARLENE\",\"MAUREEN\",\"COLLEEN\",\"ALLISON\",\"TAMARA\",\"JOY\",\"GEORGIA\",\"CONSTANCE\",\"LILLIE\",\"CLAUDIA\",\"JACKIE\",\"MARCIA\",\"TANYA\",\"NELLIE\",\"MINNIE\",\"MARLENE\",\"HEIDI\",\"GLENDA\",\"LYDIA\",\"VIOLA\",\"COURTNEY\",\"MARIAN\",\"STELLA\",\"CAROLINE\",\"DORA\",\"JO\",\"VICKIE\",\"MATTIE\",\"TERRY\",\"MAXINE\",\"IRMA\",\"MABEL\",\"MARSHA\",\"MYRTLE\",\"LENA\",\"CHRISTY\",\"DEANNA\",\"PATSY\",\"HILDA\",\"GWENDOLYN\",\"JENNIE\",\"NORA\",\"MARGIE\",\"NINA\",\"CASSANDRA\",\"LEAH\",\"PENNY\",\"KAY\",\"PRISCILLA\",\"NAOMI\",\"CAROLE\",\"BRANDY\",\"OLGA\",\"BILLIE\",\"DIANNE\",\"TRACEY\",\"LEONA\",\"JENNY\",\"FELICIA\",\"SONIA\",\"MIRIAM\",\"VELMA\",\"BECKY\",\"BOBBIE\",\"VIOLET\",\"KRISTINA\",\"TONI\",\"MISTY\",\"MAE\",\"SHELLY\",\"DAISY\",\"RAMONA\",\"SHERRI\",\"ERIKA\",\"KATRINA\",\"CLAIRE\",\"LINDSEY\",\"LINDSAY\",\"GENEVA\",\"GUADALUPE\",\"BELINDA\",\"MARGARITA\",\"SHERYL\",\"CORA\",\"FAYE\",\"ADA\",\"NATASHA\",\"SABRINA\",\"ISABEL\",\"MARGUERITE\",\"HATTIE\",\"HARRIET\",\"MOLLY\",\"CECILIA\",\"KRISTI\",\"BRANDI\",\"BLANCHE\",\"SANDY\",\"ROSIE\",\"JOANNA\",\"IRIS\",\"EUNICE\",\"ANGIE\",\"INEZ\",\"LYNDA\",\"MADELINE\",\"AMELIA\",\"ALBERTA\",\"GENEVIEVE\",\"MONIQUE\",\"JODI\",\"JANIE\",\"MAGGIE\",\"KAYLA\",\"SONYA\",\"JAN\",\"LEE\",\"KRISTINE\",\"CANDACE\",\"FANNIE\",\"MARYANN\",\"OPAL\",\"ALISON\",\"YVETTE\",\"MELODY\",\"LUZ\",\"SUSIE\",\"OLIVIA\",\"FLORA\",\"SHELLEY\",\"KRISTY\",\"MAMIE\",\"LULA\",\"LOLA\",\"VERNA\",\"BEULAH\",\"ANTOINETTE\",\"CANDICE\",\"JUANA\",\"JEANNETTE\",\"PAM\",\"KELLI\",\"HANNAH\",\"WHITNEY\",\"BRIDGET\",\"KARLA\",\"CELIA\",\"LATOYA\",\"PATTY\",\"SHELIA\",\"GAYLE\",\"DELLA\",\"VICKY\",\"LYNNE\",\"SHERI\",\"MARIANNE\",\"KARA\",\"JACQUELYN\",\"ERMA\",\"BLANCA\",\"MYRA\",\"LETICIA\",\"PAT\",\"KRISTA\",\"ROXANNE\",\"ANGELICA\",\"JOHNNIE\",\"ROBYN\",\"FRANCIS\",\"ADRIENNE\",\"ROSALIE\",\"ALEXANDRA\",\"BROOKE\",\"BETHANY\",\"SADIE\",\"BERNADETTE\",\"TRACI\",\"JODY\",\"KENDRA\",\"JASMINE\",\"NICHOLE\",\"RACHAEL\",\"CHELSEA\",\"MABLE\",\"ERNESTINE\",\"MURIEL\",\"MARCELLA\",\"ELENA\",\"KRYSTAL\",\"ANGELINA\",\"NADINE\",\"KARI\",\"ESTELLE\",\"DIANNA\",\"PAULETTE\",\"LORA\",\"MONA\",\"DOREEN\",\"ROSEMARIE\",\"ANGEL\",\"DESIREE\",\"ANTONIA\",\"HOPE\",\"GINGER\",\"JANIS\",\"BETSY\",\"CHRISTIE\",\"FREDA\",\"MERCEDES\",\"MEREDITH\",\"LYNETTE\",\"TERI\",\"CRISTINA\",\"EULA\",\"LEIGH\",\"MEGHAN\",\"SOPHIA\",\"ELOISE\",\"ROCHELLE\",\"GRETCHEN\",\"CECELIA\",\"RAQUEL\",\"HENRIETTA\",\"ALYSSA\",\"JANA\",\"KELLEY\",\"GWEN\",\"KERRY\",\"JENNA\",\"TRICIA\",\"LAVERNE\",\"OLIVE\",\"ALEXIS\",\"TASHA\",\"SILVIA\",\"ELVIRA\",\"CASEY\",\"DELIA\",\"SOPHIE\",\"KATE\",\"PATTI\",\"LORENA\",\"KELLIE\",\"SONJA\",\"LILA\",\"LANA\",\"DARLA\",\"MAY\",\"MINDY\",\"ESSIE\",\"MANDY\",\"LORENE\",\"ELSA\",\"JOSEFINA\",\"JEANNIE\",\"MIRANDA\",\"DIXIE\",\"LUCIA\",\"MARTA\",\"FAITH\",\"LELA\",\"JOHANNA\",\"SHARI\",\"CAMILLE\",\"TAMI\",\"SHAWNA\",\"ELISA\",\"EBONY\",\"MELBA\",\"ORA\",\"NETTIE\",\"TABITHA\",\"OLLIE\",\"JAIME\",\"WINIFRED\",\"KRISTIE\",\"MARINA\",\"ALISHA\",\"AIMEE\",\"RENA\",\"MYRNA\",\"MARLA\",\"TAMMIE\",\"LATASHA\",\"BONITA\",\"PATRICE\",\"RONDA\",\"SHERRIE\",\"ADDIE\",\"FRANCINE\",\"DELORIS\",\"STACIE\",\"ADRIANA\",\"CHERI\",\"SHELBY\",\"ABIGAIL\",\"CELESTE\",\"JEWEL\",\"CARA\",\"ADELE\",\"REBEKAH\",\"LUCINDA\",\"DORTHY\",\"CHRIS\",\"EFFIE\",\"TRINA\",\"REBA\",\"SHAWN\",\"SALLIE\",\"AURORA\",\"LENORA\",\"ETTA\",\"LOTTIE\",\"KERRI\",\"TRISHA\",\"NIKKI\",\"ESTELLA\",\"FRANCISCA\",\"JOSIE\",\"TRACIE\",\"MARISSA\",\"KARIN\",\"BRITTNEY\",\"JANELLE\",\"LOURDES\",\"LAUREL\",\"HELENE\",\"FERN\",\"ELVA\",\"CORINNE\",\"KELSEY\",\"INA\",\"BETTIE\",\"ELISABETH\",\"AIDA\",\"CAITLIN\",\"INGRID\",\"IVA\",\"EUGENIA\",\"CHRISTA\",\"GOLDIE\",\"CASSIE\",\"MAUDE\",\"JENIFER\",\"THERESE\",\"FRANKIE\",\"DENA\",\"LORNA\",\"JANETTE\",\"LATONYA\",\"CANDY\",\"MORGAN\",\"CONSUELO\",\"TAMIKA\",\"ROSETTA\",\"DEBORA\",\"CHERIE\",\"POLLY\",\"DINA\",\"JEWELL\",\"FAY\",\"JILLIAN\",\"DOROTHEA\",\"NELL\",\"TRUDY\",\"ESPERANZA\",\"PATRICA\",\"KIMBERLEY\",\"SHANNA\",\"HELENA\",\"CAROLINA\",\"CLEO\",\"STEFANIE\",\"ROSARIO\",\"OLA\",\"JANINE\",\"MOLLIE\",\"LUPE\",\"ALISA\",\"LOU\",\"MARIBEL\",\"SUSANNE\",\"BETTE\",\"SUSANA\",\"ELISE\",\"CECILE\",\"ISABELLE\",\"LESLEY\",\"JOCELYN\",\"PAIGE\",\"JONI\",\"RACHELLE\",\"LEOLA\",\"DAPHNE\",\"ALTA\",\"ESTER\",\"PETRA\",\"GRACIELA\",\"IMOGENE\",\"JOLENE\",\"KEISHA\",\"LACEY\",\"GLENNA\",\"GABRIELA\",\"KERI\",\"URSULA\",\"LIZZIE\",\"KIRSTEN\",\"SHANA\",\"ADELINE\",\"MAYRA\",\"JAYNE\",\"JACLYN\",\"GRACIE\",\"SONDRA\",\"CARMELA\",\"MARISA\",\"ROSALIND\",\"CHARITY\",\"TONIA\",\"BEATRIZ\",\"MARISOL\",\"CLARICE\",\"JEANINE\",\"SHEENA\",\"ANGELINE\",\"FRIEDA\",\"LILY\",\"ROBBIE\",\"SHAUNA\",\"MILLIE\",\"CLAUDETTE\",\"CATHLEEN\",\"ANGELIA\",\"GABRIELLE\",\"AUTUMN\",\"KATHARINE\",\"SUMMER\",\"JODIE\",\"STACI\",\"LEA\",\"CHRISTI\",\"JIMMIE\",\"JUSTINE\",\"ELMA\",\"LUELLA\",\"MARGRET\",\"DOMINIQUE\",\"SOCORRO\",\"RENE\",\"MARTINA\",\"MARGO\",\"MAVIS\",\"CALLIE\",\"BOBBI\",\"MARITZA\",\"LUCILE\",\"LEANNE\",\"JEANNINE\",\"DEANA\",\"AILEEN\",\"LORIE\",\"LADONNA\",\"WILLA\",\"MANUELA\",\"GALE\",\"SELMA\",\"DOLLY\",\"SYBIL\",\"ABBY\",\"LARA\",\"DALE\",\"IVY\",\"DEE\",\"WINNIE\",\"MARCY\",\"LUISA\",\"JERI\",\"MAGDALENA\",\"OFELIA\",\"MEAGAN\",\"AUDRA\",\"MATILDA\",\"LEILA\",\"CORNELIA\",\"BIANCA\",\"SIMONE\",\"BETTYE\",\"RANDI\",\"VIRGIE\",\"LATISHA\",\"BARBRA\",\"GEORGINA\",\"ELIZA\",\"LEANN\",\"BRIDGETTE\",\"RHODA\",\"HALEY\",\"ADELA\",\"NOLA\",\"BERNADINE\",\"FLOSSIE\",\"ILA\",\"GRETA\",\"RUTHIE\",\"NELDA\",\"MINERVA\",\"LILLY\",\"TERRIE\",\"LETHA\",\"HILARY\",\"ESTELA\",\"VALARIE\",\"BRIANNA\",\"ROSALYN\",\"EARLINE\",\"CATALINA\",\"AVA\",\"MIA\",\"CLARISSA\",\"LIDIA\",\"CORRINE\",\"ALEXANDRIA\",\"CONCEPCION\",\"TIA\",\"SHARRON\",\"RAE\",\"DONA\",\"ERICKA\",\"JAMI\",\"ELNORA\",\"CHANDRA\",\"LENORE\",\"NEVA\",\"MARYLOU\",\"MELISA\",\"TABATHA\",\"SERENA\",\"AVIS\",\"ALLIE\",\"SOFIA\",\"JEANIE\",\"ODESSA\",\"NANNIE\",\"HARRIETT\",\"LORAINE\",\"PENELOPE\",\"MILAGROS\",\"EMILIA\",\"BENITA\",\"ALLYSON\",\"ASHLEE\",\"TANIA\",\"TOMMIE\",\"ESMERALDA\",\"KARINA\",\"EVE\",\"PEARLIE\",\"ZELMA\",\"MALINDA\",\"NOREEN\",\"TAMEKA\",\"SAUNDRA\",\"HILLARY\",\"AMIE\",\"ALTHEA\",\"ROSALINDA\",\"JORDAN\",\"LILIA\",\"ALANA\",\"GAY\",\"CLARE\",\"ALEJANDRA\",\"ELINOR\",\"MICHAEL\",\"LORRIE\",\"JERRI\",\"DARCY\",\"EARNESTINE\",\"CARMELLA\",\"TAYLOR\",\"NOEMI\",\"MARCIE\",\"LIZA\",\"ANNABELLE\",\"LOUISA\",\"EARLENE\",\"MALLORY\",\"CARLENE\",\"NITA\",\"SELENA\",\"TANISHA\",\"KATY\",\"JULIANNE\",\"JOHN\",\"LAKISHA\",\"EDWINA\",\"MARICELA\",\"MARGERY\",\"KENYA\",\"DOLLIE\",\"ROXIE\",\"ROSLYN\",\"KATHRINE\",\"NANETTE\",\"CHARMAINE\",\"LAVONNE\",\"ILENE\",\"KRIS\",\"TAMMI\",\"SUZETTE\",\"CORINE\",\"KAYE\",\"JERRY\",\"MERLE\",\"CHRYSTAL\",\"LINA\",\"DEANNE\",\"LILIAN\",\"JULIANA\",\"ALINE\",\"LUANN\",\"KASEY\",\"MARYANNE\",\"EVANGELINE\",\"COLETTE\",\"MELVA\",\"LAWANDA\",\"YESENIA\",\"NADIA\",\"MADGE\",\"KATHIE\",\"EDDIE\",\"OPHELIA\",\"VALERIA\",\"NONA\",\"MITZI\",\"MARI\",\"GEORGETTE\",\"CLAUDINE\",\"FRAN\",\"ALISSA\",\"ROSEANN\",\"LAKEISHA\",\"SUSANNA\",\"REVA\",\"DEIDRE\",\"CHASITY\",\"SHEREE\",\"CARLY\",\"JAMES\",\"ELVIA\",\"ALYCE\",\"DEIRDRE\",\"GENA\",\"BRIANA\",\"ARACELI\",\"KATELYN\",\"ROSANNE\",\"WENDI\",\"TESSA\",\"BERTA\",\"MARVA\",\"IMELDA\",\"MARIETTA\",\"MARCI\",\"LEONOR\",\"ARLINE\",\"SASHA\",\"MADELYN\",\"JANNA\",\"JULIETTE\",\"DEENA\",\"AURELIA\",\"JOSEFA\",\"AUGUSTA\",\"LILIANA\",\"YOUNG\",\"CHRISTIAN\",\"LESSIE\",\"AMALIA\",\"SAVANNAH\",\"ANASTASIA\",\"VILMA\",\"NATALIA\",\"ROSELLA\",\"LYNNETTE\",\"CORINA\",\"ALFREDA\",\"LEANNA\",\"CAREY\",\"AMPARO\",\"COLEEN\",\"TAMRA\",\"AISHA\",\"WILDA\",\"KARYN\",\"CHERRY\",\"QUEEN\",\"MAURA\",\"MAI\",\"EVANGELINA\",\"ROSANNA\",\"HALLIE\",\"ERNA\",\"ENID\",\"MARIANA\",\"LACY\",\"JULIET\",\"JACKLYN\",\"FREIDA\",\"MADELEINE\",\"MARA\",\"HESTER\",\"CATHRYN\",\"LELIA\",\"CASANDRA\",\"BRIDGETT\",\"ANGELITA\",\"JANNIE\",\"DIONNE\",\"ANNMARIE\",\"KATINA\",\"BERYL\",\"PHOEBE\",\"MILLICENT\",\"KATHERYN\",\"DIANN\",\"CARISSA\",\"MARYELLEN\",\"LIZ\",\"LAURI\",\"HELGA\",\"GILDA\",\"ADRIAN\",\"RHEA\",\"MARQUITA\",\"HOLLIE\",\"TISHA\",\"TAMERA\",\"ANGELIQUE\",\"FRANCESCA\",\"BRITNEY\",\"KAITLIN\",\"LOLITA\",\"FLORINE\",\"ROWENA\",\"REYNA\",\"TWILA\",\"FANNY\",\"JANELL\",\"INES\",\"CONCETTA\",\"BERTIE\",\"ALBA\",\"BRIGITTE\",\"ALYSON\",\"VONDA\",\"PANSY\",\"ELBA\",\"NOELLE\",\"LETITIA\",\"KITTY\",\"DEANN\",\"BRANDIE\",\"LOUELLA\",\"LETA\",\"FELECIA\",\"SHARLENE\",\"LESA\",\"BEVERLEY\",\"ROBERT\",\"ISABELLA\",\"HERMINIA\",\"TERRA\",\"CELINA\",\"TORI\",\"OCTAVIA\",\"JADE\",\"DENICE\",\"GERMAINE\",\"SIERRA\",\"MICHELL\",\"CORTNEY\",\"NELLY\",\"DORETHA\",\"SYDNEY\",\"DEIDRA\",\"MONIKA\",\"LASHONDA\",\"JUDI\",\"CHELSEY\",\"ANTIONETTE\",\"MARGOT\",\"BOBBY\",\"ADELAIDE\",\"NAN\",\"LEEANN\",\"ELISHA\",\"DESSIE\",\"LIBBY\",\"KATHI\",\"GAYLA\",\"LATANYA\",\"MINA\",\"MELLISA\",\"KIMBERLEE\",\"JASMIN\",\"RENAE\",\"ZELDA\",\"ELDA\",\"MA\",\"JUSTINA\",\"GUSSIE\",\"EMILIE\",\"CAMILLA\",\"ABBIE\",\"ROCIO\",\"KAITLYN\",\"JESSE\",\"EDYTHE\",\"ASHLEIGH\",\"SELINA\",\"LAKESHA\",\"GERI\",\"ALLENE\",\"PAMALA\",\"MICHAELA\",\"DAYNA\",\"CARYN\",\"ROSALIA\",\"SUN\",\"JACQULINE\",\"REBECA\",\"MARYBETH\",\"KRYSTLE\",\"IOLA\",\"DOTTIE\",\"BENNIE\",\"BELLE\",\"AUBREY\",\"GRISELDA\",\"ERNESTINA\",\"ELIDA\",\"ADRIANNE\",\"DEMETRIA\",\"DELMA\",\"CHONG\",\"JAQUELINE\",\"DESTINY\",\"ARLEEN\",\"VIRGINA\",\"RETHA\",\"FATIMA\",\"TILLIE\",\"ELEANORE\",\"CARI\",\"TREVA\",\"BIRDIE\",\"WILHELMINA\",\"ROSALEE\",\"MAURINE\",\"LATRICE\",\"YONG\",\"JENA\",\"TARYN\",\"ELIA\",\"DEBBY\",\"MAUDIE\",\"JEANNA\",\"DELILAH\",\"CATRINA\",\"SHONDA\",\"HORTENCIA\",\"THEODORA\",\"TERESITA\",\"ROBBIN\",\"DANETTE\",\"MARYJANE\",\"FREDDIE\",\"DELPHINE\",\"BRIANNE\",\"NILDA\",\"DANNA\",\"CINDI\",\"BESS\",\"IONA\",\"HANNA\",\"ARIEL\",\"WINONA\",\"VIDA\",\"ROSITA\",\"MARIANNA\",\"WILLIAM\",\"RACHEAL\",\"GUILLERMINA\",\"ELOISA\",\"CELESTINE\",\"CAREN\",\"MALISSA\",\"LONA\",\"CHANTEL\",\"SHELLIE\",\"MARISELA\",\"LEORA\",\"AGATHA\",\"SOLEDAD\",\"MIGDALIA\",\"IVETTE\",\"CHRISTEN\",\"ATHENA\",\"JANEL\",\"CHLOE\",\"VEDA\",\"PATTIE\",\"TESSIE\",\"TERA\",\"MARILYNN\",\"LUCRETIA\",\"KARRIE\",\"DINAH\",\"DANIELA\",\"ALECIA\",\"ADELINA\",\"VERNICE\",\"SHIELA\",\"PORTIA\",\"MERRY\",\"LASHAWN\",\"DEVON\",\"DARA\",\"TAWANA\",\"OMA\",\"VERDA\",\"CHRISTIN\",\"ALENE\",\"ZELLA\",\"SANDI\",\"RAFAELA\",\"MAYA\",\"KIRA\",\"CANDIDA\",\"ALVINA\",\"SUZAN\",\"SHAYLA\",\"LYN\",\"LETTIE\",\"ALVA\",\"SAMATHA\",\"ORALIA\",\"MATILDE\",\"MADONNA\",\"LARISSA\",\"VESTA\",\"RENITA\",\"INDIA\",\"DELOIS\",\"SHANDA\",\"PHILLIS\",\"LORRI\",\"ERLINDA\",\"CRUZ\",\"CATHRINE\",\"BARB\",\"ZOE\",\"ISABELL\",\"IONE\",\"GISELA\",\"CHARLIE\",\"VALENCIA\",\"ROXANNA\",\"MAYME\",\"KISHA\",\"ELLIE\",\"MELLISSA\",\"DORRIS\",\"DALIA\",\"BELLA\",\"ANNETTA\",\"ZOILA\",\"RETA\",\"REINA\",\"LAURETTA\",\"KYLIE\",\"CHRISTAL\",\"PILAR\",\"CHARLA\",\"ELISSA\",\"TIFFANI\",\"TANA\",\"PAULINA\",\"LEOTA\",\"BREANNA\",\"JAYME\",\"CARMEL\",\"VERNELL\",\"TOMASA\",\"MANDI\",\"DOMINGA\",\"SANTA\",\"MELODIE\",\"LURA\",\"ALEXA\",\"TAMELA\",\"RYAN\",\"MIRNA\",\"KERRIE\",\"VENUS\",\"NOEL\",\"FELICITA\",\"CRISTY\",\"CARMELITA\",\"BERNIECE\",\"ANNEMARIE\",\"TIARA\",\"ROSEANNE\",\"MISSY\",\"CORI\",\"ROXANA\",\"PRICILLA\",\"KRISTAL\",\"JUNG\",\"ELYSE\",\"HAYDEE\",\"ALETHA\",\"BETTINA\",\"MARGE\",\"GILLIAN\",\"FILOMENA\",\"CHARLES\",\"ZENAIDA\",\"HARRIETTE\",\"CARIDAD\",\"VADA\",\"UNA\",\"ARETHA\",\"PEARLINE\",\"MARJORY\",\"MARCELA\",\"FLOR\",\"EVETTE\",\"ELOUISE\",\"ALINA\",\"TRINIDAD\",\"DAVID\",\"DAMARIS\",\"CATHARINE\",\"CARROLL\",\"BELVA\",\"NAKIA\",\"MARLENA\",\"LUANNE\",\"LORINE\",\"KARON\",\"DORENE\",\"DANITA\",\"BRENNA\",\"TATIANA\",\"SAMMIE\",\"LOUANN\",\"LOREN\",\"JULIANNA\",\"ANDRIA\",\"PHILOMENA\",\"LUCILA\",\"LEONORA\",\"DOVIE\",\"ROMONA\",\"MIMI\",\"JACQUELIN\",\"GAYE\",\"TONJA\",\"MISTI\",\"JOE\",\"GENE\",\"CHASTITY\",\"STACIA\",\"ROXANN\",\"MICAELA\",\"NIKITA\",\"MEI\",\"VELDA\",\"MARLYS\",\"JOHNNA\",\"AURA\",\"LAVERN\",\"IVONNE\",\"HAYLEY\",\"NICKI\",\"MAJORIE\",\"HERLINDA\",\"GEORGE\",\"ALPHA\",\"YADIRA\",\"PERLA\",\"GREGORIA\",\"DANIEL\",\"ANTONETTE\",\"SHELLI\",\"MOZELLE\",\"MARIAH\",\"JOELLE\",\"CORDELIA\",\"JOSETTE\",\"CHIQUITA\",\"TRISTA\",\"LOUIS\",\"LAQUITA\",\"GEORGIANA\",\"CANDI\",\"SHANON\",\"LONNIE\",\"HILDEGARD\",\"CECIL\",\"VALENTINA\",\"STEPHANY\",\"MAGDA\",\"KAROL\",\"GERRY\",\"GABRIELLA\",\"TIANA\",\"ROMA\",\"RICHELLE\",\"RAY\",\"PRINCESS\",\"OLETA\",\"JACQUE\",\"IDELLA\",\"ALAINA\",\"SUZANNA\",\"JOVITA\",\"BLAIR\",\"TOSHA\",\"RAVEN\",\"NEREIDA\",\"MARLYN\",\"KYLA\",\"JOSEPH\",\"DELFINA\",\"TENA\",\"STEPHENIE\",\"SABINA\",\"NATHALIE\",\"MARCELLE\",\"GERTIE\",\"DARLEEN\",\"THEA\",\"SHARONDA\",\"SHANTEL\",\"BELEN\",\"VENESSA\",\"ROSALINA\",\"ONA\",\"GENOVEVA\",\"COREY\",\"CLEMENTINE\",\"ROSALBA\",\"RENATE\",\"RENATA\",\"MI\",\"IVORY\",\"GEORGIANNA\",\"FLOY\",\"DORCAS\",\"ARIANA\",\"TYRA\",\"THEDA\",\"MARIAM\",\"JULI\",\"JESICA\",\"DONNIE\",\"VIKKI\",\"VERLA\",\"ROSELYN\",\"MELVINA\",\"JANNETTE\",\"GINNY\",\"DEBRAH\",\"CORRIE\",\"ASIA\",\"VIOLETA\",\"MYRTIS\",\"LATRICIA\",\"COLLETTE\",\"CHARLEEN\",\"ANISSA\",\"VIVIANA\",\"TWYLA\",\"PRECIOUS\",\"NEDRA\",\"LATONIA\",\"LAN\",\"HELLEN\",\"FABIOLA\",\"ANNAMARIE\",\"ADELL\",\"SHARYN\",\"CHANTAL\",\"NIKI\",\"MAUD\",\"LIZETTE\",\"LINDY\",\"KIA\",\"KESHA\",\"JEANA\",\"DANELLE\",\"CHARLINE\",\"CHANEL\",\"CARROL\",\"VALORIE\",\"LIA\",\"DORTHA\",\"CRISTAL\",\"SUNNY\",\"LEONE\",\"LEILANI\",\"GERRI\",\"DEBI\",\"ANDRA\",\"KESHIA\",\"IMA\",\"EULALIA\",\"EASTER\",\"DULCE\",\"NATIVIDAD\",\"LINNIE\",\"KAMI\",\"GEORGIE\",\"CATINA\",\"BROOK\",\"ALDA\",\"WINNIFRED\",\"SHARLA\",\"RUTHANN\",\"MEAGHAN\",\"MAGDALENE\",\"LISSETTE\",\"ADELAIDA\",\"VENITA\",\"TRENA\",\"SHIRLENE\",\"SHAMEKA\",\"ELIZEBETH\",\"DIAN\",\"SHANTA\",\"MICKEY\",\"LATOSHA\",\"CARLOTTA\",\"WINDY\",\"SOON\",\"ROSINA\",\"MARIANN\",\"LEISA\",\"JONNIE\",\"DAWNA\",\"CATHIE\",\"BILLY\",\"ASTRID\",\"SIDNEY\",\"LAUREEN\",\"JANEEN\",\"HOLLI\",\"FAWN\",\"VICKEY\",\"TERESSA\",\"SHANTE\",\"RUBYE\",\"MARCELINA\",\"CHANDA\",\"CARY\",\"TERESE\",\"SCARLETT\",\"MARTY\",\"MARNIE\",\"LULU\",\"LISETTE\",\"JENIFFER\",\"ELENOR\",\"DORINDA\",\"DONITA\",\"CARMAN\",\"BERNITA\",\"ALTAGRACIA\",\"ALETA\",\"ADRIANNA\",\"ZORAIDA\",\"RONNIE\",\"NICOLA\",\"LYNDSEY\",\"KENDALL\",\"JANINA\",\"CHRISSY\",\"AMI\",\"STARLA\",\"PHYLIS\",\"PHUONG\",\"KYRA\",\"CHARISSE\",\"BLANCH\",\"SANJUANITA\",\"RONA\",\"NANCI\",\"MARILEE\",\"MARANDA\",\"CORY\",\"BRIGETTE\",\"SANJUANA\",\"MARITA\",\"KASSANDRA\",\"JOYCELYN\",\"IRA\",\"FELIPA\",\"CHELSIE\",\"BONNY\",\"MIREYA\",\"LORENZA\",\"KYONG\",\"ILEANA\",\"CANDELARIA\",\"TONY\",\"TOBY\",\"SHERIE\",\"OK\",\"MARK\",\"LUCIE\",\"LEATRICE\",\"LAKESHIA\",\"GERDA\",\"EDIE\",\"BAMBI\",\"MARYLIN\",\"LAVON\",\"HORTENSE\",\"GARNET\",\"EVIE\",\"TRESSA\",\"SHAYNA\",\"LAVINA\",\"KYUNG\",\"JEANETTA\",\"SHERRILL\",\"SHARA\",\"PHYLISS\",\"MITTIE\",\"ANABEL\",\"ALESIA\",\"THUY\",\"TAWANDA\",\"RICHARD\",\"JOANIE\",\"TIFFANIE\",\"LASHANDA\",\"KARISSA\",\"ENRIQUETA\",\"DARIA\",\"DANIELLA\",\"CORINNA\",\"ALANNA\",\"ABBEY\",\"ROXANE\",\"ROSEANNA\",\"MAGNOLIA\",\"LIDA\",\"KYLE\",\"JOELLEN\",\"ERA\",\"CORAL\",\"CARLEEN\",\"TRESA\",\"PEGGIE\",\"NOVELLA\",\"NILA\",\"MAYBELLE\",\"JENELLE\",\"CARINA\",\"NOVA\",\"MELINA\",\"MARQUERITE\",\"MARGARETTE\",\"JOSEPHINA\",\"EVONNE\",\"DEVIN\",\"CINTHIA\",\"ALBINA\",\"TOYA\",\"TAWNYA\",\"SHERITA\",\"SANTOS\",\"MYRIAM\",\"LIZABETH\",\"LISE\",\"KEELY\",\"JENNI\",\"GISELLE\",\"CHERYLE\",\"ARDITH\",\"ARDIS\",\"ALESHA\",\"ADRIANE\",\"SHAINA\",\"LINNEA\",\"KAROLYN\",\"HONG\",\"FLORIDA\",\"FELISHA\",\"DORI\",\"DARCI\",\"ARTIE\",\"ARMIDA\",\"ZOLA\",\"XIOMARA\",\"VERGIE\",\"SHAMIKA\",\"NENA\",\"NANNETTE\",\"MAXIE\",\"LOVIE\",\"JEANE\",\"JAIMIE\",\"INGE\",\"FARRAH\",\"ELAINA\",\"CAITLYN\",\"STARR\",\"FELICITAS\",\"CHERLY\",\"CARYL\",\"YOLONDA\",\"YASMIN\",\"TEENA\",\"PRUDENCE\",\"PENNIE\",\"NYDIA\",\"MACKENZIE\",\"ORPHA\",\"MARVEL\",\"LIZBETH\",\"LAURETTE\",\"JERRIE\",\"HERMELINDA\",\"CAROLEE\",\"TIERRA\",\"MIRIAN\",\"META\",\"MELONY\",\"KORI\",\"JENNETTE\",\"JAMILA\",\"ENA\",\"ANH\",\"YOSHIKO\",\"SUSANNAH\",\"SALINA\",\"RHIANNON\",\"JOLEEN\",\"CRISTINE\",\"ASHTON\",\"ARACELY\",\"TOMEKA\",\"SHALONDA\",\"MARTI\",\"LACIE\",\"KALA\",\"JADA\",\"ILSE\",\"HAILEY\",\"BRITTANI\",\"ZONA\",\"SYBLE\",\"SHERRYL\",\"RANDY\",\"NIDIA\",\"MARLO\",\"KANDICE\",\"KANDI\",\"DEB\",\"DEAN\",\"AMERICA\",\"ALYCIA\",\"TOMMY\",\"RONNA\",\"NORENE\",\"MERCY\",\"JOSE\",\"INGEBORG\",\"GIOVANNA\",\"GEMMA\",\"CHRISTEL\",\"AUDRY\",\"ZORA\",\"VITA\",\"VAN\",\"TRISH\",\"STEPHAINE\",\"SHIRLEE\",\"SHANIKA\",\"MELONIE\",\"MAZIE\",\"JAZMIN\",\"INGA\",\"HOA\",\"HETTIE\",\"GERALYN\",\"FONDA\",\"ESTRELLA\",\"ADELLA\",\"SU\",\"SARITA\",\"RINA\",\"MILISSA\",\"MARIBETH\",\"GOLDA\",\"EVON\",\"ETHELYN\",\"ENEDINA\",\"CHERISE\",\"CHANA\",\"VELVA\",\"TAWANNA\",\"SADE\",\"MIRTA\",\"LI\",\"KARIE\",\"JACINTA\",\"ELNA\",\"DAVINA\",\"CIERRA\",\"ASHLIE\",\"ALBERTHA\",\"TANESHA\",\"STEPHANI\",\"NELLE\",\"MINDI\",\"LU\",\"LORINDA\",\"LARUE\",\"FLORENE\",\"DEMETRA\",\"DEDRA\",\"CIARA\",\"CHANTELLE\",\"ASHLY\",\"SUZY\",\"ROSALVA\",\"NOELIA\",\"LYDA\",\"LEATHA\",\"KRYSTYNA\",\"KRISTAN\",\"KARRI\",\"DARLINE\",\"DARCIE\",\"CINDA\",\"CHEYENNE\",\"CHERRIE\",\"AWILDA\",\"ALMEDA\",\"ROLANDA\",\"LANETTE\",\"JERILYN\",\"GISELE\",\"EVALYN\",\"CYNDI\",\"CLETA\",\"CARIN\",\"ZINA\",\"ZENA\",\"VELIA\",\"TANIKA\",\"PAUL\",\"CHARISSA\",\"THOMAS\",\"TALIA\",\"MARGARETE\",\"LAVONDA\",\"KAYLEE\",\"KATHLENE\",\"JONNA\",\"IRENA\",\"ILONA\",\"IDALIA\",\"CANDIS\",\"CANDANCE\",\"BRANDEE\",\"ANITRA\",\"ALIDA\",\"SIGRID\",\"NICOLETTE\",\"MARYJO\",\"LINETTE\",\"HEDWIG\",\"CHRISTIANA\",\"CASSIDY\",\"ALEXIA\",\"TRESSIE\",\"MODESTA\",\"LUPITA\",\"LITA\",\"GLADIS\",\"EVELIA\",\"DAVIDA\",\"CHERRI\",\"CECILY\",\"ASHELY\",\"ANNABEL\",\"AGUSTINA\",\"WANITA\",\"SHIRLY\",\"ROSAURA\",\"HULDA\",\"EUN\",\"BAILEY\",\"YETTA\",\"VERONA\",\"THOMASINA\",\"SIBYL\",\"SHANNAN\",\"MECHELLE\",\"LUE\",\"LEANDRA\",\"LANI\",\"KYLEE\",\"KANDY\",\"JOLYNN\",\"FERNE\",\"EBONI\",\"CORENE\",\"ALYSIA\",\"ZULA\",\"NADA\",\"MOIRA\",\"LYNDSAY\",\"LORRETTA\",\"JUAN\",\"JAMMIE\",\"HORTENSIA\",\"GAYNELL\",\"CAMERON\",\"ADRIA\",\"VINA\",\"VICENTA\",\"TANGELA\",\"STEPHINE\",\"NORINE\",\"NELLA\",\"LIANA\",\"LESLEE\",\"KIMBERELY\",\"ILIANA\",\"GLORY\",\"FELICA\",\"EMOGENE\",\"ELFRIEDE\",\"EDEN\",\"EARTHA\",\"CARMA\",\"BEA\",\"OCIE\",\"MARRY\",\"LENNIE\",\"KIARA\",\"JACALYN\",\"CARLOTA\",\"ARIELLE\",\"YU\",\"STAR\",\"OTILIA\",\"KIRSTIN\",\"KACEY\",\"JOHNETTA\",\"JOEY\",\"JOETTA\",\"JERALDINE\",\"JAUNITA\",\"ELANA\",\"DORTHEA\",\"CAMI\",\"AMADA\",\"ADELIA\",\"VERNITA\",\"TAMAR\",\"SIOBHAN\",\"RENEA\",\"RASHIDA\",\"OUIDA\",\"ODELL\",\"NILSA\",\"MERYL\",\"KRISTYN\",\"JULIETA\",\"DANICA\",\"BREANNE\",\"AUREA\",\"ANGLEA\",\"SHERRON\",\"ODETTE\",\"MALIA\",\"LORELEI\",\"LIN\",\"LEESA\",\"KENNA\",\"KATHLYN\",\"FIONA\",\"CHARLETTE\",\"SUZIE\",\"SHANTELL\",\"SABRA\",\"RACQUEL\",\"MYONG\",\"MIRA\",\"MARTINE\",\"LUCIENNE\",\"LAVADA\",\"JULIANN\",\"JOHNIE\",\"ELVERA\",\"DELPHIA\",\"CLAIR\",\"CHRISTIANE\",\"CHAROLETTE\",\"CARRI\",\"AUGUSTINE\",\"ASHA\",\"ANGELLA\",\"PAOLA\",\"NINFA\",\"LEDA\",\"LAI\",\"EDA\",\"SUNSHINE\",\"STEFANI\",\"SHANELL\",\"PALMA\",\"MACHELLE\",\"LISSA\",\"KECIA\",\"KATHRYNE\",\"KARLENE\",\"JULISSA\",\"JETTIE\",\"JENNIFFER\",\"HUI\",\"CORRINA\",\"CHRISTOPHER\",\"CAROLANN\",\"ALENA\",\"TESS\",\"ROSARIA\",\"MYRTICE\",\"MARYLEE\",\"LIANE\",\"KENYATTA\",\"JUDIE\",\"JANEY\",\"IN\",\"ELMIRA\",\"ELDORA\",\"DENNA\",\"CRISTI\",\"CATHI\",\"ZAIDA\",\"VONNIE\",\"VIVA\",\"VERNIE\",\"ROSALINE\",\"MARIELA\",\"LUCIANA\",\"LESLI\",\"KARAN\",\"FELICE\",\"DENEEN\",\"ADINA\",\"WYNONA\",\"TARSHA\",\"SHERON\",\"SHASTA\",\"SHANITA\",\"SHANI\",\"SHANDRA\",\"RANDA\",\"PINKIE\",\"PARIS\",\"NELIDA\",\"MARILOU\",\"LYLA\",\"LAURENE\",\"LACI\",\"JOI\",\"JANENE\",\"DOROTHA\",\"DANIELE\",\"DANI\",\"CAROLYNN\",\"CARLYN\",\"BERENICE\",\"AYESHA\",\"ANNELIESE\",\"ALETHEA\",\"THERSA\",\"TAMIKO\",\"RUFINA\",\"OLIVA\",\"MOZELL\",\"MARYLYN\",\"MADISON\",\"KRISTIAN\",\"KATHYRN\",\"KASANDRA\",\"KANDACE\",\"JANAE\",\"GABRIEL\",\"DOMENICA\",\"DEBBRA\",\"DANNIELLE\",\"CHUN\",\"BUFFY\",\"BARBIE\",\"ARCELIA\",\"AJA\",\"ZENOBIA\",\"SHAREN\",\"SHAREE\",\"PATRICK\",\"PAGE\",\"MY\",\"LAVINIA\",\"KUM\",\"KACIE\",\"JACKELINE\",\"HUONG\",\"FELISA\",\"EMELIA\",\"ELEANORA\",\"CYTHIA\",\"CRISTIN\",\"CLYDE\",\"CLARIBEL\",\"CARON\",\"ANASTACIA\",\"ZULMA\",\"ZANDRA\",\"YOKO\",\"TENISHA\",\"SUSANN\",\"SHERILYN\",\"SHAY\",\"SHAWANDA\",\"SABINE\",\"ROMANA\",\"MATHILDA\",\"LINSEY\",\"KEIKO\",\"JOANA\",\"ISELA\",\"GRETTA\",\"GEORGETTA\",\"EUGENIE\",\"DUSTY\",\"DESIRAE\",\"DELORA\",\"CORAZON\",\"ANTONINA\",\"ANIKA\",\"WILLENE\",\"TRACEE\",\"TAMATHA\",\"REGAN\",\"NICHELLE\",\"MICKIE\",\"MAEGAN\",\"LUANA\",\"LANITA\",\"KELSIE\",\"EDELMIRA\",\"BREE\",\"AFTON\",\"TEODORA\",\"TAMIE\",\"SHENA\",\"MEG\",\"LINH\",\"KELI\",\"KACI\",\"DANYELLE\",\"BRITT\",\"ARLETTE\",\"ALBERTINE\",\"ADELLE\",\"TIFFINY\",\"STORMY\",\"SIMONA\",\"NUMBERS\",\"NICOLASA\",\"NICHOL\",\"NIA\",\"NAKISHA\",\"MEE\",\"MAIRA\",\"LOREEN\",\"KIZZY\",\"JOHNNY\",\"JAY\",\"FALLON\",\"CHRISTENE\",\"BOBBYE\",\"ANTHONY\",\"YING\",\"VINCENZA\",\"TANJA\",\"RUBIE\",\"RONI\",\"QUEENIE\",\"MARGARETT\",\"KIMBERLI\",\"IRMGARD\",\"IDELL\",\"HILMA\",\"EVELINA\",\"ESTA\",\"EMILEE\",\"DENNISE\",\"DANIA\",\"CARL\",\"CARIE\",\"ANTONIO\",\"WAI\",\"SANG\",\"RISA\",\"RIKKI\",\"PARTICIA\",\"MUI\",\"MASAKO\",\"MARIO\",\"LUVENIA\",\"LOREE\",\"LONI\",\"LIEN\",\"KEVIN\",\"GIGI\",\"FLORENCIA\",\"DORIAN\",\"DENITA\",\"DALLAS\",\"CHI\",\"BILLYE\",\"ALEXANDER\",\"TOMIKA\",\"SHARITA\",\"RANA\",\"NIKOLE\",\"NEOMA\",\"MARGARITE\",\"MADALYN\",\"LUCINA\",\"LAILA\",\"KALI\",\"JENETTE\",\"GABRIELE\",\"EVELYNE\",\"ELENORA\",\"CLEMENTINA\",\"ALEJANDRINA\",\"ZULEMA\",\"VIOLETTE\",\"VANNESSA\",\"THRESA\",\"RETTA\",\"PIA\",\"PATIENCE\",\"NOELLA\",\"NICKIE\",\"JONELL\",\"DELTA\",\"CHUNG\",\"CHAYA\",\"CAMELIA\",\"BETHEL\",\"ANYA\",\"ANDREW\",\"THANH\",\"SUZANN\",\"SPRING\",\"SHU\",\"MILA\",\"LILLA\",\"LAVERNA\",\"KEESHA\",\"KATTIE\",\"GIA\",\"GEORGENE\",\"EVELINE\",\"ESTELL\",\"ELIZBETH\",\"VIVIENNE\",\"VALLIE\",\"TRUDIE\",\"STEPHANE\",\"MICHEL\",\"MAGALY\",\"MADIE\",\"KENYETTA\",\"KARREN\",\"JANETTA\",\"HERMINE\",\"HARMONY\",\"DRUCILLA\",\"DEBBI\",\"CELESTINA\",\"CANDIE\",\"BRITNI\",\"BECKIE\",\"AMINA\",\"ZITA\",\"YUN\",\"YOLANDE\",\"VIVIEN\",\"VERNETTA\",\"TRUDI\",\"SOMMER\",\"PEARLE\",\"PATRINA\",\"OSSIE\",\"NICOLLE\",\"LOYCE\",\"LETTY\",\"LARISA\",\"KATHARINA\",\"JOSELYN\",\"JONELLE\",\"JENELL\",\"IESHA\",\"HEIDE\",\"FLORINDA\",\"FLORENTINA\",\"FLO\",\"ELODIA\",\"DORINE\",\"BRUNILDA\",\"BRIGID\",\"ASHLI\",\"ARDELLA\",\"TWANA\",\"THU\",\"TARAH\",\"SUNG\",\"SHEA\",\"SHAVON\",\"SHANE\",\"SERINA\",\"RAYNA\",\"RAMONITA\",\"NGA\",\"MARGURITE\",\"LUCRECIA\",\"KOURTNEY\",\"KATI\",\"JESUS\",\"JESENIA\",\"DIAMOND\",\"CRISTA\",\"AYANA\",\"ALICA\",\"ALIA\",\"VINNIE\",\"SUELLEN\",\"ROMELIA\",\"RACHELL\",\"PIPER\",\"OLYMPIA\",\"MICHIKO\",\"KATHALEEN\",\"JOLIE\",\"JESSI\",\"JANESSA\",\"HANA\",\"HA\",\"ELEASE\",\"CARLETTA\",\"BRITANY\",\"SHONA\",\"SALOME\",\"ROSAMOND\",\"REGENA\",\"RAINA\",\"NGOC\",\"NELIA\",\"LOUVENIA\",\"LESIA\",\"LATRINA\",\"LATICIA\",\"LARHONDA\",\"JINA\",\"JACKI\",\"HOLLIS\",\"HOLLEY\",\"EMMY\",\"DEEANN\",\"CORETTA\",\"ARNETTA\",\"VELVET\",\"THALIA\",\"SHANICE\",\"NETA\",\"MIKKI\",\"MICKI\",\"LONNA\",\"LEANA\",\"LASHUNDA\",\"KILEY\",\"JOYE\",\"JACQULYN\",\"IGNACIA\",\"HYUN\",\"HIROKO\",\"HENRY\",\"HENRIETTE\",\"ELAYNE\",\"DELINDA\",\"DARNELL\",\"DAHLIA\",\"COREEN\",\"CONSUELA\",\"CONCHITA\",\"CELINE\",\"BABETTE\",\"AYANNA\",\"ANETTE\",\"ALBERTINA\",\"SKYE\",\"SHAWNEE\",\"SHANEKA\",\"QUIANA\",\"PAMELIA\",\"MIN\",\"MERRI\",\"MERLENE\",\"MARGIT\",\"KIESHA\",\"KIERA\",\"KAYLENE\",\"JODEE\",\"JENISE\",\"ERLENE\",\"EMMIE\",\"ELSE\",\"DARYL\",\"DALILA\",\"DAISEY\",\"CODY\",\"CASIE\",\"BELIA\",\"BABARA\",\"VERSIE\",\"VANESA\",\"SHELBA\",\"SHAWNDA\",\"SAM\",\"NORMAN\",\"NIKIA\",\"NAOMA\",\"MARNA\",\"MARGERET\",\"MADALINE\",\"LAWANA\",\"KINDRA\",\"JUTTA\",\"JAZMINE\",\"JANETT\",\"HANNELORE\",\"GLENDORA\",\"GERTRUD\",\"GARNETT\",\"FREEDA\",\"FREDERICA\",\"FLORANCE\",\"FLAVIA\",\"DENNIS\",\"CARLINE\",\"BEVERLEE\",\"ANJANETTE\",\"VALDA\",\"TRINITY\",\"TAMALA\",\"STEVIE\",\"SHONNA\",\"SHA\",\"SARINA\",\"ONEIDA\",\"MICAH\",\"MERILYN\",\"MARLEEN\",\"LURLINE\",\"LENNA\",\"KATHERIN\",\"JIN\",\"JENI\",\"HAE\",\"GRACIA\",\"GLADY\",\"FARAH\",\"ERIC\",\"ENOLA\",\"EMA\",\"DOMINQUE\",\"DEVONA\",\"DELANA\",\"CECILA\",\"CAPRICE\",\"ALYSHA\",\"ALI\",\"ALETHIA\",\"VENA\",\"THERESIA\",\"TAWNY\",\"SONG\",\"SHAKIRA\",\"SAMARA\",\"SACHIKO\",\"RACHELE\",\"PAMELLA\",\"NICKY\",\"MARNI\",\"MARIEL\",\"MAREN\",\"MALISA\",\"LIGIA\",\"LERA\",\"LATORIA\",\"LARAE\",\"KIMBER\",\"KATHERN\",\"KAREY\",\"JENNEFER\",\"JANETH\",\"HALINA\",\"FREDIA\",\"DELISA\",\"DEBROAH\",\"CIERA\",\"CHIN\",\"ANGELIKA\",\"ANDREE\",\"ALTHA\",\"YEN\",\"VIVAN\",\"TERRESA\",\"TANNA\",\"SUK\",\"SUDIE\",\"SOO\",\"SIGNE\",\"SALENA\",\"RONNI\",\"REBBECCA\",\"MYRTIE\",\"MCKENZIE\",\"MALIKA\",\"MAIDA\",\"LOAN\",\"LEONARDA\",\"KAYLEIGH\",\"FRANCE\",\"ETHYL\",\"ELLYN\",\"DAYLE\",\"CAMMIE\",\"BRITTNI\",\"BIRGIT\",\"AVELINA\",\"ASUNCION\",\"ARIANNA\",\"AKIKO\",\"VENICE\",\"TYESHA\",\"TONIE\",\"TIESHA\",\"TAKISHA\",\"STEFFANIE\",\"SINDY\",\"SANTANA\",\"MEGHANN\",\"MANDA\",\"MACIE\",\"LADY\",\"KELLYE\",\"KELLEE\",\"JOSLYN\",\"JASON\",\"INGER\",\"INDIRA\",\"GLINDA\",\"GLENNIS\",\"FERNANDA\",\"FAUSTINA\",\"ENEIDA\",\"ELICIA\",\"DOT\",\"DIGNA\",\"DELL\",\"ARLETTA\",\"ANDRE\",\"WILLIA\",\"TAMMARA\",\"TABETHA\",\"SHERRELL\",\"SARI\",\"REFUGIO\",\"REBBECA\",\"PAULETTA\",\"NIEVES\",\"NATOSHA\",\"NAKITA\",\"MAMMIE\",\"KENISHA\",\"KAZUKO\",\"KASSIE\",\"GARY\",\"EARLEAN\",\"DAPHINE\",\"CORLISS\",\"CLOTILDE\",\"CAROLYNE\",\"BERNETTA\",\"AUGUSTINA\",\"AUDREA\",\"ANNIS\",\"ANNABELL\",\"YAN\",\"TENNILLE\",\"TAMICA\",\"SELENE\",\"SEAN\",\"ROSANA\",\"REGENIA\",\"QIANA\",\"MARKITA\",\"MACY\",\"LEEANNE\",\"LAURINE\",\"KYM\",\"JESSENIA\",\"JANITA\",\"GEORGINE\",\"GENIE\",\"EMIKO\",\"ELVIE\",\"DEANDRA\",\"DAGMAR\",\"CORIE\",\"COLLEN\",\"CHERISH\",\"ROMAINE\",\"PORSHA\",\"PEARLENE\",\"MICHELINE\",\"MERNA\",\"MARGORIE\",\"MARGARETTA\",\"LORE\",\"KENNETH\",\"JENINE\",\"HERMINA\",\"FREDERICKA\",\"ELKE\",\"DRUSILLA\",\"DORATHY\",\"DIONE\",\"DESIRE\",\"CELENA\",\"BRIGIDA\",\"ANGELES\",\"ALLEGRA\",\"THEO\",\"TAMEKIA\",\"SYNTHIA\",\"STEPHEN\",\"SOOK\",\"SLYVIA\",\"ROSANN\",\"REATHA\",\"RAYE\",\"MARQUETTA\",\"MARGART\",\"LING\",\"LAYLA\",\"KYMBERLY\",\"KIANA\",\"KAYLEEN\",\"KATLYN\",\"KARMEN\",\"JOELLA\",\"IRINA\",\"EMELDA\",\"ELENI\",\"DETRA\",\"CLEMMIE\",\"CHERYLL\",\"CHANTELL\",\"CATHEY\",\"ARNITA\",\"ARLA\",\"ANGLE\",\"ANGELIC\",\"ALYSE\",\"ZOFIA\",\"THOMASINE\",\"TENNIE\",\"SON\",\"SHERLY\",\"SHERLEY\",\"SHARYL\",\"REMEDIOS\",\"PETRINA\",\"NICKOLE\",\"MYUNG\",\"MYRLE\",\"MOZELLA\",\"LOUANNE\",\"LISHA\",\"LATIA\",\"LANE\",\"KRYSTA\",\"JULIENNE\",\"JOEL\",\"JEANENE\",\"JACQUALINE\",\"ISAURA\",\"GWENDA\",\"EARLEEN\",\"DONALD\",\"CLEOPATRA\",\"CARLIE\",\"AUDIE\",\"ANTONIETTA\",\"ALISE\",\"ALEX\",\"VERDELL\",\"VAL\",\"TYLER\",\"TOMOKO\",\"THAO\",\"TALISHA\",\"STEVEN\",\"SO\",\"SHEMIKA\",\"SHAUN\",\"SCARLET\",\"SAVANNA\",\"SANTINA\",\"ROSIA\",\"RAEANN\",\"ODILIA\",\"NANA\",\"MINNA\",\"MAGAN\",\"LYNELLE\",\"LE\",\"KARMA\",\"JOEANN\",\"IVANA\",\"INELL\",\"ILANA\",\"HYE\",\"HONEY\",\"HEE\",\"GUDRUN\",\"FRANK\",\"DREAMA\",\"CRISSY\",\"CHANTE\",\"CARMELINA\",\"ARVILLA\",\"ARTHUR\",\"ANNAMAE\",\"ALVERA\",\"ALEIDA\",\"AARON\",\"YEE\",\"YANIRA\",\"VANDA\",\"TIANNA\",\"TAM\",\"STEFANIA\",\"SHIRA\",\"PERRY\",\"NICOL\",\"NANCIE\",\"MONSERRATE\",\"MINH\",\"MELYNDA\",\"MELANY\",\"MATTHEW\",\"LOVELLA\",\"LAURE\",\"KIRBY\",\"KACY\",\"JACQUELYNN\",\"HYON\",\"GERTHA\",\"FRANCISCO\",\"ELIANA\",\"CHRISTENA\",\"CHRISTEEN\",\"CHARISE\",\"CATERINA\",\"CARLEY\",\"CANDYCE\",\"ARLENA\",\"AMMIE\",\"YANG\",\"WILLETTE\",\"VANITA\",\"TUYET\",\"TINY\",\"SYREETA\",\"SILVA\",\"SCOTT\",\"RONALD\",\"PENNEY\",\"NYLA\",\"MICHAL\",\"MAURICE\",\"MARYAM\",\"MARYA\",\"MAGEN\",\"LUDIE\",\"LOMA\",\"LIVIA\",\"LANELL\",\"KIMBERLIE\",\"JULEE\",\"DONETTA\",\"DIEDRA\",\"DENISHA\",\"DEANE\",\"DAWNE\",\"CLARINE\",\"CHERRYL\",\"BRONWYN\",\"BRANDON\",\"ALLA\",\"VALERY\",\"TONDA\",\"SUEANN\",\"SORAYA\",\"SHOSHANA\",\"SHELA\",\"SHARLEEN\",\"SHANELLE\",\"NERISSA\",\"MICHEAL\",\"MERIDITH\",\"MELLIE\",\"MAYE\",\"MAPLE\",\"MAGARET\",\"LUIS\",\"LILI\",\"LEONILA\",\"LEONIE\",\"LEEANNA\",\"LAVONIA\",\"LAVERA\",\"KRISTEL\",\"KATHEY\",\"KATHE\",\"JUSTIN\",\"JULIAN\",\"JIMMY\",\"JANN\",\"ILDA\",\"HILDRED\",\"HILDEGARDE\",\"GENIA\",\"FUMIKO\",\"EVELIN\",\"ERMELINDA\",\"ELLY\",\"DUNG\",\"DOLORIS\",\"DIONNA\",\"DANAE\",\"BERNEICE\",\"ANNICE\",\"ALIX\",\"VERENA\",\"VERDIE\",\"TRISTAN\",\"SHAWNNA\",\"SHAWANA\",\"SHAUNNA\",\"ROZELLA\",\"RANDEE\",\"RANAE\",\"MILAGRO\",\"LYNELL\",\"LUISE\",\"LOUIE\",\"LOIDA\",\"LISBETH\",\"KARLEEN\",\"JUNITA\",\"JONA\",\"ISIS\",\"HYACINTH\",\"HEDY\",\"GWENN\",\"ETHELENE\",\"ERLINE\",\"EDWARD\",\"DONYA\",\"DOMONIQUE\",\"DELICIA\",\"DANNETTE\",\"CICELY\",\"BRANDA\",\"BLYTHE\",\"BETHANN\",\"ASHLYN\",\"ANNALEE\",\"ALLINE\",\"YUKO\",\"VELLA\",\"TRANG\",\"TOWANDA\",\"TESHA\",\"SHERLYN\",\"NARCISA\",\"MIGUELINA\",\"MERI\",\"MAYBELL\",\"MARLANA\",\"MARGUERITA\",\"MADLYN\",\"LUNA\",\"LORY\",\"LORIANN\",\"LIBERTY\",\"LEONORE\",\"LEIGHANN\",\"LAURICE\",\"LATESHA\",\"LARONDA\",\"KATRICE\",\"KASIE\",\"KARL\",\"KALEY\",\"JADWIGA\",\"GLENNIE\",\"GEARLDINE\",\"FRANCINA\",\"EPIFANIA\",\"DYAN\",\"DORIE\",\"DIEDRE\",\"DENESE\",\"DEMETRICE\",\"DELENA\",\"DARBY\",\"CRISTIE\",\"CLEORA\",\"CATARINA\",\"CARISA\",\"BERNIE\",\"BARBERA\",\"ALMETA\",\"TRULA\",\"TEREASA\",\"SOLANGE\",\"SHEILAH\",\"SHAVONNE\",\"SANORA\",\"ROCHELL\",\"MATHILDE\",\"MARGARETA\",\"MAIA\",\"LYNSEY\",\"LAWANNA\",\"LAUNA\",\"KENA\",\"KEENA\",\"KATIA\",\"JAMEY\",\"GLYNDA\",\"GAYLENE\",\"ELVINA\",\"ELANOR\",\"DANUTA\",\"DANIKA\",\"CRISTEN\",\"CORDIE\",\"COLETTA\",\"CLARITA\",\"CARMON\",\"BRYNN\",\"AZUCENA\",\"AUNDREA\",\"ANGELE\",\"YI\",\"WALTER\",\"VERLIE\",\"VERLENE\",\"TAMESHA\",\"SILVANA\",\"SEBRINA\",\"SAMIRA\",\"REDA\",\"RAYLENE\",\"PENNI\",\"PANDORA\",\"NORAH\",\"NOMA\",\"MIREILLE\",\"MELISSIA\",\"MARYALICE\",\"LARAINE\",\"KIMBERY\",\"KARYL\",\"KARINE\",\"KAM\",\"JOLANDA\",\"JOHANA\",\"JESUSA\",\"JALEESA\",\"JAE\",\"JACQUELYNE\",\"IRISH\",\"ILUMINADA\",\"HILARIA\",\"HANH\",\"GENNIE\",\"FRANCIE\",\"FLORETTA\",\"EXIE\",\"EDDA\",\"DREMA\",\"DELPHA\",\"BEV\",\"BARBAR\",\"ASSUNTA\",\"ARDELL\",\"ANNALISA\",\"ALISIA\",\"YUKIKO\",\"YOLANDO\",\"WONDA\",\"WEI\",\"WALTRAUD\",\"VETA\",\"TEQUILA\",\"TEMEKA\",\"TAMEIKA\",\"SHIRLEEN\",\"SHENITA\",\"PIEDAD\",\"OZELLA\",\"MIRTHA\",\"MARILU\",\"KIMIKO\",\"JULIANE\",\"JENICE\",\"JEN\",\"JANAY\",\"JACQUILINE\",\"HILDE\",\"FE\",\"FAE\",\"EVAN\",\"EUGENE\",\"ELOIS\",\"ECHO\",\"DEVORAH\",\"CHAU\",\"BRINDA\",\"BETSEY\",\"ARMINDA\",\"ARACELIS\",\"APRYL\",\"ANNETT\",\"ALISHIA\",\"VEOLA\",\"USHA\",\"TOSHIKO\",\"THEOLA\",\"TASHIA\",\"TALITHA\",\"SHERY\",\"RUDY\",\"RENETTA\",\"REIKO\",\"RASHEEDA\",\"OMEGA\",\"OBDULIA\",\"MIKA\",\"MELAINE\",\"MEGGAN\",\"MARTIN\",\"MARLEN\",\"MARGET\",\"MARCELINE\",\"MANA\",\"MAGDALEN\",\"LIBRADA\",\"LEZLIE\",\"LEXIE\",\"LATASHIA\",\"LASANDRA\",\"KELLE\",\"ISIDRA\",\"ISA\",\"INOCENCIA\",\"GWYN\",\"FRANCOISE\",\"ERMINIA\",\"ERINN\",\"DIMPLE\",\"DEVORA\",\"CRISELDA\",\"ARMANDA\",\"ARIE\",\"ARIANE\",\"ANGELO\",\"ANGELENA\",\"ALLEN\",\"ALIZA\",\"ADRIENE\",\"ADALINE\",\"XOCHITL\",\"TWANNA\",\"TRAN\",\"TOMIKO\",\"TAMISHA\",\"TAISHA\",\"SUSY\",\"SIU\",\"RUTHA\",\"ROXY\",\"RHONA\",\"RAYMOND\",\"OTHA\",\"NORIKO\",\"NATASHIA\",\"MERRIE\",\"MELVIN\",\"MARINDA\",\"MARIKO\",\"MARGERT\",\"LORIS\",\"LIZZETTE\",\"LEISHA\",\"KAILA\",\"KA\",\"JOANNIE\",\"JERRICA\",\"JENE\",\"JANNET\",\"JANEE\",\"JACINDA\",\"HERTA\",\"ELENORE\",\"DORETTA\",\"DELAINE\",\"DANIELL\",\"CLAUDIE\",\"CHINA\",\"BRITTA\",\"APOLONIA\",\"AMBERLY\",\"ALEASE\",\"YURI\",\"YUK\",\"WEN\",\"WANETA\",\"UTE\",\"TOMI\",\"SHARRI\",\"SANDIE\",\"ROSELLE\",\"REYNALDA\",\"RAGUEL\",\"PHYLICIA\",\"PATRIA\",\"OLIMPIA\",\"ODELIA\",\"MITZIE\",\"MITCHELL\",\"MISS\",\"MINDA\",\"MIGNON\",\"MICA\",\"MENDY\",\"MARIVEL\",\"MAILE\",\"LYNETTA\",\"LAVETTE\",\"LAURYN\",\"LATRISHA\",\"LAKIESHA\",\"KIERSTEN\",\"KARY\",\"JOSPHINE\",\"JOLYN\",\"JETTA\",\"JANISE\",\"JACQUIE\",\"IVELISSE\",\"GLYNIS\",\"GIANNA\",\"GAYNELLE\",\"EMERALD\",\"DEMETRIUS\",\"DANYELL\",\"DANILLE\",\"DACIA\",\"CORALEE\",\"CHER\",\"CEOLA\",\"BRETT\",\"BELL\",\"ARIANNE\",\"ALESHIA\",\"YUNG\",\"WILLIEMAE\",\"TROY\",\"TRINH\",\"THORA\",\"TAI\",\"SVETLANA\",\"SHERIKA\",\"SHEMEKA\",\"SHAUNDA\",\"ROSELINE\",\"RICKI\",\"MELDA\",\"MALLIE\",\"LAVONNA\",\"LATINA\",\"LARRY\",\"LAQUANDA\",\"LALA\",\"LACHELLE\",\"KLARA\",\"KANDIS\",\"JOHNA\",\"JEANMARIE\",\"JAYE\",\"HANG\",\"GRAYCE\",\"GERTUDE\",\"EMERITA\",\"EBONIE\",\"CLORINDA\",\"CHING\",\"CHERY\",\"CAROLA\",\"BREANN\",\"BLOSSOM\",\"BERNARDINE\",\"BECKI\",\"ARLETHA\",\"ARGELIA\",\"ARA\",\"ALITA\",\"YULANDA\",\"YON\",\"YESSENIA\",\"TOBI\",\"TASIA\",\"SYLVIE\",\"SHIRL\",\"SHIRELY\",\"SHERIDAN\",\"SHELLA\",\"SHANTELLE\",\"SACHA\",\"ROYCE\",\"REBECKA\",\"REAGAN\",\"PROVIDENCIA\",\"PAULENE\",\"MISHA\",\"MIKI\",\"MARLINE\",\"MARICA\",\"LORITA\",\"LATOYIA\",\"LASONYA\",\"KERSTIN\",\"KENDA\",\"KEITHA\",\"KATHRIN\",\"JAYMIE\",\"JACK\",\"GRICELDA\",\"GINETTE\",\"ERYN\",\"ELINA\",\"ELFRIEDA\",\"DANYEL\",\"CHEREE\",\"CHANELLE\",\"BARRIE\",\"AVERY\",\"AURORE\",\"ANNAMARIA\",\"ALLEEN\",\"AILENE\",\"AIDE\",\"YASMINE\",\"VASHTI\",\"VALENTINE\",\"TREASA\",\"TORY\",\"TIFFANEY\",\"SHERYLL\",\"SHARIE\",\"SHANAE\",\"SAU\",\"RAISA\",\"PA\",\"NEDA\",\"MITSUKO\",\"MIRELLA\",\"MILDA\",\"MARYANNA\",\"MARAGRET\",\"MABELLE\",\"LUETTA\",\"LORINA\",\"LETISHA\",\"LATARSHA\",\"LANELLE\",\"LAJUANA\",\"KRISSY\",\"KARLY\",\"KARENA\",\"JON\",\"JESSIKA\",\"JERICA\",\"JEANELLE\",\"JANUARY\",\"JALISA\",\"JACELYN\",\"IZOLA\",\"IVEY\",\"GREGORY\",\"EUNA\",\"ETHA\",\"DREW\",\"DOMITILA\",\"DOMINICA\",\"DAINA\",\"CREOLA\",\"CARLI\",\"CAMIE\",\"BUNNY\",\"BRITTNY\",\"ASHANTI\",\"ANISHA\",\"ALEEN\",\"ADAH\",\"YASUKO\",\"WINTER\",\"VIKI\",\"VALRIE\",\"TONA\",\"TINISHA\",\"THI\",\"TERISA\",\"TATUM\",\"TANEKA\",\"SIMONNE\",\"SHALANDA\",\"SERITA\",\"RESSIE\",\"REFUGIA\",\"PAZ\",\"OLENE\",\"NA\",\"MERRILL\",\"MARGHERITA\",\"MANDIE\",\"MAN\",\"MAIRE\",\"LYNDIA\",\"LUCI\",\"LORRIANE\",\"LORETA\",\"LEONIA\",\"LAVONA\",\"LASHAWNDA\",\"LAKIA\",\"KYOKO\",\"KRYSTINA\",\"KRYSTEN\",\"KENIA\",\"KELSI\",\"JUDE\",\"JEANICE\",\"ISOBEL\",\"GEORGIANN\",\"GENNY\",\"FELICIDAD\",\"EILENE\",\"DEON\",\"DELOISE\",\"DEEDEE\",\"DANNIE\",\"CONCEPTION\",\"CLORA\",\"CHERILYN\",\"CHANG\",\"CALANDRA\",\"BERRY\",\"ARMANDINA\",\"ANISA\",\"ULA\",\"TIMOTHY\",\"TIERA\",\"THERESSA\",\"STEPHANIA\",\"SIMA\",\"SHYLA\",\"SHONTA\",\"SHERA\",\"SHAQUITA\",\"SHALA\",\"SAMMY\",\"ROSSANA\",\"NOHEMI\",\"NERY\",\"MORIAH\",\"MELITA\",\"MELIDA\",\"MELANI\",\"MARYLYNN\",\"MARISHA\",\"MARIETTE\",\"MALORIE\",\"MADELENE\",\"LUDIVINA\",\"LORIA\",\"LORETTE\",\"LORALEE\",\"LIANNE\",\"LEON\",\"LAVENIA\",\"LAURINDA\",\"LASHON\",\"KIT\",\"KIMI\",\"KEILA\",\"KATELYNN\",\"KAI\",\"JONE\",\"JOANE\",\"JI\",\"JAYNA\",\"JANELLA\",\"JA\",\"HUE\",\"HERTHA\",\"FRANCENE\",\"ELINORE\",\"DESPINA\",\"DELSIE\",\"DEEDRA\",\"CLEMENCIA\",\"CARRY\",\"CAROLIN\",\"CARLOS\",\"BULAH\",\"BRITTANIE\",\"BOK\",\"BLONDELL\",\"BIBI\",\"BEAULAH\",\"BEATA\",\"ANNITA\",\"AGRIPINA\",\"VIRGEN\",\"VALENE\",\"UN\",\"TWANDA\",\"TOMMYE\",\"TOI\",\"TARRA\",\"TARI\",\"TAMMERA\",\"SHAKIA\",\"SADYE\",\"RUTHANNE\",\"ROCHEL\",\"RIVKA\",\"PURA\",\"NENITA\",\"NATISHA\",\"MING\",\"MERRILEE\",\"MELODEE\",\"MARVIS\",\"LUCILLA\",\"LEENA\",\"LAVETA\",\"LARITA\",\"LANIE\",\"KEREN\",\"ILEEN\",\"GEORGEANN\",\"GENNA\",\"GENESIS\",\"FRIDA\",\"EWA\",\"EUFEMIA\",\"EMELY\",\"ELA\",\"EDYTH\",\"DEONNA\",\"DEADRA\",\"DARLENA\",\"CHANELL\",\"CHAN\",\"CATHERN\",\"CASSONDRA\",\"CASSAUNDRA\",\"BERNARDA\",\"BERNA\",\"ARLINDA\",\"ANAMARIA\",\"ALBERT\",\"WESLEY\",\"VERTIE\",\"VALERI\",\"TORRI\",\"TATYANA\",\"STASIA\",\"SHERISE\",\"SHERILL\",\"SEASON\",\"SCOTTIE\",\"SANDA\",\"RUTHE\",\"ROSY\",\"ROBERTO\",\"ROBBI\",\"RANEE\",\"QUYEN\",\"PEARLY\",\"PALMIRA\",\"ONITA\",\"NISHA\",\"NIESHA\",\"NIDA\",\"NEVADA\",\"NAM\",\"MERLYN\",\"MAYOLA\",\"MARYLOUISE\",\"MARYLAND\",\"MARX\",\"MARTH\",\"MARGENE\",\"MADELAINE\",\"LONDA\",\"LEONTINE\",\"LEOMA\",\"LEIA\",\"LAWRENCE\",\"LAURALEE\",\"LANORA\",\"LAKITA\",\"KIYOKO\",\"KETURAH\",\"KATELIN\",\"KAREEN\",\"JONIE\",\"JOHNETTE\",\"JENEE\",\"JEANETT\",\"IZETTA\",\"HIEDI\",\"HEIKE\",\"HASSIE\",\"HAROLD\",\"GIUSEPPINA\",\"GEORGANN\",\"FIDELA\",\"FERNANDE\",\"ELWANDA\",\"ELLAMAE\",\"ELIZ\",\"DUSTI\",\"DOTTY\",\"CYNDY\",\"CORALIE\",\"CELESTA\",\"ARGENTINA\",\"ALVERTA\",\"XENIA\",\"WAVA\",\"VANETTA\",\"TORRIE\",\"TASHINA\",\"TANDY\",\"TAMBRA\",\"TAMA\",\"STEPANIE\",\"SHILA\",\"SHAUNTA\",\"SHARAN\",\"SHANIQUA\",\"SHAE\",\"SETSUKO\",\"SERAFINA\",\"SANDEE\",\"ROSAMARIA\",\"PRISCILA\",\"OLINDA\",\"NADENE\",\"MUOI\",\"MICHELINA\",\"MERCEDEZ\",\"MARYROSE\",\"MARIN\",\"MARCENE\",\"MAO\",\"MAGALI\",\"MAFALDA\",\"LOGAN\",\"LINN\",\"LANNIE\",\"KAYCE\",\"KAROLINE\",\"KAMILAH\",\"KAMALA\",\"JUSTA\",\"JOLINE\",\"JENNINE\",\"JACQUETTA\",\"IRAIDA\",\"GERALD\",\"GEORGEANNA\",\"FRANCHESCA\",\"FAIRY\",\"EMELINE\",\"ELANE\",\"EHTEL\",\"EARLIE\",\"DULCIE\",\"DALENE\",\"CRIS\",\"CLASSIE\",\"CHERE\",\"CHARIS\",\"CAROYLN\",\"CARMINA\",\"CARITA\",\"BRIAN\",\"BETHANIE\",\"AYAKO\",\"ARICA\",\"AN\",\"ALYSA\",\"ALESSANDRA\",\"AKILAH\",\"ADRIEN\",\"ZETTA\",\"YOULANDA\",\"YELENA\",\"YAHAIRA\",\"XUAN\",\"WENDOLYN\",\"VICTOR\",\"TIJUANA\",\"TERRELL\",\"TERINA\",\"TERESIA\",\"SUZI\",\"SUNDAY\",\"SHERELL\",\"SHAVONDA\",\"SHAUNTE\",\"SHARDA\",\"SHAKITA\",\"SENA\",\"RYANN\",\"RUBI\",\"RIVA\",\"REGINIA\",\"REA\",\"RACHAL\",\"PARTHENIA\",\"PAMULA\",\"MONNIE\",\"MONET\",\"MICHAELE\",\"MELIA\",\"MARINE\",\"MALKA\",\"MAISHA\",\"LISANDRA\",\"LEO\",\"LEKISHA\",\"LEAN\",\"LAURENCE\",\"LAKENDRA\",\"KRYSTIN\",\"KORTNEY\",\"KIZZIE\",\"KITTIE\",\"KERA\",\"KENDAL\",\"KEMBERLY\",\"KANISHA\",\"JULENE\",\"JULE\",\"JOSHUA\",\"JOHANNE\",\"JEFFREY\",\"JAMEE\",\"HAN\",\"HALLEY\",\"GIDGET\",\"GALINA\",\"FREDRICKA\",\"FLETA\",\"FATIMAH\",\"EUSEBIA\",\"ELZA\",\"ELEONORE\",\"DORTHEY\",\"DORIA\",\"DONELLA\",\"DINORAH\",\"DELORSE\",\"CLARETHA\",\"CHRISTINIA\",\"CHARLYN\",\"BONG\",\"BELKIS\",\"AZZIE\",\"ANDERA\",\"AIKO\",\"ADENA\",\"YER\",\"YAJAIRA\",\"WAN\",\"VANIA\",\"ULRIKE\",\"TOSHIA\",\"TIFANY\",\"STEFANY\",\"SHIZUE\",\"SHENIKA\",\"SHAWANNA\",\"SHAROLYN\",\"SHARILYN\",\"SHAQUANA\",\"SHANTAY\",\"SEE\",\"ROZANNE\",\"ROSELEE\",\"RICKIE\",\"REMONA\",\"REANNA\",\"RAELENE\",\"QUINN\",\"PHUNG\",\"PETRONILA\",\"NATACHA\",\"NANCEY\",\"MYRL\",\"MIYOKO\",\"MIESHA\",\"MERIDETH\",\"MARVELLA\",\"MARQUITTA\",\"MARHTA\",\"MARCHELLE\",\"LIZETH\",\"LIBBIE\",\"LAHOMA\",\"LADAWN\",\"KINA\",\"KATHELEEN\",\"KATHARYN\",\"KARISA\",\"KALEIGH\",\"JUNIE\",\"JULIEANN\",\"JOHNSIE\",\"JANEAN\",\"JAIMEE\",\"JACKQUELINE\",\"HISAKO\",\"HERMA\",\"HELAINE\",\"GWYNETH\",\"GLENN\",\"GITA\",\"EUSTOLIA\",\"EMELINA\",\"ELIN\",\"EDRIS\",\"DONNETTE\",\"DONNETTA\",\"DIERDRE\",\"DENAE\",\"DARCEL\",\"CLAUDE\",\"CLARISA\",\"CINDERELLA\",\"CHIA\",\"CHARLESETTA\",\"CHARITA\",\"CELSA\",\"CASSY\",\"CASSI\",\"CARLEE\",\"BRUNA\",\"BRITTANEY\",\"BRANDE\",\"BILLI\",\"BAO\",\"ANTONETTA\",\"ANGLA\",\"ANGELYN\",\"ANALISA\",\"ALANE\",\"WENONA\",\"WENDIE\",\"VERONIQUE\",\"VANNESA\",\"TOBIE\",\"TEMPIE\",\"SUMIKO\",\"SULEMA\",\"SPARKLE\",\"SOMER\",\"SHEBA\",\"SHAYNE\",\"SHARICE\",\"SHANEL\",\"SHALON\",\"SAGE\",\"ROY\",\"ROSIO\",\"ROSELIA\",\"RENAY\",\"REMA\",\"REENA\",\"PORSCHE\",\"PING\",\"PEG\",\"OZIE\",\"ORETHA\",\"ORALEE\",\"ODA\",\"NU\",\"NGAN\",\"NAKESHA\",\"MILLY\",\"MARYBELLE\",\"MARLIN\",\"MARIS\",\"MARGRETT\",\"MARAGARET\",\"MANIE\",\"LURLENE\",\"LILLIA\",\"LIESELOTTE\",\"LAVELLE\",\"LASHAUNDA\",\"LAKEESHA\",\"KEITH\",\"KAYCEE\",\"KALYN\",\"JOYA\",\"JOETTE\",\"JENAE\",\"JANIECE\",\"ILLA\",\"GRISEL\",\"GLAYDS\",\"GENEVIE\",\"GALA\",\"FREDDA\",\"FRED\",\"ELMER\",\"ELEONOR\",\"DEBERA\",\"DEANDREA\",\"DAN\",\"CORRINNE\",\"CORDIA\",\"CONTESSA\",\"COLENE\",\"CLEOTILDE\",\"CHARLOTT\",\"CHANTAY\",\"CECILLE\",\"BEATRIS\",\"AZALEE\",\"ARLEAN\",\"ARDATH\",\"ANJELICA\",\"ANJA\",\"ALFREDIA\",\"ALEISHA\",\"ADAM\",\"ZADA\",\"YUONNE\",\"XIAO\",\"WILLODEAN\",\"WHITLEY\",\"VENNIE\",\"VANNA\",\"TYISHA\",\"TOVA\",\"TORIE\",\"TONISHA\",\"TILDA\",\"TIEN\",\"TEMPLE\",\"SIRENA\",\"SHERRIL\",\"SHANTI\",\"SHAN\",\"SENAIDA\",\"SAMELLA\",\"ROBBYN\",\"RENDA\",\"REITA\",\"PHEBE\",\"PAULITA\",\"NOBUKO\",\"NGUYET\",\"NEOMI\",\"MOON\",\"MIKAELA\",\"MELANIA\",\"MAXIMINA\",\"MARG\",\"MAISIE\",\"LYNNA\",\"LILLI\",\"LAYNE\",\"LASHAUN\",\"LAKENYA\",\"LAEL\",\"KIRSTIE\",\"KATHLINE\",\"KASHA\",\"KARLYN\",\"KARIMA\",\"JOVAN\",\"JOSEFINE\",\"JENNELL\",\"JACQUI\",\"JACKELYN\",\"HYO\",\"HIEN\",\"GRAZYNA\",\"FLORRIE\",\"FLORIA\",\"ELEONORA\",\"DWANA\",\"DORLA\",\"DONG\",\"DELMY\",\"DEJA\",\"DEDE\",\"DANN\",\"CRYSTA\",\"CLELIA\",\"CLARIS\",\"CLARENCE\",\"CHIEKO\",\"CHERLYN\",\"CHERELLE\",\"CHARMAIN\",\"CHARA\",\"CAMMY\",\"BEE\",\"ARNETTE\",\"ARDELLE\",\"ANNIKA\",\"AMIEE\",\"AMEE\",\"ALLENA\",\"YVONE\",\"YUKI\",\"YOSHIE\",\"YEVETTE\",\"YAEL\",\"WILLETTA\",\"VONCILE\",\"VENETTA\",\"TULA\",\"TONETTE\",\"TIMIKA\",\"TEMIKA\",\"TELMA\",\"TEISHA\",\"TAREN\",\"TA\",\"STACEE\",\"SHIN\",\"SHAWNTA\",\"SATURNINA\",\"RICARDA\",\"POK\",\"PASTY\",\"ONIE\",\"NUBIA\",\"MORA\",\"MIKE\",\"MARIELLE\",\"MARIELLA\",\"MARIANELA\",\"MARDELL\",\"MANY\",\"LUANNA\",\"LOISE\",\"LISABETH\",\"LINDSY\",\"LILLIANA\",\"LILLIAM\",\"LELAH\",\"LEIGHA\",\"LEANORA\",\"LANG\",\"KRISTEEN\",\"KHALILAH\",\"KEELEY\",\"KANDRA\",\"JUNKO\",\"JOAQUINA\",\"JERLENE\",\"JANI\",\"JAMIKA\",\"JAME\",\"HSIU\",\"HERMILA\",\"GOLDEN\",\"GENEVIVE\",\"EVIA\",\"EUGENA\",\"EMMALINE\",\"ELFREDA\",\"ELENE\",\"DONETTE\",\"DELCIE\",\"DEEANNA\",\"DARCEY\",\"CUC\",\"CLARINDA\",\"CIRA\",\"CHAE\",\"CELINDA\",\"CATHERYN\",\"CATHERIN\",\"CASIMIRA\",\"CARMELIA\",\"CAMELLIA\",\"BREANA\",\"BOBETTE\",\"BERNARDINA\",\"BEBE\",\"BASILIA\",\"ARLYNE\",\"AMAL\",\"ALAYNA\",\"ZONIA\",\"ZENIA\",\"YURIKO\",\"YAEKO\",\"WYNELL\",\"WILLOW\",\"WILLENA\",\"VERNIA\",\"TU\",\"TRAVIS\",\"TORA\",\"TERRILYN\",\"TERICA\",\"TENESHA\",\"TAWNA\",\"TAJUANA\",\"TAINA\",\"STEPHNIE\",\"SONA\",\"SOL\",\"SINA\",\"SHONDRA\",\"SHIZUKO\",\"SHERLENE\",\"SHERICE\",\"SHARIKA\",\"ROSSIE\",\"ROSENA\",\"RORY\",\"RIMA\",\"RIA\",\"RHEBA\",\"RENNA\",\"PETER\",\"NATALYA\",\"NANCEE\",\"MELODI\",\"MEDA\",\"MAXIMA\",\"MATHA\",\"MARKETTA\",\"MARICRUZ\",\"MARCELENE\",\"MALVINA\",\"LUBA\",\"LOUETTA\",\"LEIDA\",\"LECIA\",\"LAURAN\",\"LASHAWNA\",\"LAINE\",\"KHADIJAH\",\"KATERINE\",\"KASI\",\"KALLIE\",\"JULIETTA\",\"JESUSITA\",\"JESTINE\",\"JESSIA\",\"JEREMY\",\"JEFFIE\",\"JANYCE\",\"ISADORA\",\"GEORGIANNE\",\"FIDELIA\",\"EVITA\",\"EURA\",\"EULAH\",\"ESTEFANA\",\"ELSY\",\"ELIZABET\",\"ELADIA\",\"DODIE\",\"DION\",\"DIA\",\"DENISSE\",\"DELORAS\",\"DELILA\",\"DAYSI\",\"DAKOTA\",\"CURTIS\",\"CRYSTLE\",\"CONCHA\",\"COLBY\",\"CLARETTA\",\"CHU\",\"CHRISTIA\",\"CHARLSIE\",\"CHARLENA\",\"CARYLON\",\"BETTYANN\",\"ASLEY\",\"ASHLEA\",\"AMIRA\",\"AI\",\"AGUEDA\",\"AGNUS\",\"YUETTE\",\"VINITA\",\"VICTORINA\",\"TYNISHA\",\"TREENA\",\"TOCCARA\",\"TISH\",\"THOMASENA\",\"TEGAN\",\"SOILA\",\"SHILOH\",\"SHENNA\",\"SHARMAINE\",\"SHANTAE\",\"SHANDI\",\"SEPTEMBER\",\"SARAN\",\"SARAI\",\"SANA\",\"SAMUEL\",\"SALLEY\",\"ROSETTE\",\"ROLANDE\",\"REGINE\",\"OTELIA\",\"OSCAR\",\"OLEVIA\",\"NICHOLLE\",\"NECOLE\",\"NAIDA\",\"MYRTA\",\"MYESHA\",\"MITSUE\",\"MINTA\",\"MERTIE\",\"MARGY\",\"MAHALIA\",\"MADALENE\",\"LOVE\",\"LOURA\",\"LOREAN\",\"LEWIS\",\"LESHA\",\"LEONIDA\",\"LENITA\",\"LAVONE\",\"LASHELL\",\"LASHANDRA\",\"LAMONICA\",\"KIMBRA\",\"KATHERINA\",\"KARRY\",\"KANESHA\",\"JULIO\",\"JONG\",\"JENEVA\",\"JAQUELYN\",\"HWA\",\"GILMA\",\"GHISLAINE\",\"GERTRUDIS\",\"FRANSISCA\",\"FERMINA\",\"ETTIE\",\"ETSUKO\",\"ELLIS\",\"ELLAN\",\"ELIDIA\",\"EDRA\",\"DORETHEA\",\"DOREATHA\",\"DENYSE\",\"DENNY\",\"DEETTA\",\"DAINE\",\"CYRSTAL\",\"CORRIN\",\"CAYLA\",\"CARLITA\",\"CAMILA\",\"BURMA\",\"BULA\",\"BUENA\",\"BLAKE\",\"BARABARA\",\"AVRIL\",\"AUSTIN\",\"ALAINE\",\"ZANA\",\"WILHEMINA\",\"WANETTA\",\"VIRGIL\",\"VI\",\"VERONIKA\",\"VERNON\",\"VERLINE\",\"VASILIKI\",\"TONITA\",\"TISA\",\"TEOFILA\",\"TAYNA\",\"TAUNYA\",\"TANDRA\",\"TAKAKO\",\"SUNNI\",\"SUANNE\",\"SIXTA\",\"SHARELL\",\"SEEMA\",\"RUSSELL\",\"ROSENDA\",\"ROBENA\",\"RAYMONDE\",\"PEI\",\"PAMILA\",\"OZELL\",\"NEIDA\",\"NEELY\",\"MISTIE\",\"MICHA\",\"MERISSA\",\"MAURITA\",\"MARYLN\",\"MARYETTA\",\"MARSHALL\",\"MARCELL\",\"MALENA\",\"MAKEDA\",\"MADDIE\",\"LOVETTA\",\"LOURIE\",\"LORRINE\",\"LORILEE\",\"LESTER\",\"LAURENA\",\"LASHAY\",\"LARRAINE\",\"LAREE\",\"LACRESHA\",\"KRISTLE\",\"KRISHNA\",\"KEVA\",\"KEIRA\",\"KAROLE\",\"JOIE\",\"JINNY\",\"JEANNETTA\",\"JAMA\",\"HEIDY\",\"GILBERTE\",\"GEMA\",\"FAVIOLA\",\"EVELYNN\",\"ENDA\",\"ELLI\",\"ELLENA\",\"DIVINA\",\"DAGNY\",\"COLLENE\",\"CODI\",\"CINDIE\",\"CHASSIDY\",\"CHASIDY\",\"CATRICE\",\"CATHERINA\",\"CASSEY\",\"CAROLL\",\"CARLENA\",\"CANDRA\",\"CALISTA\",\"BRYANNA\",\"BRITTENY\",\"BEULA\",\"BARI\",\"AUDRIE\",\"AUDRIA\",\"ARDELIA\",\"ANNELLE\",\"ANGILA\",\"ALONA\",\"ALLYN\",\"DOUGLAS\",\"ROGER\",\"JONATHAN\",\"RALPH\",\"NICHOLAS\",\"BENJAMIN\",\"BRUCE\",\"HARRY\",\"WAYNE\",\"STEVE\",\"HOWARD\",\"ERNEST\",\"PHILLIP\",\"TODD\",\"CRAIG\",\"ALAN\",\"PHILIP\",\"EARL\",\"DANNY\",\"BRYAN\",\"STANLEY\",\"LEONARD\",\"NATHAN\",\"MANUEL\",\"RODNEY\",\"MARVIN\",\"VINCENT\",\"JEFFERY\",\"JEFF\",\"CHAD\",\"JACOB\",\"ALFRED\",\"BRADLEY\",\"HERBERT\",\"FREDERICK\",\"EDWIN\",\"DON\",\"RICKY\",\"RANDALL\",\"BARRY\",\"BERNARD\",\"LEROY\",\"MARCUS\",\"THEODORE\",\"CLIFFORD\",\"MIGUEL\",\"JIM\",\"TOM\",\"CALVIN\",\"BILL\",\"LLOYD\",\"DEREK\",\"WARREN\",\"DARRELL\",\"JEROME\",\"FLOYD\",\"ALVIN\",\"TIM\",\"GORDON\",\"GREG\",\"JORGE\",\"DUSTIN\",\"PEDRO\",\"DERRICK\",\"ZACHARY\",\"HERMAN\",\"GLEN\",\"HECTOR\",\"RICARDO\",\"RICK\",\"BRENT\",\"RAMON\",\"GILBERT\",\"MARC\",\"REGINALD\",\"RUBEN\",\"NATHANIEL\",\"RAFAEL\",\"EDGAR\",\"MILTON\",\"RAUL\",\"BEN\",\"CHESTER\",\"DUANE\",\"FRANKLIN\",\"BRAD\",\"RON\",\"ROLAND\",\"ARNOLD\",\"HARVEY\",\"JARED\",\"ERIK\",\"DARRYL\",\"NEIL\",\"JAVIER\",\"FERNANDO\",\"CLINTON\",\"TED\",\"MATHEW\",\"TYRONE\",\"DARREN\",\"LANCE\",\"KURT\",\"ALLAN\",\"NELSON\",\"GUY\",\"CLAYTON\",\"HUGH\",\"MAX\",\"DWAYNE\",\"DWIGHT\",\"ARMANDO\",\"FELIX\",\"EVERETT\",\"IAN\",\"WALLACE\",\"KEN\",\"BOB\",\"ALFREDO\",\"ALBERTO\",\"DAVE\",\"IVAN\",\"BYRON\",\"ISAAC\",\"MORRIS\",\"CLIFTON\",\"WILLARD\",\"ROSS\",\"ANDY\",\"SALVADOR\",\"KIRK\",\"SERGIO\",\"SETH\",\"KENT\",\"TERRANCE\",\"EDUARDO\",\"TERRENCE\",\"ENRIQUE\",\"WADE\",\"STUART\",\"FREDRICK\",\"ARTURO\",\"ALEJANDRO\",\"NICK\",\"LUTHER\",\"WENDELL\",\"JEREMIAH\",\"JULIUS\",\"OTIS\",\"TREVOR\",\"OLIVER\",\"LUKE\",\"HOMER\",\"GERARD\",\"DOUG\",\"KENNY\",\"HUBERT\",\"LYLE\",\"MATT\",\"ALFONSO\",\"ORLANDO\",\"REX\",\"CARLTON\",\"ERNESTO\",\"NEAL\",\"PABLO\",\"LORENZO\",\"OMAR\",\"WILBUR\",\"GRANT\",\"HORACE\",\"RODERICK\",\"ABRAHAM\",\"WILLIS\",\"RICKEY\",\"ANDRES\",\"CESAR\",\"JOHNATHAN\",\"MALCOLM\",\"RUDOLPH\",\"DAMON\",\"KELVIN\",\"PRESTON\",\"ALTON\",\"ARCHIE\",\"MARCO\",\"WM\",\"PETE\",\"RANDOLPH\",\"GARRY\",\"GEOFFREY\",\"JONATHON\",\"FELIPE\",\"GERARDO\",\"ED\",\"DOMINIC\",\"DELBERT\",\"COLIN\",\"GUILLERMO\",\"EARNEST\",\"LUCAS\",\"BENNY\",\"SPENCER\",\"RODOLFO\",\"MYRON\",\"EDMUND\",\"GARRETT\",\"SALVATORE\",\"CEDRIC\",\"LOWELL\",\"GREGG\",\"SHERMAN\",\"WILSON\",\"SYLVESTER\",\"ROOSEVELT\",\"ISRAEL\",\"JERMAINE\",\"FORREST\",\"WILBERT\",\"LELAND\",\"SIMON\",\"CLARK\",\"IRVING\",\"BRYANT\",\"OWEN\",\"RUFUS\",\"WOODROW\",\"KRISTOPHER\",\"MACK\",\"LEVI\",\"MARCOS\",\"GUSTAVO\",\"JAKE\",\"LIONEL\",\"GILBERTO\",\"CLINT\",\"NICOLAS\",\"ISMAEL\",\"ORVILLE\",\"ERVIN\",\"DEWEY\",\"AL\",\"WILFRED\",\"JOSH\",\"HUGO\",\"IGNACIO\",\"CALEB\",\"TOMAS\",\"SHELDON\",\"ERICK\",\"STEWART\",\"DOYLE\",\"DARREL\",\"ROGELIO\",\"TERENCE\",\"SANTIAGO\",\"ALONZO\",\"ELIAS\",\"BERT\",\"ELBERT\",\"RAMIRO\",\"CONRAD\",\"NOAH\",\"GRADY\",\"PHIL\",\"CORNELIUS\",\"LAMAR\",\"ROLANDO\",\"CLAY\",\"PERCY\",\"DEXTER\",\"BRADFORD\",\"DARIN\",\"AMOS\",\"MOSES\",\"IRVIN\",\"SAUL\",\"ROMAN\",\"RANDAL\",\"TIMMY\",\"DARRIN\",\"WINSTON\",\"BRENDAN\",\"ABEL\",\"DOMINICK\",\"BOYD\",\"EMILIO\",\"ELIJAH\",\"DOMINGO\",\"EMMETT\",\"MARLON\",\"EMANUEL\",\"JERALD\",\"EDMOND\",\"EMIL\",\"DEWAYNE\",\"WILL\",\"OTTO\",\"TEDDY\",\"REYNALDO\",\"BRET\",\"JESS\",\"TRENT\",\"HUMBERTO\",\"EMMANUEL\",\"STEPHAN\",\"VICENTE\",\"LAMONT\",\"GARLAND\",\"MILES\",\"EFRAIN\",\"HEATH\",\"RODGER\",\"HARLEY\",\"ETHAN\",\"ELDON\",\"ROCKY\",\"PIERRE\",\"JUNIOR\",\"FREDDY\",\"ELI\",\"BRYCE\",\"ANTOINE\",\"STERLING\",\"CHASE\",\"GROVER\",\"ELTON\",\"CLEVELAND\",\"DYLAN\",\"CHUCK\",\"DAMIAN\",\"REUBEN\",\"STAN\",\"AUGUST\",\"LEONARDO\",\"JASPER\",\"RUSSEL\",\"ERWIN\",\"BENITO\",\"HANS\",\"MONTE\",\"BLAINE\",\"ERNIE\",\"CURT\",\"QUENTIN\",\"AGUSTIN\",\"MURRAY\",\"JAMAL\",\"ADOLFO\",\"HARRISON\",\"TYSON\",\"BURTON\",\"BRADY\",\"ELLIOTT\",\"WILFREDO\",\"BART\",\"JARROD\",\"VANCE\",\"DENIS\",\"DAMIEN\",\"JOAQUIN\",\"HARLAN\",\"DESMOND\",\"ELLIOT\",\"DARWIN\",\"GREGORIO\",\"BUDDY\",\"XAVIER\",\"KERMIT\",\"ROSCOE\",\"ESTEBAN\",\"ANTON\",\"SOLOMON\",\"SCOTTY\",\"NORBERT\",\"ELVIN\",\"WILLIAMS\",\"NOLAN\",\"ROD\",\"QUINTON\",\"HAL\",\"BRAIN\",\"ROB\",\"ELWOOD\",\"KENDRICK\",\"DARIUS\",\"MOISES\",\"FIDEL\",\"THADDEUS\",\"CLIFF\",\"MARCEL\",\"JACKSON\",\"RAPHAEL\",\"BRYON\",\"ARMAND\",\"ALVARO\",\"JEFFRY\",\"DANE\",\"JOESPH\",\"THURMAN\",\"NED\",\"RUSTY\",\"MONTY\",\"FABIAN\",\"REGGIE\",\"MASON\",\"GRAHAM\",\"ISAIAH\",\"VAUGHN\",\"GUS\",\"LOYD\",\"DIEGO\",\"ADOLPH\",\"NORRIS\",\"MILLARD\",\"ROCCO\",\"GONZALO\",\"DERICK\",\"RODRIGO\",\"WILEY\",\"RIGOBERTO\",\"ALPHONSO\",\"TY\",\"NOE\",\"VERN\",\"REED\",\"JEFFERSON\",\"ELVIS\",\"BERNARDO\",\"MAURICIO\",\"HIRAM\",\"DONOVAN\",\"BASIL\",\"RILEY\",\"NICKOLAS\",\"MAYNARD\",\"SCOT\",\"VINCE\",\"QUINCY\",\"EDDY\",\"SEBASTIAN\",\"FEDERICO\",\"ULYSSES\",\"HERIBERTO\",\"DONNELL\",\"COLE\",\"DAVIS\",\"GAVIN\",\"EMERY\",\"WARD\",\"ROMEO\",\"JAYSON\",\"DANTE\",\"CLEMENT\",\"COY\",\"MAXWELL\",\"JARVIS\",\"BRUNO\",\"ISSAC\",\"DUDLEY\",\"BROCK\",\"SANFORD\",\"CARMELO\",\"BARNEY\",\"NESTOR\",\"STEFAN\",\"DONNY\",\"ART\",\"LINWOOD\",\"BEAU\",\"WELDON\",\"GALEN\",\"ISIDRO\",\"TRUMAN\",\"DELMAR\",\"JOHNATHON\",\"SILAS\",\"FREDERIC\",\"DICK\",\"IRWIN\",\"MERLIN\",\"CHARLEY\",\"MARCELINO\",\"HARRIS\",\"CARLO\",\"TRENTON\",\"KURTIS\",\"HUNTER\",\"AURELIO\",\"WINFRED\",\"VITO\",\"COLLIN\",\"DENVER\",\"CARTER\",\"LEONEL\",\"EMORY\",\"PASQUALE\",\"MOHAMMAD\",\"MARIANO\",\"DANIAL\",\"LANDON\",\"DIRK\",\"BRANDEN\",\"ADAN\",\"BUFORD\",\"GERMAN\",\"WILMER\",\"EMERSON\",\"ZACHERY\",\"FLETCHER\",\"JACQUES\",\"ERROL\",\"DALTON\",\"MONROE\",\"JOSUE\",\"EDWARDO\",\"BOOKER\",\"WILFORD\",\"SONNY\",\"SHELTON\",\"CARSON\",\"THERON\",\"RAYMUNDO\",\"DAREN\",\"HOUSTON\",\"ROBBY\",\"LINCOLN\",\"GENARO\",\"BENNETT\",\"OCTAVIO\",\"CORNELL\",\"HUNG\",\"ARRON\",\"ANTONY\",\"HERSCHEL\",\"GIOVANNI\",\"GARTH\",\"CYRUS\",\"CYRIL\",\"RONNY\",\"LON\",\"FREEMAN\",\"DUNCAN\",\"KENNITH\",\"CARMINE\",\"ERICH\",\"CHADWICK\",\"WILBURN\",\"RUSS\",\"REID\",\"MYLES\",\"ANDERSON\",\"MORTON\",\"JONAS\",\"FOREST\",\"MITCHEL\",\"MERVIN\",\"ZANE\",\"RICH\",\"JAMEL\",\"LAZARO\",\"ALPHONSE\",\"RANDELL\",\"MAJOR\",\"JARRETT\",\"BROOKS\",\"ABDUL\",\"LUCIANO\",\"SEYMOUR\",\"EUGENIO\",\"MOHAMMED\",\"VALENTIN\",\"CHANCE\",\"ARNULFO\",\"LUCIEN\",\"FERDINAND\",\"THAD\",\"EZRA\",\"ALDO\",\"RUBIN\",\"ROYAL\",\"MITCH\",\"EARLE\",\"ABE\",\"WYATT\",\"MARQUIS\",\"LANNY\",\"KAREEM\",\"JAMAR\",\"BORIS\",\"ISIAH\",\"EMILE\",\"ELMO\",\"ARON\",\"LEOPOLDO\",\"EVERETTE\",\"JOSEF\",\"ELOY\",\"RODRICK\",\"REINALDO\",\"LUCIO\",\"JERROD\",\"WESTON\",\"HERSHEL\",\"BARTON\",\"PARKER\",\"LEMUEL\",\"BURT\",\"JULES\",\"GIL\",\"ELISEO\",\"AHMAD\",\"NIGEL\",\"EFREN\",\"ANTWAN\",\"ALDEN\",\"MARGARITO\",\"COLEMAN\",\"DINO\",\"OSVALDO\",\"LES\",\"DEANDRE\",\"NORMAND\",\"KIETH\",\"TREY\",\"NORBERTO\",\"NAPOLEON\",\"JEROLD\",\"FRITZ\",\"ROSENDO\",\"MILFORD\",\"CHRISTOPER\",\"ALFONZO\",\"LYMAN\",\"JOSIAH\",\"BRANT\",\"WILTON\",\"RICO\",\"JAMAAL\",\"DEWITT\",\"BRENTON\",\"OLIN\",\"FOSTER\",\"FAUSTINO\",\"CLAUDIO\",\"JUDSON\",\"GINO\",\"EDGARDO\",\"ALEC\",\"TANNER\",\"JARRED\",\"DONN\",\"TAD\",\"PRINCE\",\"PORFIRIO\",\"ODIS\",\"LENARD\",\"CHAUNCEY\",\"TOD\",\"MEL\",\"MARCELO\",\"KORY\",\"AUGUSTUS\",\"KEVEN\",\"HILARIO\",\"BUD\",\"SAL\",\"ORVAL\",\"MAURO\",\"ZACHARIAH\",\"OLEN\",\"ANIBAL\",\"MILO\",\"JED\",\"DILLON\",\"AMADO\",\"NEWTON\",\"LENNY\",\"RICHIE\",\"HORACIO\",\"BRICE\",\"MOHAMED\",\"DELMER\",\"DARIO\",\"REYES\",\"MAC\",\"JONAH\",\"JERROLD\",\"ROBT\",\"HANK\",\"RUPERT\",\"ROLLAND\",\"KENTON\",\"DAMION\",\"ANTONE\",\"WALDO\",\"FREDRIC\",\"BRADLY\",\"KIP\",\"BURL\",\"WALKER\",\"TYREE\",\"JEFFEREY\",\"AHMED\",\"WILLY\",\"STANFORD\",\"OREN\",\"NOBLE\",\"MOSHE\",\"MIKEL\",\"ENOCH\",\"BRENDON\",\"QUINTIN\",\"JAMISON\",\"FLORENCIO\",\"DARRICK\",\"TOBIAS\",\"HASSAN\",\"GIUSEPPE\",\"DEMARCUS\",\"CLETUS\",\"TYRELL\",\"LYNDON\",\"KEENAN\",\"WERNER\",\"GERALDO\",\"COLUMBUS\",\"CHET\",\"BERTRAM\",\"MARKUS\",\"HUEY\",\"HILTON\",\"DWAIN\",\"DONTE\",\"TYRON\",\"OMER\",\"ISAIAS\",\"HIPOLITO\",\"FERMIN\",\"ADALBERTO\",\"BO\",\"BARRETT\",\"TEODORO\",\"MCKINLEY\",\"MAXIMO\",\"GARFIELD\",\"RALEIGH\",\"LAWERENCE\",\"ABRAM\",\"RASHAD\",\"KING\",\"EMMITT\",\"DARON\",\"SAMUAL\",\"MIQUEL\",\"EUSEBIO\",\"DOMENIC\",\"DARRON\",\"BUSTER\",\"WILBER\",\"RENATO\",\"JC\",\"HOYT\",\"HAYWOOD\",\"EZEKIEL\",\"CHAS\",\"FLORENTINO\",\"ELROY\",\"CLEMENTE\",\"ARDEN\",\"NEVILLE\",\"EDISON\",\"DESHAWN\",\"NATHANIAL\",\"JORDON\",\"DANILO\",\"CLAUD\",\"SHERWOOD\",\"RAYMON\",\"RAYFORD\",\"CRISTOBAL\",\"AMBROSE\",\"TITUS\",\"HYMAN\",\"FELTON\",\"EZEQUIEL\",\"ERASMO\",\"STANTON\",\"LONNY\",\"LEN\",\"IKE\",\"MILAN\",\"LINO\",\"JAROD\",\"HERB\",\"ANDREAS\",\"WALTON\",\"RHETT\",\"PALMER\",\"DOUGLASS\",\"CORDELL\",\"OSWALDO\",\"ELLSWORTH\",\"VIRGILIO\",\"TONEY\",\"NATHANAEL\",\"DEL\",\"BENEDICT\",\"MOSE\",\"JOHNSON\",\"ISREAL\",\"GARRET\",\"FAUSTO\",\"ASA\",\"ARLEN\",\"ZACK\",\"WARNER\",\"MODESTO\",\"FRANCESCO\",\"MANUAL\",\"GAYLORD\",\"GASTON\",\"FILIBERTO\",\"DEANGELO\",\"MICHALE\",\"GRANVILLE\",\"WES\",\"MALIK\",\"ZACKARY\",\"TUAN\",\"ELDRIDGE\",\"CRISTOPHER\",\"CORTEZ\",\"ANTIONE\",\"MALCOM\",\"LONG\",\"KOREY\",\"JOSPEH\",\"COLTON\",\"WAYLON\",\"VON\",\"HOSEA\",\"SHAD\",\"SANTO\",\"RUDOLF\",\"ROLF\",\"REY\",\"RENALDO\",\"MARCELLUS\",\"LUCIUS\",\"KRISTOFER\",\"BOYCE\",\"BENTON\",\"HAYDEN\",\"HARLAND\",\"ARNOLDO\",\"RUEBEN\",\"LEANDRO\",\"KRAIG\",\"JERRELL\",\"JEROMY\",\"HOBERT\",\"CEDRICK\",\"ARLIE\",\"WINFORD\",\"WALLY\",\"LUIGI\",\"KENETH\",\"JACINTO\",\"GRAIG\",\"FRANKLYN\",\"EDMUNDO\",\"SID\",\"PORTER\",\"LEIF\",\"JERAMY\",\"BUCK\",\"WILLIAN\",\"VINCENZO\",\"SHON\",\"LYNWOOD\",\"JERE\",\"HAI\",\"ELDEN\",\"DORSEY\",\"DARELL\",\"BRODERICK\",\"ALONSO\"" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r10, lr} bl init_sorted bl parse_names bl vectored_bubblesort bl compute_score mov r1, r0 ldr r0, =res_string bl printf mov r0, 0 ldmfd sp!, {r4-r10, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux # init_sorted initialises the sorted list to i .type init_sorted, %function init_sorted: stmfd sp!, {r5, r7, lr} ldr sorted_ptr, =sorted mov count, 0 ldr r3, =NAMES siloop: strh count, [sorted_ptr], 2 add count, count, 1 cmp count, r3 bne siloop ldmfd sp!, {r5, r7, pc} # parse_names parses the name string and populates namestart and namesize lists .type parse_names, %function parse_names: stmfd sp!, {r4-r10, lr} ldr names_ptr, =names ldr start_ptr, =namestart ldr size_ptr, =namesize mov count, 0 mov nstart, 1 ldr r3, =SIZE iloop: ldrb r0, [names_ptr], 1 add count, count, 1 teq r0, 0 @ use .asciz for string so it is null-terminated beq iloopend cmp r0, #comma bne iloop strh nstart, [start_ptr], 2 sub nsize, count, nstart sub nsize, nsize, 2 strb nsize, [size_ptr], 1 add nstart, count, 1 cmp count, r3 blt iloop beq ilast iloopend: strh nstart, [start_ptr], 2 sub count, count, 2 sub nsize, count, nstart strb nsize, [size_ptr] ilast: ldmfd sp!, {r4-r10, pc} # vectored_bubblesort uses the indirection vector, sorted, and sorts the names by manipulating the contents of the vector # we could use a different sorting algortithm, this is the simplest to implement but it is inefficient .type vectored_bubblesort, %function vectored_bubblesort: stmfd sp!, {r4-r10, lr} mov swapped, 0 bubblestart: ldr names_ptr, =names ldr sorted_ptr, =sorted ldr count, =NAMES sub count, count, 1 bubbleloop: ldrh r6, [sorted_ptr], 2 ldr start_ptr, =namestart add start_ptr, start_ptr, r6, lsl 1 ldr size_ptr, =namesize add size_ptr, size_ptr, r6 ldrh r0, [start_ptr] add r0, r0, names_ptr ldrb r1, [size_ptr] ldrh r6, [sorted_ptr] ldr start_ptr, =namestart add start_ptr, start_ptr, r6, lsl 1 ldr size_ptr, =namesize add size_ptr, size_ptr, r6 ldrh r2, [start_ptr] add r2, r2, names_ptr ldrb r3, [size_ptr] bl compare cmp r0, 1 ldrheq r0, [sorted_ptr, -2] ldrheq r1, [sorted_ptr] strheq r1, [sorted_ptr, -2] strheq r0, [sorted_ptr] moveq swapped, 1 subs count, count, 1 bne bubbleloop teq swapped, 1 mov swapped, 0 beq bubblestart ldmfd sp!, {r4-r10, pc} # sumname takes start in r0, size in r1 and returns the sum of letters-ASCII in r0 .type sumname, %function sumname: stmfd sp!, {lr} ldr r2, =names add r2, r2, r0 mov r0, 0 nextsumchar: ldrb r3, [r2], 1 sub r3, r3, #ASCII add r0, r0, r3 subs r1, r1, 1 bne nextsumchar ldmfd sp!, {pc} # compute_score computes the score from the sorted vector and returns it in r0 .type compute_score, %function compute_score: stmfd sp!, {r4-r10, lr} mov r4, 0 mov count, 0 ldr sorted_ptr, =sorted ldr r10, =NAMES cs_start: ldrh r6, [sorted_ptr], 2 ldr start_ptr, =namestart add start_ptr, start_ptr, r6, lsl 1 ldr size_ptr, =namesize add size_ptr, size_ptr, r6 ldrh r0, [start_ptr] ldrb r1, [size_ptr] bl sumname mov r6, r0 add count, count, 1 mul r6, r6, count add r4, r4, r6 cmp count, r10 blt cs_start mov r0, r4 ldmfd sp!, {r4-r10, pc}

compare.s

# compare implements the same functionality as the forth word of the # same name. # Compare the string specified by c-addr1 (r0) and u1 (r1) to the string # specified by c-addr2 (r2) and u2 (r3) . The strings are compared, beginning # at the given addresses, character by character up to the length of the # shorter string, or until a difference is found. If both strings are the same # up to the length of the shorter string, then the longer string is greater # than the shorter string. n is -1 if the string specified by c-addr1 and u1 # is less than the string specified by c-addr2 and u2. n is zero if the # strings are equal. n is 1 if the string specified by c-addr1 and u1 is # greater than the string specified by c-addr2 and u2. .syntax unified .text minlen .req r4 val1 .req r5 val2 .req r6 count .req r7 .global compare .type compare, %function compare: stmfd sp!, {r4-r8, lr} mov minlen, r1 cmp minlen, r3 movgt minlen, r3 mov count, 0 loopstart: ldrb val1, [r0, count] ldrb val2, [r2, count] cmp val1, val2 movlt r0, -1 movgt r0, 1 bne loopend add count, count,1 cmp count, minlen bne loopstart cmp r1, r3 moveq r0, 0 movlt r0, -1 movgt r0, 1 loopend: ldmfd sp!, {r4-r8, pc}

test_compare.s

.syntax unified #.equ compare2,815518 number .req r4 .macro compare_strings a b c d ldr r0, =\a mov r1, \b ldr r2, =\c mov r3, \d bl compare ldr r1, =\a ldr r2, =\c mov r3, r0 ldr r0, =comparestring bl printf .endm .section .rodata bob: .asciz "bob" boob: .asciz "boob" bobble: .asciz "bobble" cat: .asciz "cat" cattle: .asciz "cattle" comparestring: .asciz "string1 is %s and string2 is %s comparison is %d\n" linda: .asciz "LINDA" lisa: .asciz "LISA" .text .align 2 .global main .type main, %function main: compare_strings bob 3 boob 4 compare_strings boob 4 bob 3 compare_strings bob 3 bobble 6 compare_strings bobble 6 bob 3 compare_strings bobble 6 boob 4 compare_strings boob 4 bobble 6 compare_strings bob 3 cat 3 compare_strings cat 3 bob 3 compare_strings cattle 6 cat 3 compare_strings cat 3 cattle 6 compare_strings bob 3 bob 3 compare_strings cat 3 cat 3 compare_strings lisa 4 linda 5 compare_strings linda 5 lisa 4 mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
Description of problem

A perfect number is a number for which the sum of its proper divisors is exactly equal to the number. For example, the sum of the proper divisors of 28 would be 1 + 2 + 4 + 7 + 14 = 28, which means that 28 is a perfect number.

A number n is called deficient if the sum of its proper divisors is less than n and it is called abundant if this sum exceeds n.

As 12 is the smallest abundant number, 1 + 2 + 3 + 4 + 6 = 16, the smallest number that can be written as the sum of two abundant numbers is 24. By mathematical analysis, it can be shown that all integers greater than 28123 can be written as the sum of two abundant numbers. However, this upper limit cannot be reduced any further by analysis even though it is known that the greatest number that cannot be expressed as the sum of two abundant numbers is less than this limit.

Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers.

023.s

.syntax unified .equ datum_size, 2 .equ SIZE, 28123 .align 4 aptr .req r4 sfcount .req r4 sum .req r5 bptr .req r5 number .req r6 total .req r7 last .req r8 addi .req r9 icount .req r9 tmp .req r10 .section .bss .lcomm array,SIZE<<1 @ use 16-bit ints for the list .lcomm bitarray,SIZE .section .rodata resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4-r10, lr} # store the abundant numbers to the vector array and set the elements corresponding # to the sum of the factors in the bit vector abundantbit mov icount, 1 mov number, 0 ldr aptr, =array ldr bptr, =bitarray ldr last, =SIZE array_loop: mov r0, icount bl sum_factors cmp icount, r0 bge array_next strhlt icount, [aptr], #datum_size addlt number, number, 1 cmp r0, last movlt r1, 1 strblt r1, [bptr, icount] array_next: add icount, icount, 1 cmp icount, last blt array_loop mov total, 0 # add all of the integers until we reach the first abundant number ldr aptr, =array ldrh tmp, [aptr] sloop: subs tmp, tmp, 1 add total, total, tmp bne sloop ldr aptr, =array ldrh r0, [aptr] @ r0 is the index of the outer loop ploop: ldr aptr, =array ldr bptr, =bitarray mov addi, 1 mov r3, 0 @ r3 is the index of the inner loop iloop: ldrh tmp, [aptr], #datum_size cmp r0, tmp blt ilast sub r1, r0, tmp ldrb r2, [bptr, r1] teq r2, 1 moveq addi, 0 beq ilast add r3, r3, 1 cmp number, r3 bne iloop ilast: teq addi, 1 addeq total, total, r0 add r0, r0, 1 cmp r0, last bne ploop printme: mov r1, total ldr r0, =resstring @ store address of start of string to r0 bl printf mov r0, 0 ldmfd sp!, {r4-r10, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux .global sum_factors .type sum_factors, %function sum_factors: stmfd sp!, {r4-r6, lr} mov number, r0 mov sum, 1 mov sfcount, 2 sf_loop: mul r0, sfcount, sfcount cmp r0, number bgt sf_end mov r0, number mov r1, sfcount bl divide teq r1, 0 bne sf_next add sum, sum, r0 cmp r0, sfcount addne sum, sum, sfcount sf_next: add sfcount, sfcount, 1 b sf_loop sf_end: mov r0, sum ldmfd sp!, {r4-r6, pc}
Description of problem

A permutation is an ordered arrangement of objects. For example, 3124 is one possible permutation of the digits 1, 2, 3 and 4. If all of the permutations are listed numerically or alphabetically, we call it lexicographic order. The lexicographic permutations of 0, 1 and 2 are:

012   021   102   120   201   210

What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?

024.s

.syntax unified # - see http://en.wikipedia.org/wiki/Factorial_number_system # - and http://en.wikipedia.org/wiki/Permutation .macro check_digit a ldr r0, =vector mov r1, VSIZE mov r2, \a bl contains teq r0, 1 bne mloop .endm .macro copy_vector a b ldr r0, =\a add r0, r0, 1 mov r1, VSIZE ldr r2, =\b bl copybytes .endm # this macro lifted from test_add_digit_strings.s # the usage of add_digit_strings is tricky because # the fifth parameter must be passed on the stack .macro add_strings a al b bl c stmfd sp!, {r4} @ stash r4 on the stack - we destroy it in add_digit_strings ldr r0, =\c stmfd sp!, {r0} @ this is the fifth parameter for the subroutine ldr r0, =\a ldr r1, =\al ldr r2, =\b ldr r3, =\bl bl add_digit_strings add sp, sp, 4 @ revert sp to before (1) ldmfd sp!, {r4} @ and get stashed r4 .endm .equ datum_size, 2 .equ SIZE, 2080 .equ VSIZE, 10 .align 4 icount .req r4 .section .data .align 2 vector: .byte 2, 7, 8, 0, 0, 0, 0, 0, 0, 0 increment: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 .section .bss .lcomm output, VSIZE .lcomm print_vector, VSIZE .section .rodata outstring: .asciz "%s\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4, lr} ldr icount, =SIZE mloop: add_strings vector 10 increment 10 output copy_vector output vector check_digit 0 check_digit 1 check_digit 2 check_digit 3 check_digit 4 check_digit 5 check_digit 6 check_digit 7 check_digit 8 check_digit 9 subs icount, icount, 1 bne mloop printme: ldr r0, =vector mov r1, 10 ldr r2, =print_vector bl printbytes ldr r1, =print_vector ldr r0, =outstring bl printf mov r0, 0 ldmfd sp!, {r4, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux # contains takes a pointer to a byte vector in r0, and a size in r1 and a scalar in r2 # it returns 1 in r0 if the vector contains the scalar and 0 otherwise .global contains .type contains, %function contains: stmfd sp!, {r4, lr} mov r4, r0 mov r0, 0 contains_start: ldrb r3, [r4], 1 cmp r3, r2 moveq r0, 1 beq contains_end subs r1, r1, 1 bne contains_start contains_end: ldmfd sp!, {r4, pc}
Description of problem

The Fibonacci sequence is defined by the recurrence relation:

F n = F n?1 + F n?2, where F 1 = 1 and F 2 = 1.

Hence the first 12 terms will be:

F 1 = 1
F 2 = 1
F 3 = 2
F 4 = 3
F 5 = 5
F 6 = 8
F 7 = 13
F 8 = 21
F 9 = 34
F 10 = 55
F 11 = 89
F 12 = 144

The 12th term, F12, is the first term to contain three digits.

What is the first term in the Fibonacci sequence to contain 1000 digits?

025.s

.syntax unified .macro copy_vector a b ldr r0, =\a add r0, r0, 1 mov r1, VSIZE ldr r2, =\b bl copybytes .endm # this macro lifted from test_add_digit_strings.s # the usage of add_digit_strings is tricky because # the fifth parameter must be passed on the stack .macro add_strings a al b bl c stmfd sp!, {r4} @ stash r4 on the stack - we destroy it in add_digit_strings ldr r0, =\c stmfd sp!, {r0} @ this is the fifth parameter for the subroutine ldr r0, =\a ldr r1, =\al ldr r2, =\b ldr r3, =\bl bl add_digit_strings add sp, sp, 4 @ revert sp to before (1) ldmfd sp!, {r4} @ and get stashed r4 .endm .macro add_and_test ivector ovector add_strings \ovector VSIZE \ivector VSIZE output copy_vector output \ovector add icount, icount, 1 ldr vptr, =\ovector ldrb tmp, [vptr] teq tmp, 0 bne printme .endm .equ VSIZE, 1000 .align 4 vptr .req r2 tmp .req r3 icount .req r4 .section .data .align 2 vector1: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 vector2: .byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 .section .bss .lcomm output, VSIZE .section .rodata resstring: .asciz "%d\n" .text .align 2 .global main .type main, %function main: stmfd sp!, {r4, lr} mov icount, 2 mloop: add_and_test vector1 vector2 add_and_test vector2 vector1 b mloop printme: mov r1, icount ldr r0, =resstring bl printf mov r0, 0 ldmfd sp!, {r4, pc} mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

prime_vector.s

.syntax unified .equ word, 4 # this subroutine returns 1 if the passed number is prime; 0 if not # # inputs # r0 - integer to test # r1 - pointer to vector of prime integers smaller than r0 # r2 - length of vector passed in r1 # # outputs # r0 - prime boolean number .req r4 vptr .req r5 tmp .req r6 squared .req r7 vsize .req r8 vcount .req r9 .global prime_vector .type prime_vector, %function .text .align 2 prime_vector: stmfd sp!, {r4-r9, lr} mov number, r0 mov vptr, r1 mov vsize, r2 mov vcount, 0 nexti: ldr tmp, [vptr], word mul squared, tmp, tmp cmp squared, number movgt r0, 1 bgt last mov r0, number mov r1, tmp bl divide teq r1, 0 moveq r0, 0 beq last add vcount, vcount, 1 cmp vcount, vsize blt nexti movge r0, 0 last: ldmfd sp!, {r4-r9, pc}

test_prime_vector.s

.syntax unified .equ word,4 number .req r4 primeflag .req r5 numprimes .req r6 primes_ptr .req r7 .macro num_is_prime a _start\@: mov number, \a mov r0, number mov r1, primes_ptr mov r2, numprimes bl prime_vector mov primeflag, r0 teq r0, 1 streq number, [primes_ptr, numprimes, lsl 2] addeq numprimes, numprimes, 1 mov r2, primeflag mov r1, number ldr r0, =primestring bl printf .endm .section .bss .lcomm primes_vector, 80 .section .rodata .align 2 primestring: .asciz "num %d primality is %d\n" .text .align 2 .global main .type main, %function main: ldr primes_ptr, =primes_vector mov numprimes, 1 mov number, 2 strb number, [primes_ptr] num_is_prime 3 num_is_prime 4 num_is_prime 5 num_is_prime 7 num_is_prime 9 num_is_prime 11 num_is_prime 13 num_is_prime 15 num_is_prime 17 num_is_prime 19 num_is_prime 20 num_is_prime 21 num_is_prime 23 num_is_prime 25 num_is_prime 27 num_is_prime 29 last: mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

test_divide.s

.equ num0,7830 .equ num3,783 .equ num7,7847 .equ num8,78 .equ num9,7 .syntax unified .macro remainder num ldr r1, =\num ldr r0, =numstring bl printf ldr r0, =\num mov r1, 7 bl divide mov r2, r0 ldr r0, =remainderstring bl printf .endm .section .rodata .align 2 numstring: .asciz "num is %d\n" remainderstring: .asciz "remainder is %d and dividend is %d\n" .text .align 2 .global main .type main, %function main: remainder num0 remainder num7 remainder num3 remainder num8 remainder num9 mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux

long_divide.s

.syntax unified # long_divide takes low numerator in r0, high numerator in r1, low denominator in r2 and high denominator in r3 # returns low quotient in r0, high quotient in r1, low remainder in r2 and high remainder in r3 .global long_divide .type long_divide, %function long_divide: stmfd sp!, {lr} # see https://codereview.chromium.org/5302007/diff/12001/arch/arm/lib/_uldivmod.S bl __aeabi_uldivmod ldmfd sp!, {pc}

test_long_divide.s

#I is 71 and DIVI is 8462696833 #I is 839 and DIVI is 716151937 #I is 1471 and DIVI is 408464633 #I is 6857 and DIVI is 87625999 #I is 59569 and DIVI is 10086647 #I is 104441 and DIVI is 5753023 #I is 486847 and DIVI is 1234169 .syntax unified .equ num0,6857 .equ num1,59569 .equ num2,104441 .equ num3,486847 .equ num4,4 .equ num5,4500 .equ numhi,139 @ 0x8b .equ numlo,3851020999 @ 0xe589eac7 tmp0 .req r4 tmp1 .req r5 .macro long_divide_m num ldr r3, =numhi ldr r2, =numlo ldr r0, =numeratorstring bl printf mov r3, 0 ldr r2, =\num ldr r0, =denominatorstring bl printf ldr r0, =numlo ldr r1, =numhi ldr r2, =\num mov r3, 0 bl long_divide mov r4, r2 mov r5, r3 mov r3, r1 mov r2, r0 ldr r0, =quotientstring bl printf mov r3, r5 mov r2, r4 ldr r0, =remainderstring bl printf .endm .section .rodata .align 2 numeratorstring: .asciz "numerator is %llu\n" denominatorstring: .asciz "denominator is %llu\n" quotientstring: .asciz "quotient is %llu\n" remainderstring: .asciz "remainder is %llu\n" r0string: .asciz "r0 is %x\n" r1string: .asciz "r1 is %x\n" r2string: .asciz "r2 is %x\n" r3string: .asciz "r3 is %x\n" .text .align 2 .global main .type main, %function main: long_divide_m num0 long_divide_m num1 long_divide_m num2 long_divide_m num3 long_divide_m num4 long_divide_m num5 mov r0, 0 mov r7, 1 @ set r7 to 1 - the syscall for exit swi 0 @ then invoke the syscall from linux
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(1336) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值