summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2014-08-31 20:21:45 +0200
committerReiner Herrmann <reiner@reiner-h.de>2014-08-31 20:35:09 +0200
commit95341b61b030c9e1290f3b326cb7ec584f543aea (patch)
tree852386fa04d32eb859bca11c0eff7b5ef9e50f00 /src
parent571164d977f91925c4c76a292f74f5f93d09ae23 (diff)
moved files to higher directory after split to new repositoryHEADtrunk
Diffstat (limited to 'src')
-rw-r--r--src/projecteuler/001.py7
-rw-r--r--src/projecteuler/002.c20
-rw-r--r--src/projecteuler/003.py9
-rw-r--r--src/projecteuler/004.py23
-rw-r--r--src/projecteuler/005.py19
-rw-r--r--src/projecteuler/006.py13
-rw-r--r--src/projecteuler/007.py20
-rw-r--r--src/projecteuler/008.py22
-rw-r--r--src/projecteuler/009.py7
-rw-r--r--src/projecteuler/010.py33
-rw-r--r--src/projecteuler/011.py50
-rw-r--r--src/projecteuler/011.txt20
-rw-r--r--src/projecteuler/012.c37
-rw-r--r--src/projecteuler/013.py14
-rw-r--r--src/projecteuler/013.txt100
-rw-r--r--src/projecteuler/014.py21
-rw-r--r--src/projecteuler/015.py29
-rw-r--r--src/projecteuler/016.py9
-rw-r--r--src/projecteuler/017.py31
-rw-r--r--src/projecteuler/018.py20
-rw-r--r--src/projecteuler/018.txt15
-rw-r--r--src/projecteuler/019.py17
-rw-r--r--src/projecteuler/020.py16
-rw-r--r--src/projecteuler/021.c35
-rw-r--r--src/projecteuler/022.py18
-rw-r--r--src/projecteuler/022.txt5163
-rw-r--r--src/projecteuler/023.py37
-rw-r--r--src/projecteuler/024.py24
-rw-r--r--src/projecteuler/025.py19
-rw-r--r--src/projecteuler/026.py33
-rw-r--r--src/projecteuler/027.py25
-rw-r--r--src/projecteuler/028.py13
-rw-r--r--src/projecteuler/029.py9
-rw-r--r--src/projecteuler/030.c41
-rw-r--r--src/projecteuler/031.py18
-rw-r--r--src/projecteuler/032.c64
-rw-r--r--src/projecteuler/032.py43
-rw-r--r--src/projecteuler/033.c59
-rw-r--r--src/projecteuler/033.py34
-rw-r--r--src/projecteuler/034.py27
-rw-r--r--src/projecteuler/035.py33
-rw-r--r--src/projecteuler/036.py40
-rw-r--r--src/projecteuler/037.py61
-rw-r--r--src/projecteuler/038.py43
-rw-r--r--src/projecteuler/039.c37
-rw-r--r--src/projecteuler/039.py21
-rw-r--r--src/projecteuler/040.py34
-rw-r--r--src/projecteuler/041.py26
-rw-r--r--src/projecteuler/042.py18
-rw-r--r--src/projecteuler/042.txt1786
-rw-r--r--src/projecteuler/043.py35
-rw-r--r--src/projecteuler/044.py9
-rw-r--r--src/projecteuler/045.py12
-rw-r--r--src/projecteuler/046.py35
-rw-r--r--src/projecteuler/047.py25
-rw-r--r--src/projecteuler/048.py6
-rw-r--r--src/projecteuler/049.py34
-rw-r--r--src/projecteuler/050.py28
-rw-r--r--src/projecteuler/051.c121
-rw-r--r--src/projecteuler/052.py22
-rw-r--r--src/projecteuler/053.py14
-rw-r--r--src/projecteuler/054.py287
-rw-r--r--src/projecteuler/054.txt1000
-rw-r--r--src/projecteuler/055.py17
-rw-r--r--src/projecteuler/056.py18
-rw-r--r--src/projecteuler/057.py16
-rw-r--r--src/projecteuler/058.py39
-rw-r--r--src/projecteuler/059.py28
-rw-r--r--src/projecteuler/059.txt1
-rw-r--r--src/projecteuler/060.py49
-rw-r--r--src/projecteuler/061.py53
-rw-r--r--src/projecteuler/062.c57
-rw-r--r--src/projecteuler/063.py23
-rw-r--r--src/projecteuler/064.c84
-rw-r--r--src/projecteuler/065.c40
-rw-r--r--src/projecteuler/066.c112
-rw-r--r--src/projecteuler/067.py20
-rw-r--r--src/projecteuler/067.txt100
-rw-r--r--src/projecteuler/068.py5
-rw-r--r--src/projecteuler/069.py28
-rw-r--r--src/projecteuler/069_2.py22
-rw-r--r--src/projecteuler/071.py15
-rw-r--r--src/projecteuler/072.c16
-rw-r--r--src/projecteuler/072.txt16
-rw-r--r--src/projecteuler/073.py14
-rw-r--r--src/projecteuler/074.py48
-rw-r--r--src/projecteuler/075.py29
-rw-r--r--src/projecteuler/080.py55
-rw-r--r--src/projecteuler/081.py71
-rw-r--r--src/projecteuler/081.txt80
-rw-r--r--src/projecteuler/082.py85
-rw-r--r--src/projecteuler/082.txt80
-rw-r--r--src/projecteuler/083.py76
-rw-r--r--src/projecteuler/083.txt80
-rw-r--r--src/projecteuler/087.c42
-rw-r--r--src/projecteuler/089.py97
-rw-r--r--src/projecteuler/089.txt1000
-rw-r--r--src/projecteuler/092.c45
-rw-r--r--src/projecteuler/096.pl173
-rw-r--r--src/projecteuler/096.txt500
-rw-r--r--src/projecteuler/097.py1
-rw-r--r--src/projecteuler/098.py77
-rw-r--r--src/projecteuler/098.txt1
-rw-r--r--src/projecteuler/099.py21
-rw-r--r--src/projecteuler/099.txt1000
-rw-r--r--src/projecteuler/102.py43
-rw-r--r--src/projecteuler/102.txt1000
-rw-r--r--src/projecteuler/112.c45
-rw-r--r--src/projecteuler/124.py31
-rw-r--r--src/projecteuler/125.py22
-rw-r--r--src/projecteuler/134.c59
-rw-r--r--src/projecteuler/187.c28
-rw-r--r--src/projecteuler/206.py24
-rw-r--r--src/projecteuler/common.c154
-rw-r--r--src/projecteuler/common.h9
-rw-r--r--src/projecteuler/common.py145
116 files changed, 0 insertions, 15835 deletions
diff --git a/src/projecteuler/001.py b/src/projecteuler/001.py
deleted file mode 100644
index dd1cbc6..0000000
--- a/src/projecteuler/001.py
+++ /dev/null
@@ -1,7 +0,0 @@
-result = 0
-
-for i in range(1,1000):
- if i % 3 == 0 or i % 5 == 0:
- result += i
-
-print result
diff --git a/src/projecteuler/002.c b/src/projecteuler/002.c
deleted file mode 100644
index 7a16a80..0000000
--- a/src/projecteuler/002.c
+++ /dev/null
@@ -1,20 +0,0 @@
-int main()
-{
- int previous = 1, next = 2;
- int sum = 0, tmp = 0;
-
- while(next <= 4000000)
- {
- if(!(next & 1))
- sum += next;
-
- tmp = next;
- next += previous;
- previous = tmp;
- }
-
- printf("%ld\n", sum);
-
- return 0;
-}
-
diff --git a/src/projecteuler/003.py b/src/projecteuler/003.py
deleted file mode 100644
index c5b3036..0000000
--- a/src/projecteuler/003.py
+++ /dev/null
@@ -1,9 +0,0 @@
-number = 600851475143
-
-i = 3
-while(i < number):
- while(number % i == 0 and number != i):
- number = number / i
- i += 2
-
-print number
diff --git a/src/projecteuler/004.py b/src/projecteuler/004.py
deleted file mode 100644
index c22b764..0000000
--- a/src/projecteuler/004.py
+++ /dev/null
@@ -1,23 +0,0 @@
-max = 0
-
-def palindrom(number):
- tmp = number
- new = 0
- while(tmp > 0):
- new *= 10
- new += tmp % 10
- tmp = tmp / 10
-
- if new == number:
- return True
- else:
- return False
-
-
-for i in xrange(100,1000):
- for j in xrange(100,1000):
- if palindrom(i*j) and i*j > max:
- max = i*j
-
-print max
-
diff --git a/src/projecteuler/005.py b/src/projecteuler/005.py
deleted file mode 100644
index 8929956..0000000
--- a/src/projecteuler/005.py
+++ /dev/null
@@ -1,19 +0,0 @@
-divisors = [11, 12, 13, 14, 15, 16, 17, 18, 19] # only need to check those divisors
-
-def divisible(number):
- result = True
- for i in divisors:
- if number % i != 0:
- result = False
- break
- return result
-
-number = 20
-
-while(True):
- if divisible(number):
- break
- number += 20
-
-print number
-
diff --git a/src/projecteuler/006.py b/src/projecteuler/006.py
deleted file mode 100644
index 2010877..0000000
--- a/src/projecteuler/006.py
+++ /dev/null
@@ -1,13 +0,0 @@
-def sum_of_squares(limit):
- result = 0
- for i in range(1, limit+1):
- result += i*i
- return result
-
-def square_of_sums(limit):
- result = 0
- for i in range(1, limit+1):
- result += i
- return result*result
-
-print abs(sum_of_squares(100) - square_of_sums(100))
diff --git a/src/projecteuler/007.py b/src/projecteuler/007.py
deleted file mode 100644
index 63d565a..0000000
--- a/src/projecteuler/007.py
+++ /dev/null
@@ -1,20 +0,0 @@
-prime_list = [2]
-
-def is_prime(number):
- global prime_list
- prime = True
- for x in prime_list:
- if number % x == 0:
- prime = False
- break
- return prime
-
-count = 3
-
-while(len(prime_list) < 10001):
- if is_prime(count):
- prime_list.append(count)
- count += 2
-
-print prime_list[-1]
-
diff --git a/src/projecteuler/008.py b/src/projecteuler/008.py
deleted file mode 100644
index 002b958..0000000
--- a/src/projecteuler/008.py
+++ /dev/null
@@ -1,22 +0,0 @@
-number = 7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450
-
-max = 0
-
-while(number > 0):
- tmp = number
- digit1 = tmp % 10
- tmp = tmp / 10
- digit2 = tmp % 10
- tmp = tmp / 10
- digit3 = tmp % 10
- tmp = tmp / 10
- digit4 = tmp % 10
- tmp = tmp / 10
- digit5 = tmp % 10
- tmp = tmp / 10
- number = number / 10
- product = digit1 * digit2 * digit3 * digit4 * digit5
- if product > max:
- max = product
-
-print max
diff --git a/src/projecteuler/009.py b/src/projecteuler/009.py
deleted file mode 100644
index f122a7a..0000000
--- a/src/projecteuler/009.py
+++ /dev/null
@@ -1,7 +0,0 @@
-for a in range(1,1000):
- for b in range(a, 1000):
- c = 1000 - a - b
- if a*a + b*b == c*c:
- print a*b*c
- break
-
diff --git a/src/projecteuler/010.py b/src/projecteuler/010.py
deleted file mode 100644
index 691c7a5..0000000
--- a/src/projecteuler/010.py
+++ /dev/null
@@ -1,33 +0,0 @@
-limit = 2000000
-
-number_list = [False] + [True]*(limit-1)
-list_len = len(number_list)
-
-def next_prime(i):
- global number_list
- global list_len
- x = i+1
- while(x <= list_len):
- if number_list[x-1] == True:
- break
- x += 1
- return x
-
-i = 2
-
-while(i*i <= list_len):
- x = i*i
- while(x <= list_len):
- number_list[x-1] = False
- x += i
- i = next_prime(i)
-
-
-sum = 0
-
-for i in xrange(1, limit+1):
- if number_list[i-1]:
- sum += i
-
-print sum
-
diff --git a/src/projecteuler/011.py b/src/projecteuler/011.py
deleted file mode 100644
index 4fff9d4..0000000
--- a/src/projecteuler/011.py
+++ /dev/null
@@ -1,50 +0,0 @@
-
-numbers = []
-
-f = open('011.txt', 'r')
-for line in f:
- line.rstrip('\n')
- line_str = line.split(' ')
- line_int = [ int(x) for x in line_str ]
- numbers.append(line_int)
-f.close()
-
-
-def find_down():
- max = 0
- for i in range(0, 17):
- for j in range(0, 20):
- product = numbers[i][j] * numbers[i+1][j] * numbers[i+2][j] * numbers[i+3][j]
- if product > max:
- max = product
- return max
-
-def find_right():
- max = 0
- for i in range(0, 20):
- for j in range(0, 17):
- product = numbers[i][j] * numbers[i][j+1] * numbers[i][j+2] * numbers[i][j+3]
- if product > max:
- max = product
- return max
-
-def find_diagonal1():
- max = 0
- for i in range(0, 17):
- for j in range(0, 17):
- product = numbers[i][j] * numbers[i+1][j+1] * numbers[i+2][j+2] * numbers[i+3][j+3]
- if product > max:
- max = product
- return max
-
-def find_diagonal2():
- max = 0
- for i in range(0, 17):
- for j in range(0, 17):
- product = numbers[i][19-j] * numbers[i+1][18-j] * numbers[i+2][17-j] * numbers[i+3][16-j]
- if product > max:
- max = product
- return max
-
-print max(find_down(), find_right(), find_diagonal1(), find_diagonal2())
-
diff --git a/src/projecteuler/011.txt b/src/projecteuler/011.txt
deleted file mode 100644
index 4ac2451..0000000
--- a/src/projecteuler/011.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-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
diff --git a/src/projecteuler/012.c b/src/projecteuler/012.c
deleted file mode 100644
index c5cc49e..0000000
--- a/src/projecteuler/012.c
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <math.h>
-
-int count_divisors(unsigned int triangle)
-{
- unsigned int i;
- int count = 2;
- int limit = (int) ceil(sqrt(triangle));
- for(i=2; i<limit; i++)
- {
- if(triangle % i == 0)
- {
- if(triangle / i == i)
- count++;
- else
- count += 2;
- }
- }
- return count;
-}
-
-int main()
-{
- unsigned int triangle = 0;
- int divisors = 0;
- int count = 1;
-
- do
- {
- triangle += count++;
- divisors = count_divisors(triangle);
- } while(divisors <= 500);
-
- printf("%d\n", triangle);
-
- return 0;
-}
-
diff --git a/src/projecteuler/013.py b/src/projecteuler/013.py
deleted file mode 100644
index 9e4222c..0000000
--- a/src/projecteuler/013.py
+++ /dev/null
@@ -1,14 +0,0 @@
-numbers = []
-
-f = open('013.txt', 'r')
-for line in f:
- numbers.append(int(line))
-f.close()
-
-sum = 0
-
-for i in numbers:
- sum += i
-
-print sum
-
diff --git a/src/projecteuler/013.txt b/src/projecteuler/013.txt
deleted file mode 100644
index 43b568e..0000000
--- a/src/projecteuler/013.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-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
diff --git a/src/projecteuler/014.py b/src/projecteuler/014.py
deleted file mode 100644
index 7df8d53..0000000
--- a/src/projecteuler/014.py
+++ /dev/null
@@ -1,21 +0,0 @@
-def chain_len(n):
- count = 1
- while(n != 1):
- if not n & 1:
- n = n / 2
- else:
- n = 3*n + 1
- count += 1
- return count
-
-max_len = 0
-max_start = 0
-
-for i in range(1, 1000000):
- len = chain_len(i)
- if len > max_len:
- max_start = i
- max_len = len
-
-print max_start
-
diff --git a/src/projecteuler/015.py b/src/projecteuler/015.py
deleted file mode 100644
index 749be04..0000000
--- a/src/projecteuler/015.py
+++ /dev/null
@@ -1,29 +0,0 @@
-
-size = 20
-
-field = [ [ 1 for i in range(0, size+1) ] for i in range(0, size+1) ]
-
-for i in xrange(1, size+1):
- for j in xrange(1, size+1):
- field[i][j] = field[i][j-1] + field[i-1][j]
-
-print field[size][size]
-
-
-#
-# recursive solution. too slow
-#
-#def count_path(width, height):
-# if width == 0 and height == 0:
-# return 1
-#
-# count = 0
-# if width > 0: # go right
-# count += count_path(width-1, height)
-# if height > 0: # go down
-# count += count_path(width, height-1)
-#
-# return count
-#
-#print count_path(20, 20)
-
diff --git a/src/projecteuler/016.py b/src/projecteuler/016.py
deleted file mode 100644
index d83451e..0000000
--- a/src/projecteuler/016.py
+++ /dev/null
@@ -1,9 +0,0 @@
-number = 1 << 1000
-
-sum = 0
-
-while(number > 0):
- sum += number % 10
- number = number / 10
-
-print sum
diff --git a/src/projecteuler/017.py b/src/projecteuler/017.py
deleted file mode 100644
index 8bb95cf..0000000
--- a/src/projecteuler/017.py
+++ /dev/null
@@ -1,31 +0,0 @@
-n1 = ["", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
-n2 = ["ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
-n3 = ["twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
-n4 = ["hundred"]
-n5 = ["thousand"]
-
-numbers = ""
-for i in range(1, 1001):
- current = ""
-
- if (i % 10000) / 1000 > 0:
- current += n1[(i%10000)/1000] + n5[0]
- if i % 1000 > 0:
- current += "and"
-
- if (i % 1000) / 100 > 0:
- current += n1[(i%1000)/100] + n4[0]
- if i % 100 > 0:
- current += "and"
-
- if i % 100 <= 9:
- current += n1[i%10]
- elif i % 100 <= 19:
- current += n2[(i%10)-10]
- else:
- current += n3[(i%100)/10-2] + n1[i%10]
-
- numbers += current
-
-print len(numbers)
-
diff --git a/src/projecteuler/018.py b/src/projecteuler/018.py
deleted file mode 100644
index d54d14c..0000000
--- a/src/projecteuler/018.py
+++ /dev/null
@@ -1,20 +0,0 @@
-
-triangle = []
-
-f = open('018.txt', 'r')
-for line in f:
- line.rstrip('\n')
- row_str = line.split(' ')
- row_int = [ int(x) for x in row_str ]
- triangle.append(row_int)
-f.close()
-
-for i in range(1, len(triangle)):
- rowlen = len(triangle[i])
- triangle[i][0] += triangle[i-1][0]
- triangle[i][rowlen-1] += triangle[i-1][rowlen-2]
- for j in range(1, rowlen-1):
- triangle[i][j] += max(triangle[i-1][j-1], triangle[i-1][j])
-
-print max(triangle[-1])
-
diff --git a/src/projecteuler/018.txt b/src/projecteuler/018.txt
deleted file mode 100644
index e236c2f..0000000
--- a/src/projecteuler/018.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-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
diff --git a/src/projecteuler/019.py b/src/projecteuler/019.py
deleted file mode 100644
index 187b45e..0000000
--- a/src/projecteuler/019.py
+++ /dev/null
@@ -1,17 +0,0 @@
-days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
-
-day = 7 # first sunday in 1900
-count = 0
-
-for year in range(1900, 2001):
- for month in range(1, 13):
- if day == 1 and year >= 1901:
- count += 1
- if month == 2 and year % 4 == 0:
- day -= 1
- while(day <= days[month-1]):
- day += 7
- day -= days[month-1]
-
-print count
-
diff --git a/src/projecteuler/020.py b/src/projecteuler/020.py
deleted file mode 100644
index 451d614..0000000
--- a/src/projecteuler/020.py
+++ /dev/null
@@ -1,16 +0,0 @@
-def fac(limit):
- result = 1
- for i in range(1, limit+1):
- result *= i
- return result
-
-number = fac(100)
-
-sum = 0
-
-while(number > 0):
- sum += number % 10
- number = number / 10
-
-print sum
-
diff --git a/src/projecteuler/021.c b/src/projecteuler/021.c
deleted file mode 100644
index e236cf3..0000000
--- a/src/projecteuler/021.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include <math.h>
-
-int sum_divisors(int number)
-{
- int i;
- int sum = 1;
- int limit = (int) ceil(sqrt(number));
- for(i=2; i<limit; i++)
- {
- if(number % i == 0)
- {
- sum += i;
- if(number / i != i)
- sum += number / i;
- }
- }
- return sum;
-}
-
-int main()
-{
- int sum = 0;
- int a;
- for(a=1; a<10000; a++)
- {
- int b = sum_divisors(a);
- if(a == sum_divisors(b) && a != b)
- sum += a;
- }
-
- printf("%d\n", sum);
-
- return 0;
-}
-
diff --git a/src/projecteuler/022.py b/src/projecteuler/022.py
deleted file mode 100644
index d63530d..0000000
--- a/src/projecteuler/022.py
+++ /dev/null
@@ -1,18 +0,0 @@
-def score(name):
- sum = 0
- for char in name:
- sum += ord(char) - 64
- return sum
-
-pos = 0
-total_score = 0
-
-f = open('022.txt', 'r')
-for name in f:
- name = name.rstrip("\n")
- pos += 1
- total_score += pos * score(name)
-f.close()
-
-print total_score
-
diff --git a/src/projecteuler/022.txt b/src/projecteuler/022.txt
deleted file mode 100644
index 177df65..0000000
--- a/src/projecteuler/022.txt
+++ /dev/null
@@ -1,5163 +0,0 @@
-AARON
-ABBEY
-ABBIE
-ABBY
-ABDUL
-ABE
-ABEL
-ABIGAIL
-ABRAHAM
-ABRAM
-ADA
-ADAH
-ADALBERTO
-ADALINE
-ADAM
-ADAN
-ADDIE
-ADELA
-ADELAIDA
-ADELAIDE
-ADELE
-ADELIA
-ADELINA
-ADELINE
-ADELL
-ADELLA
-ADELLE
-ADENA
-ADINA
-ADOLFO
-ADOLPH
-ADRIA
-ADRIAN
-ADRIANA
-ADRIANE
-ADRIANNA
-ADRIANNE
-ADRIEN
-ADRIENE
-ADRIENNE
-AFTON
-AGATHA
-AGNES
-AGNUS
-AGRIPINA
-AGUEDA
-AGUSTIN
-AGUSTINA
-AHMAD
-AHMED
-AI
-AIDA
-AIDE
-AIKO
-AILEEN
-AILENE
-AIMEE
-AISHA
-AJA
-AKIKO
-AKILAH
-AL
-ALAINA
-ALAINE
-ALAN
-ALANA
-ALANE
-ALANNA
-ALAYNA
-ALBA
-ALBERT
-ALBERTA
-ALBERTHA
-ALBERTINA
-ALBERTINE
-ALBERTO
-ALBINA
-ALDA
-ALDEN
-ALDO
-ALEASE
-ALEC
-ALECIA
-ALEEN
-ALEIDA
-ALEISHA
-ALEJANDRA
-ALEJANDRINA
-ALEJANDRO
-ALENA
-ALENE
-ALESHA
-ALESHIA
-ALESIA
-ALESSANDRA
-ALETA
-ALETHA
-ALETHEA
-ALETHIA
-ALEX
-ALEXA
-ALEXANDER
-ALEXANDRA
-ALEXANDRIA
-ALEXIA
-ALEXIS
-ALFONSO
-ALFONZO
-ALFRED
-ALFREDA
-ALFREDIA
-ALFREDO
-ALI
-ALIA
-ALICA
-ALICE
-ALICIA
-ALIDA
-ALINA
-ALINE
-ALISA
-ALISE
-ALISHA
-ALISHIA
-ALISIA
-ALISON
-ALISSA
-ALITA
-ALIX
-ALIZA
-ALLA
-ALLAN
-ALLEEN
-ALLEGRA
-ALLEN
-ALLENA
-ALLENE
-ALLIE
-ALLINE
-ALLISON
-ALLYN
-ALLYSON
-ALMA
-ALMEDA
-ALMETA
-ALONA
-ALONSO
-ALONZO
-ALPHA
-ALPHONSE
-ALPHONSO
-ALTA
-ALTAGRACIA
-ALTHA
-ALTHEA
-ALTON
-ALVA
-ALVARO
-ALVERA
-ALVERTA
-ALVIN
-ALVINA
-ALYCE
-ALYCIA
-ALYSA
-ALYSE
-ALYSHA
-ALYSIA
-ALYSON
-ALYSSA
-AMADA
-AMADO
-AMAL
-AMALIA
-AMANDA
-AMBER
-AMBERLY
-AMBROSE
-AMEE
-AMELIA
-AMERICA
-AMI
-AMIE
-AMIEE
-AMINA
-AMIRA
-AMMIE
-AMOS
-AMPARO
-AMY
-AN
-ANA
-ANABEL
-ANALISA
-ANAMARIA
-ANASTACIA
-ANASTASIA
-ANDERA
-ANDERSON
-ANDRA
-ANDRE
-ANDREA
-ANDREAS
-ANDREE
-ANDRES
-ANDREW
-ANDRIA
-ANDY
-ANETTE
-ANGEL
-ANGELA
-ANGELE
-ANGELENA
-ANGELES
-ANGELIA
-ANGELIC
-ANGELICA
-ANGELIKA
-ANGELINA
-ANGELINE
-ANGELIQUE
-ANGELITA
-ANGELLA
-ANGELO
-ANGELYN
-ANGIE
-ANGILA
-ANGLA
-ANGLE
-ANGLEA
-ANH
-ANIBAL
-ANIKA
-ANISA
-ANISHA
-ANISSA
-ANITA
-ANITRA
-ANJA
-ANJANETTE
-ANJELICA
-ANN
-ANNA
-ANNABEL
-ANNABELL
-ANNABELLE
-ANNALEE
-ANNALISA
-ANNAMAE
-ANNAMARIA
-ANNAMARIE
-ANNE
-ANNELIESE
-ANNELLE
-ANNEMARIE
-ANNETT
-ANNETTA
-ANNETTE
-ANNICE
-ANNIE
-ANNIKA
-ANNIS
-ANNITA
-ANNMARIE
-ANTHONY
-ANTIONE
-ANTIONETTE
-ANTOINE
-ANTOINETTE
-ANTON
-ANTONE
-ANTONETTA
-ANTONETTE
-ANTONIA
-ANTONIETTA
-ANTONINA
-ANTONIO
-ANTONY
-ANTWAN
-ANYA
-APOLONIA
-APRIL
-APRYL
-ARA
-ARACELI
-ARACELIS
-ARACELY
-ARCELIA
-ARCHIE
-ARDATH
-ARDELIA
-ARDELL
-ARDELLA
-ARDELLE
-ARDEN
-ARDIS
-ARDITH
-ARETHA
-ARGELIA
-ARGENTINA
-ARIANA
-ARIANE
-ARIANNA
-ARIANNE
-ARICA
-ARIE
-ARIEL
-ARIELLE
-ARLA
-ARLEAN
-ARLEEN
-ARLEN
-ARLENA
-ARLENE
-ARLETHA
-ARLETTA
-ARLETTE
-ARLIE
-ARLINDA
-ARLINE
-ARLYNE
-ARMAND
-ARMANDA
-ARMANDINA
-ARMANDO
-ARMIDA
-ARMINDA
-ARNETTA
-ARNETTE
-ARNITA
-ARNOLD
-ARNOLDO
-ARNULFO
-ARON
-ARRON
-ART
-ARTHUR
-ARTIE
-ARTURO
-ARVILLA
-ASA
-ASHA
-ASHANTI
-ASHELY
-ASHLEA
-ASHLEE
-ASHLEIGH
-ASHLEY
-ASHLI
-ASHLIE
-ASHLY
-ASHLYN
-ASHTON
-ASIA
-ASLEY
-ASSUNTA
-ASTRID
-ASUNCION
-ATHENA
-AUBREY
-AUDIE
-AUDRA
-AUDREA
-AUDREY
-AUDRIA
-AUDRIE
-AUDRY
-AUGUST
-AUGUSTA
-AUGUSTINA
-AUGUSTINE
-AUGUSTUS
-AUNDREA
-AURA
-AUREA
-AURELIA
-AURELIO
-AURORA
-AURORE
-AUSTIN
-AUTUMN
-AVA
-AVELINA
-AVERY
-AVIS
-AVRIL
-AWILDA
-AYAKO
-AYANA
-AYANNA
-AYESHA
-AZALEE
-AZUCENA
-AZZIE
-BABARA
-BABETTE
-BAILEY
-BAMBI
-BAO
-BARABARA
-BARB
-BARBAR
-BARBARA
-BARBERA
-BARBIE
-BARBRA
-BARI
-BARNEY
-BARRETT
-BARRIE
-BARRY
-BART
-BARTON
-BASIL
-BASILIA
-BEA
-BEATA
-BEATRICE
-BEATRIS
-BEATRIZ
-BEAU
-BEAULAH
-BEBE
-BECKI
-BECKIE
-BECKY
-BEE
-BELEN
-BELIA
-BELINDA
-BELKIS
-BELL
-BELLA
-BELLE
-BELVA
-BEN
-BENEDICT
-BENITA
-BENITO
-BENJAMIN
-BENNETT
-BENNIE
-BENNY
-BENTON
-BERENICE
-BERNA
-BERNADETTE
-BERNADINE
-BERNARD
-BERNARDA
-BERNARDINA
-BERNARDINE
-BERNARDO
-BERNEICE
-BERNETTA
-BERNICE
-BERNIE
-BERNIECE
-BERNITA
-BERRY
-BERT
-BERTA
-BERTHA
-BERTIE
-BERTRAM
-BERYL
-BESS
-BESSIE
-BETH
-BETHANIE
-BETHANN
-BETHANY
-BETHEL
-BETSEY
-BETSY
-BETTE
-BETTIE
-BETTINA
-BETTY
-BETTYANN
-BETTYE
-BEULA
-BEULAH
-BEV
-BEVERLEE
-BEVERLEY
-BEVERLY
-BIANCA
-BIBI
-BILL
-BILLI
-BILLIE
-BILLY
-BILLYE
-BIRDIE
-BIRGIT
-BLAINE
-BLAIR
-BLAKE
-BLANCA
-BLANCH
-BLANCHE
-BLONDELL
-BLOSSOM
-BLYTHE
-BO
-BOB
-BOBBI
-BOBBIE
-BOBBY
-BOBBYE
-BOBETTE
-BOK
-BONG
-BONITA
-BONNIE
-BONNY
-BOOKER
-BORIS
-BOYCE
-BOYD
-BRAD
-BRADFORD
-BRADLEY
-BRADLY
-BRADY
-BRAIN
-BRANDA
-BRANDE
-BRANDEE
-BRANDEN
-BRANDI
-BRANDIE
-BRANDON
-BRANDY
-BRANT
-BREANA
-BREANN
-BREANNA
-BREANNE
-BREE
-BRENDA
-BRENDAN
-BRENDON
-BRENNA
-BRENT
-BRENTON
-BRET
-BRETT
-BRIAN
-BRIANA
-BRIANNA
-BRIANNE
-BRICE
-BRIDGET
-BRIDGETT
-BRIDGETTE
-BRIGETTE
-BRIGID
-BRIGIDA
-BRIGITTE
-BRINDA
-BRITANY
-BRITNEY
-BRITNI
-BRITT
-BRITTA
-BRITTANEY
-BRITTANI
-BRITTANIE
-BRITTANY
-BRITTENY
-BRITTNEY
-BRITTNI
-BRITTNY
-BROCK
-BRODERICK
-BRONWYN
-BROOK
-BROOKE
-BROOKS
-BRUCE
-BRUNA
-BRUNILDA
-BRUNO
-BRYAN
-BRYANNA
-BRYANT
-BRYCE
-BRYNN
-BRYON
-BUCK
-BUD
-BUDDY
-BUENA
-BUFFY
-BUFORD
-BULA
-BULAH
-BUNNY
-BURL
-BURMA
-BURT
-BURTON
-BUSTER
-BYRON
-CAITLIN
-CAITLYN
-CALANDRA
-CALEB
-CALISTA
-CALLIE
-CALVIN
-CAMELIA
-CAMELLIA
-CAMERON
-CAMI
-CAMIE
-CAMILA
-CAMILLA
-CAMILLE
-CAMMIE
-CAMMY
-CANDACE
-CANDANCE
-CANDELARIA
-CANDI
-CANDICE
-CANDIDA
-CANDIE
-CANDIS
-CANDRA
-CANDY
-CANDYCE
-CAPRICE
-CARA
-CAREN
-CAREY
-CARI
-CARIDAD
-CARIE
-CARIN
-CARINA
-CARISA
-CARISSA
-CARITA
-CARL
-CARLA
-CARLEE
-CARLEEN
-CARLENA
-CARLENE
-CARLETTA
-CARLEY
-CARLI
-CARLIE
-CARLINE
-CARLITA
-CARLO
-CARLOS
-CARLOTA
-CARLOTTA
-CARLTON
-CARLY
-CARLYN
-CARMA
-CARMAN
-CARMEL
-CARMELA
-CARMELIA
-CARMELINA
-CARMELITA
-CARMELLA
-CARMELO
-CARMEN
-CARMINA
-CARMINE
-CARMON
-CAROL
-CAROLA
-CAROLANN
-CAROLE
-CAROLEE
-CAROLIN
-CAROLINA
-CAROLINE
-CAROLL
-CAROLYN
-CAROLYNE
-CAROLYNN
-CARON
-CAROYLN
-CARRI
-CARRIE
-CARROL
-CARROLL
-CARRY
-CARSON
-CARTER
-CARY
-CARYL
-CARYLON
-CARYN
-CASANDRA
-CASEY
-CASIE
-CASIMIRA
-CASSANDRA
-CASSAUNDRA
-CASSEY
-CASSI
-CASSIDY
-CASSIE
-CASSONDRA
-CASSY
-CATALINA
-CATARINA
-CATERINA
-CATHARINE
-CATHERIN
-CATHERINA
-CATHERINE
-CATHERN
-CATHERYN
-CATHEY
-CATHI
-CATHIE
-CATHLEEN
-CATHRINE
-CATHRYN
-CATHY
-CATINA
-CATRICE
-CATRINA
-CAYLA
-CECELIA
-CECIL
-CECILA
-CECILE
-CECILIA
-CECILLE
-CECILY
-CEDRIC
-CEDRICK
-CELENA
-CELESTA
-CELESTE
-CELESTINA
-CELESTINE
-CELIA
-CELINA
-CELINDA
-CELINE
-CELSA
-CEOLA
-CESAR
-CHAD
-CHADWICK
-CHAE
-CHAN
-CHANA
-CHANCE
-CHANDA
-CHANDRA
-CHANEL
-CHANELL
-CHANELLE
-CHANG
-CHANTAL
-CHANTAY
-CHANTE
-CHANTEL
-CHANTELL
-CHANTELLE
-CHARA
-CHARIS
-CHARISE
-CHARISSA
-CHARISSE
-CHARITA
-CHARITY
-CHARLA
-CHARLEEN
-CHARLENA
-CHARLENE
-CHARLES
-CHARLESETTA
-CHARLETTE
-CHARLEY
-CHARLIE
-CHARLINE
-CHARLOTT
-CHARLOTTE
-CHARLSIE
-CHARLYN
-CHARMAIN
-CHARMAINE
-CHAROLETTE
-CHAS
-CHASE
-CHASIDY
-CHASITY
-CHASSIDY
-CHASTITY
-CHAU
-CHAUNCEY
-CHAYA
-CHELSEA
-CHELSEY
-CHELSIE
-CHER
-CHERE
-CHEREE
-CHERELLE
-CHERI
-CHERIE
-CHERILYN
-CHERISE
-CHERISH
-CHERLY
-CHERLYN
-CHERRI
-CHERRIE
-CHERRY
-CHERRYL
-CHERY
-CHERYL
-CHERYLE
-CHERYLL
-CHESTER
-CHET
-CHEYENNE
-CHI
-CHIA
-CHIEKO
-CHIN
-CHINA
-CHING
-CHIQUITA
-CHLOE
-CHONG
-CHRIS
-CHRISSY
-CHRISTA
-CHRISTAL
-CHRISTEEN
-CHRISTEL
-CHRISTEN
-CHRISTENA
-CHRISTENE
-CHRISTI
-CHRISTIA
-CHRISTIAN
-CHRISTIANA
-CHRISTIANE
-CHRISTIE
-CHRISTIN
-CHRISTINA
-CHRISTINE
-CHRISTINIA
-CHRISTOPER
-CHRISTOPHER
-CHRISTY
-CHRYSTAL
-CHU
-CHUCK
-CHUN
-CHUNG
-CIARA
-CICELY
-CIERA
-CIERRA
-CINDA
-CINDERELLA
-CINDI
-CINDIE
-CINDY
-CINTHIA
-CIRA
-CLAIR
-CLAIRE
-CLARA
-CLARE
-CLARENCE
-CLARETHA
-CLARETTA
-CLARIBEL
-CLARICE
-CLARINDA
-CLARINE
-CLARIS
-CLARISA
-CLARISSA
-CLARITA
-CLARK
-CLASSIE
-CLAUD
-CLAUDE
-CLAUDETTE
-CLAUDIA
-CLAUDIE
-CLAUDINE
-CLAUDIO
-CLAY
-CLAYTON
-CLELIA
-CLEMENCIA
-CLEMENT
-CLEMENTE
-CLEMENTINA
-CLEMENTINE
-CLEMMIE
-CLEO
-CLEOPATRA
-CLEORA
-CLEOTILDE
-CLETA
-CLETUS
-CLEVELAND
-CLIFF
-CLIFFORD
-CLIFTON
-CLINT
-CLINTON
-CLORA
-CLORINDA
-CLOTILDE
-CLYDE
-CODI
-CODY
-COLBY
-COLE
-COLEEN
-COLEMAN
-COLENE
-COLETTA
-COLETTE
-COLIN
-COLLEEN
-COLLEN
-COLLENE
-COLLETTE
-COLLIN
-COLTON
-COLUMBUS
-CONCEPCION
-CONCEPTION
-CONCETTA
-CONCHA
-CONCHITA
-CONNIE
-CONRAD
-CONSTANCE
-CONSUELA
-CONSUELO
-CONTESSA
-CORA
-CORAL
-CORALEE
-CORALIE
-CORAZON
-CORDELIA
-CORDELL
-CORDIA
-CORDIE
-COREEN
-CORENE
-CORETTA
-COREY
-CORI
-CORIE
-CORINA
-CORINE
-CORINNA
-CORINNE
-CORLISS
-CORNELIA
-CORNELIUS
-CORNELL
-CORRIE
-CORRIN
-CORRINA
-CORRINE
-CORRINNE
-CORTEZ
-CORTNEY
-CORY
-COURTNEY
-COY
-CRAIG
-CREOLA
-CRIS
-CRISELDA
-CRISSY
-CRISTA
-CRISTAL
-CRISTEN
-CRISTI
-CRISTIE
-CRISTIN
-CRISTINA
-CRISTINE
-CRISTOBAL
-CRISTOPHER
-CRISTY
-CRUZ
-CRYSTA
-CRYSTAL
-CRYSTLE
-CUC
-CURT
-CURTIS
-CYNDI
-CYNDY
-CYNTHIA
-CYRIL
-CYRSTAL
-CYRUS
-CYTHIA
-DACIA
-DAGMAR
-DAGNY
-DAHLIA
-DAINA
-DAINE
-DAISEY
-DAISY
-DAKOTA
-DALE
-DALENE
-DALIA
-DALILA
-DALLAS
-DALTON
-DAMARIS
-DAMIAN
-DAMIEN
-DAMION
-DAMON
-DAN
-DANA
-DANAE
-DANE
-DANELLE
-DANETTE
-DANI
-DANIA
-DANIAL
-DANICA
-DANIEL
-DANIELA
-DANIELE
-DANIELL
-DANIELLA
-DANIELLE
-DANIKA
-DANILLE
-DANILO
-DANITA
-DANN
-DANNA
-DANNETTE
-DANNIE
-DANNIELLE
-DANNY
-DANTE
-DANUTA
-DANYEL
-DANYELL
-DANYELLE
-DAPHINE
-DAPHNE
-DARA
-DARBY
-DARCEL
-DARCEY
-DARCI
-DARCIE
-DARCY
-DARELL
-DAREN
-DARIA
-DARIN
-DARIO
-DARIUS
-DARLA
-DARLEEN
-DARLENA
-DARLENE
-DARLINE
-DARNELL
-DARON
-DARREL
-DARRELL
-DARREN
-DARRICK
-DARRIN
-DARRON
-DARRYL
-DARWIN
-DARYL
-DAVE
-DAVID
-DAVIDA
-DAVINA
-DAVIS
-DAWN
-DAWNA
-DAWNE
-DAYLE
-DAYNA
-DAYSI
-DEADRA
-DEAN
-DEANA
-DEANDRA
-DEANDRE
-DEANDREA
-DEANE
-DEANGELO
-DEANN
-DEANNA
-DEANNE
-DEB
-DEBBI
-DEBBIE
-DEBBRA
-DEBBY
-DEBERA
-DEBI
-DEBORA
-DEBORAH
-DEBRA
-DEBRAH
-DEBROAH
-DEDE
-DEDRA
-DEE
-DEEANN
-DEEANNA
-DEEDEE
-DEEDRA
-DEENA
-DEETTA
-DEIDRA
-DEIDRE
-DEIRDRE
-DEJA
-DEL
-DELAINE
-DELANA
-DELBERT
-DELCIE
-DELENA
-DELFINA
-DELIA
-DELICIA
-DELILA
-DELILAH
-DELINDA
-DELISA
-DELL
-DELLA
-DELMA
-DELMAR
-DELMER
-DELMY
-DELOIS
-DELOISE
-DELORA
-DELORAS
-DELORES
-DELORIS
-DELORSE
-DELPHA
-DELPHIA
-DELPHINE
-DELSIE
-DELTA
-DEMARCUS
-DEMETRA
-DEMETRIA
-DEMETRICE
-DEMETRIUS
-DENA
-DENAE
-DENEEN
-DENESE
-DENICE
-DENIS
-DENISE
-DENISHA
-DENISSE
-DENITA
-DENNA
-DENNIS
-DENNISE
-DENNY
-DENVER
-DENYSE
-DEON
-DEONNA
-DEREK
-DERICK
-DERRICK
-DESHAWN
-DESIRAE
-DESIRE
-DESIREE
-DESMOND
-DESPINA
-DESSIE
-DESTINY
-DETRA
-DEVIN
-DEVON
-DEVONA
-DEVORA
-DEVORAH
-DEWAYNE
-DEWEY
-DEWITT
-DEXTER
-DIA
-DIAMOND
-DIAN
-DIANA
-DIANE
-DIANN
-DIANNA
-DIANNE
-DICK
-DIEDRA
-DIEDRE
-DIEGO
-DIERDRE
-DIGNA
-DILLON
-DIMPLE
-DINA
-DINAH
-DINO
-DINORAH
-DION
-DIONE
-DIONNA
-DIONNE
-DIRK
-DIVINA
-DIXIE
-DODIE
-DOLLIE
-DOLLY
-DOLORES
-DOLORIS
-DOMENIC
-DOMENICA
-DOMINGA
-DOMINGO
-DOMINIC
-DOMINICA
-DOMINICK
-DOMINIQUE
-DOMINQUE
-DOMITILA
-DOMONIQUE
-DON
-DONA
-DONALD
-DONELLA
-DONETTA
-DONETTE
-DONG
-DONITA
-DONN
-DONNA
-DONNELL
-DONNETTA
-DONNETTE
-DONNIE
-DONNY
-DONOVAN
-DONTE
-DONYA
-DORA
-DORATHY
-DORCAS
-DOREATHA
-DOREEN
-DORENE
-DORETHA
-DORETHEA
-DORETTA
-DORI
-DORIA
-DORIAN
-DORIE
-DORINDA
-DORINE
-DORIS
-DORLA
-DOROTHA
-DOROTHEA
-DOROTHY
-DORRIS
-DORSEY
-DORTHA
-DORTHEA
-DORTHEY
-DORTHY
-DOT
-DOTTIE
-DOTTY
-DOUG
-DOUGLAS
-DOUGLASS
-DOVIE
-DOYLE
-DREAMA
-DREMA
-DREW
-DRUCILLA
-DRUSILLA
-DUANE
-DUDLEY
-DULCE
-DULCIE
-DUNCAN
-DUNG
-DUSTI
-DUSTIN
-DUSTY
-DWAIN
-DWANA
-DWAYNE
-DWIGHT
-DYAN
-DYLAN
-EARL
-EARLE
-EARLEAN
-EARLEEN
-EARLENE
-EARLIE
-EARLINE
-EARNEST
-EARNESTINE
-EARTHA
-EASTER
-EBONI
-EBONIE
-EBONY
-ECHO
-ED
-EDA
-EDDA
-EDDIE
-EDDY
-EDELMIRA
-EDEN
-EDGAR
-EDGARDO
-EDIE
-EDISON
-EDITH
-EDMOND
-EDMUND
-EDMUNDO
-EDNA
-EDRA
-EDRIS
-EDUARDO
-EDWARD
-EDWARDO
-EDWIN
-EDWINA
-EDYTH
-EDYTHE
-EFFIE
-EFRAIN
-EFREN
-EHTEL
-EILEEN
-EILENE
-ELA
-ELADIA
-ELAINA
-ELAINE
-ELANA
-ELANE
-ELANOR
-ELAYNE
-ELBA
-ELBERT
-ELDA
-ELDEN
-ELDON
-ELDORA
-ELDRIDGE
-ELEANOR
-ELEANORA
-ELEANORE
-ELEASE
-ELENA
-ELENE
-ELENI
-ELENOR
-ELENORA
-ELENORE
-ELEONOR
-ELEONORA
-ELEONORE
-ELFREDA
-ELFRIEDA
-ELFRIEDE
-ELI
-ELIA
-ELIANA
-ELIAS
-ELICIA
-ELIDA
-ELIDIA
-ELIJAH
-ELIN
-ELINA
-ELINOR
-ELINORE
-ELISA
-ELISABETH
-ELISE
-ELISEO
-ELISHA
-ELISSA
-ELIZ
-ELIZA
-ELIZABET
-ELIZABETH
-ELIZBETH
-ELIZEBETH
-ELKE
-ELLA
-ELLAMAE
-ELLAN
-ELLEN
-ELLENA
-ELLI
-ELLIE
-ELLIOT
-ELLIOTT
-ELLIS
-ELLSWORTH
-ELLY
-ELLYN
-ELMA
-ELMER
-ELMIRA
-ELMO
-ELNA
-ELNORA
-ELODIA
-ELOIS
-ELOISA
-ELOISE
-ELOUISE
-ELOY
-ELROY
-ELSA
-ELSE
-ELSIE
-ELSY
-ELTON
-ELVA
-ELVERA
-ELVIA
-ELVIE
-ELVIN
-ELVINA
-ELVIRA
-ELVIS
-ELWANDA
-ELWOOD
-ELYSE
-ELZA
-EMA
-EMANUEL
-EMELDA
-EMELIA
-EMELINA
-EMELINE
-EMELY
-EMERALD
-EMERITA
-EMERSON
-EMERY
-EMIKO
-EMIL
-EMILE
-EMILEE
-EMILIA
-EMILIE
-EMILIO
-EMILY
-EMMA
-EMMALINE
-EMMANUEL
-EMMETT
-EMMIE
-EMMITT
-EMMY
-EMOGENE
-EMORY
-ENA
-ENDA
-ENEDINA
-ENEIDA
-ENID
-ENOCH
-ENOLA
-ENRIQUE
-ENRIQUETA
-EPIFANIA
-ERA
-ERASMO
-ERIC
-ERICA
-ERICH
-ERICK
-ERICKA
-ERIK
-ERIKA
-ERIN
-ERINN
-ERLENE
-ERLINDA
-ERLINE
-ERMA
-ERMELINDA
-ERMINIA
-ERNA
-ERNEST
-ERNESTINA
-ERNESTINE
-ERNESTO
-ERNIE
-ERROL
-ERVIN
-ERWIN
-ERYN
-ESMERALDA
-ESPERANZA
-ESSIE
-ESTA
-ESTEBAN
-ESTEFANA
-ESTELA
-ESTELL
-ESTELLA
-ESTELLE
-ESTER
-ESTHER
-ESTRELLA
-ETHA
-ETHAN
-ETHEL
-ETHELENE
-ETHELYN
-ETHYL
-ETSUKO
-ETTA
-ETTIE
-EUFEMIA
-EUGENA
-EUGENE
-EUGENIA
-EUGENIE
-EUGENIO
-EULA
-EULAH
-EULALIA
-EUN
-EUNA
-EUNICE
-EURA
-EUSEBIA
-EUSEBIO
-EUSTOLIA
-EVA
-EVALYN
-EVAN
-EVANGELINA
-EVANGELINE
-EVE
-EVELIA
-EVELIN
-EVELINA
-EVELINE
-EVELYN
-EVELYNE
-EVELYNN
-EVERETT
-EVERETTE
-EVETTE
-EVIA
-EVIE
-EVITA
-EVON
-EVONNE
-EWA
-EXIE
-EZEKIEL
-EZEQUIEL
-EZRA
-FABIAN
-FABIOLA
-FAE
-FAIRY
-FAITH
-FALLON
-FANNIE
-FANNY
-FARAH
-FARRAH
-FATIMA
-FATIMAH
-FAUSTINA
-FAUSTINO
-FAUSTO
-FAVIOLA
-FAWN
-FAY
-FAYE
-FE
-FEDERICO
-FELECIA
-FELICA
-FELICE
-FELICIA
-FELICIDAD
-FELICITA
-FELICITAS
-FELIPA
-FELIPE
-FELISA
-FELISHA
-FELIX
-FELTON
-FERDINAND
-FERMIN
-FERMINA
-FERN
-FERNANDA
-FERNANDE
-FERNANDO
-FERNE
-FIDEL
-FIDELA
-FIDELIA
-FILIBERTO
-FILOMENA
-FIONA
-FLAVIA
-FLETA
-FLETCHER
-FLO
-FLOR
-FLORA
-FLORANCE
-FLORENCE
-FLORENCIA
-FLORENCIO
-FLORENE
-FLORENTINA
-FLORENTINO
-FLORETTA
-FLORIA
-FLORIDA
-FLORINDA
-FLORINE
-FLORRIE
-FLOSSIE
-FLOY
-FLOYD
-FONDA
-FOREST
-FORREST
-FOSTER
-FRAN
-FRANCE
-FRANCENE
-FRANCES
-FRANCESCA
-FRANCESCO
-FRANCHESCA
-FRANCIE
-FRANCINA
-FRANCINE
-FRANCIS
-FRANCISCA
-FRANCISCO
-FRANCOISE
-FRANK
-FRANKIE
-FRANKLIN
-FRANKLYN
-FRANSISCA
-FRED
-FREDA
-FREDDA
-FREDDIE
-FREDDY
-FREDERIC
-FREDERICA
-FREDERICK
-FREDERICKA
-FREDIA
-FREDRIC
-FREDRICK
-FREDRICKA
-FREEDA
-FREEMAN
-FREIDA
-FRIDA
-FRIEDA
-FRITZ
-FUMIKO
-GABRIEL
-GABRIELA
-GABRIELE
-GABRIELLA
-GABRIELLE
-GAIL
-GALA
-GALE
-GALEN
-GALINA
-GARFIELD
-GARLAND
-GARNET
-GARNETT
-GARRET
-GARRETT
-GARRY
-GARTH
-GARY
-GASTON
-GAVIN
-GAY
-GAYE
-GAYLA
-GAYLE
-GAYLENE
-GAYLORD
-GAYNELL
-GAYNELLE
-GEARLDINE
-GEMA
-GEMMA
-GENA
-GENARO
-GENE
-GENESIS
-GENEVA
-GENEVIE
-GENEVIEVE
-GENEVIVE
-GENIA
-GENIE
-GENNA
-GENNIE
-GENNY
-GENOVEVA
-GEOFFREY
-GEORGANN
-GEORGE
-GEORGEANN
-GEORGEANNA
-GEORGENE
-GEORGETTA
-GEORGETTE
-GEORGIA
-GEORGIANA
-GEORGIANN
-GEORGIANNA
-GEORGIANNE
-GEORGIE
-GEORGINA
-GEORGINE
-GERALD
-GERALDINE
-GERALDO
-GERALYN
-GERARD
-GERARDO
-GERDA
-GERI
-GERMAINE
-GERMAN
-GERRI
-GERRY
-GERTHA
-GERTIE
-GERTRUD
-GERTRUDE
-GERTRUDIS
-GERTUDE
-GHISLAINE
-GIA
-GIANNA
-GIDGET
-GIGI
-GIL
-GILBERT
-GILBERTE
-GILBERTO
-GILDA
-GILLIAN
-GILMA
-GINA
-GINETTE
-GINGER
-GINNY
-GINO
-GIOVANNA
-GIOVANNI
-GISELA
-GISELE
-GISELLE
-GITA
-GIUSEPPE
-GIUSEPPINA
-GLADIS
-GLADY
-GLADYS
-GLAYDS
-GLEN
-GLENDA
-GLENDORA
-GLENN
-GLENNA
-GLENNIE
-GLENNIS
-GLINDA
-GLORIA
-GLORY
-GLYNDA
-GLYNIS
-GOLDA
-GOLDEN
-GOLDIE
-GONZALO
-GORDON
-GRACE
-GRACIA
-GRACIE
-GRACIELA
-GRADY
-GRAHAM
-GRAIG
-GRANT
-GRANVILLE
-GRAYCE
-GRAZYNA
-GREG
-GREGG
-GREGORIA
-GREGORIO
-GREGORY
-GRETA
-GRETCHEN
-GRETTA
-GRICELDA
-GRISEL
-GRISELDA
-GROVER
-GUADALUPE
-GUDRUN
-GUILLERMINA
-GUILLERMO
-GUS
-GUSSIE
-GUSTAVO
-GUY
-GWEN
-GWENDA
-GWENDOLYN
-GWENN
-GWYN
-GWYNETH
-HA
-HAE
-HAI
-HAILEY
-HAL
-HALEY
-HALINA
-HALLEY
-HALLIE
-HAN
-HANA
-HANG
-HANH
-HANK
-HANNA
-HANNAH
-HANNELORE
-HANS
-HARLAN
-HARLAND
-HARLEY
-HARMONY
-HAROLD
-HARRIET
-HARRIETT
-HARRIETTE
-HARRIS
-HARRISON
-HARRY
-HARVEY
-HASSAN
-HASSIE
-HATTIE
-HAYDEE
-HAYDEN
-HAYLEY
-HAYWOOD
-HAZEL
-HEATH
-HEATHER
-HECTOR
-HEDWIG
-HEDY
-HEE
-HEIDE
-HEIDI
-HEIDY
-HEIKE
-HELAINE
-HELEN
-HELENA
-HELENE
-HELGA
-HELLEN
-HENRIETTA
-HENRIETTE
-HENRY
-HERB
-HERBERT
-HERIBERTO
-HERLINDA
-HERMA
-HERMAN
-HERMELINDA
-HERMILA
-HERMINA
-HERMINE
-HERMINIA
-HERSCHEL
-HERSHEL
-HERTA
-HERTHA
-HESTER
-HETTIE
-HIEDI
-HIEN
-HILARIA
-HILARIO
-HILARY
-HILDA
-HILDE
-HILDEGARD
-HILDEGARDE
-HILDRED
-HILLARY
-HILMA
-HILTON
-HIPOLITO
-HIRAM
-HIROKO
-HISAKO
-HOA
-HOBERT
-HOLLEY
-HOLLI
-HOLLIE
-HOLLIS
-HOLLY
-HOMER
-HONEY
-HONG
-HOPE
-HORACE
-HORACIO
-HORTENCIA
-HORTENSE
-HORTENSIA
-HOSEA
-HOUSTON
-HOWARD
-HOYT
-HSIU
-HUBERT
-HUE
-HUEY
-HUGH
-HUGO
-HUI
-HULDA
-HUMBERTO
-HUNG
-HUNTER
-HUONG
-HWA
-HYACINTH
-HYE
-HYMAN
-HYO
-HYON
-HYUN
-IAN
-IDA
-IDALIA
-IDELL
-IDELLA
-IESHA
-IGNACIA
-IGNACIO
-IKE
-ILA
-ILANA
-ILDA
-ILEANA
-ILEEN
-ILENE
-ILIANA
-ILLA
-ILONA
-ILSE
-ILUMINADA
-IMA
-IMELDA
-IMOGENE
-IN
-INA
-INDIA
-INDIRA
-INELL
-INES
-INEZ
-INGA
-INGE
-INGEBORG
-INGER
-INGRID
-INOCENCIA
-IOLA
-IONA
-IONE
-IRA
-IRAIDA
-IRENA
-IRENE
-IRINA
-IRIS
-IRISH
-IRMA
-IRMGARD
-IRVIN
-IRVING
-IRWIN
-ISA
-ISAAC
-ISABEL
-ISABELL
-ISABELLA
-ISABELLE
-ISADORA
-ISAIAH
-ISAIAS
-ISAURA
-ISELA
-ISIAH
-ISIDRA
-ISIDRO
-ISIS
-ISMAEL
-ISOBEL
-ISRAEL
-ISREAL
-ISSAC
-IVA
-IVAN
-IVANA
-IVELISSE
-IVETTE
-IVEY
-IVONNE
-IVORY
-IVY
-IZETTA
-IZOLA
-JA
-JACALYN
-JACELYN
-JACINDA
-JACINTA
-JACINTO
-JACK
-JACKELINE
-JACKELYN
-JACKI
-JACKIE
-JACKLYN
-JACKQUELINE
-JACKSON
-JACLYN
-JACOB
-JACQUALINE
-JACQUE
-JACQUELIN
-JACQUELINE
-JACQUELYN
-JACQUELYNE
-JACQUELYNN
-JACQUES
-JACQUETTA
-JACQUI
-JACQUIE
-JACQUILINE
-JACQULINE
-JACQULYN
-JADA
-JADE
-JADWIGA
-JAE
-JAIME
-JAIMEE
-JAIMIE
-JAKE
-JALEESA
-JALISA
-JAMA
-JAMAAL
-JAMAL
-JAMAR
-JAME
-JAMEE
-JAMEL
-JAMES
-JAMEY
-JAMI
-JAMIE
-JAMIKA
-JAMILA
-JAMISON
-JAMMIE
-JAN
-JANA
-JANAE
-JANAY
-JANE
-JANEAN
-JANEE
-JANEEN
-JANEL
-JANELL
-JANELLA
-JANELLE
-JANENE
-JANESSA
-JANET
-JANETH
-JANETT
-JANETTA
-JANETTE
-JANEY
-JANI
-JANICE
-JANIE
-JANIECE
-JANINA
-JANINE
-JANIS
-JANISE
-JANITA
-JANN
-JANNA
-JANNET
-JANNETTE
-JANNIE
-JANUARY
-JANYCE
-JAQUELINE
-JAQUELYN
-JARED
-JAROD
-JARRED
-JARRETT
-JARROD
-JARVIS
-JASMIN
-JASMINE
-JASON
-JASPER
-JAUNITA
-JAVIER
-JAY
-JAYE
-JAYME
-JAYMIE
-JAYNA
-JAYNE
-JAYSON
-JAZMIN
-JAZMINE
-JC
-JEAN
-JEANA
-JEANE
-JEANELLE
-JEANENE
-JEANETT
-JEANETTA
-JEANETTE
-JEANICE
-JEANIE
-JEANINE
-JEANMARIE
-JEANNA
-JEANNE
-JEANNETTA
-JEANNETTE
-JEANNIE
-JEANNINE
-JED
-JEFF
-JEFFEREY
-JEFFERSON
-JEFFERY
-JEFFIE
-JEFFREY
-JEFFRY
-JEN
-JENA
-JENAE
-JENE
-JENEE
-JENELL
-JENELLE
-JENETTE
-JENEVA
-JENI
-JENICE
-JENIFER
-JENIFFER
-JENINE
-JENISE
-JENNA
-JENNEFER
-JENNELL
-JENNETTE
-JENNI
-JENNIE
-JENNIFER
-JENNIFFER
-JENNINE
-JENNY
-JERALD
-JERALDINE
-JERAMY
-JERE
-JEREMIAH
-JEREMY
-JERI
-JERICA
-JERILYN
-JERLENE
-JERMAINE
-JEROLD
-JEROME
-JEROMY
-JERRELL
-JERRI
-JERRICA
-JERRIE
-JERROD
-JERROLD
-JERRY
-JESENIA
-JESICA
-JESS
-JESSE
-JESSENIA
-JESSI
-JESSIA
-JESSICA
-JESSIE
-JESSIKA
-JESTINE
-JESUS
-JESUSA
-JESUSITA
-JETTA
-JETTIE
-JEWEL
-JEWELL
-JI
-JILL
-JILLIAN
-JIM
-JIMMIE
-JIMMY
-JIN
-JINA
-JINNY
-JO
-JOAN
-JOANA
-JOANE
-JOANIE
-JOANN
-JOANNA
-JOANNE
-JOANNIE
-JOAQUIN
-JOAQUINA
-JOCELYN
-JODEE
-JODI
-JODIE
-JODY
-JOE
-JOEANN
-JOEL
-JOELLA
-JOELLE
-JOELLEN
-JOESPH
-JOETTA
-JOETTE
-JOEY
-JOHANA
-JOHANNA
-JOHANNE
-JOHN
-JOHNA
-JOHNATHAN
-JOHNATHON
-JOHNETTA
-JOHNETTE
-JOHNIE
-JOHNNA
-JOHNNIE
-JOHNNY
-JOHNSIE
-JOHNSON
-JOI
-JOIE
-JOLANDA
-JOLEEN
-JOLENE
-JOLIE
-JOLINE
-JOLYN
-JOLYNN
-JON
-JONA
-JONAH
-JONAS
-JONATHAN
-JONATHON
-JONE
-JONELL
-JONELLE
-JONG
-JONI
-JONIE
-JONNA
-JONNIE
-JORDAN
-JORDON
-JORGE
-JOSE
-JOSEF
-JOSEFA
-JOSEFINA
-JOSEFINE
-JOSELYN
-JOSEPH
-JOSEPHINA
-JOSEPHINE
-JOSETTE
-JOSH
-JOSHUA
-JOSIAH
-JOSIE
-JOSLYN
-JOSPEH
-JOSPHINE
-JOSUE
-JOVAN
-JOVITA
-JOY
-JOYA
-JOYCE
-JOYCELYN
-JOYE
-JUAN
-JUANA
-JUANITA
-JUDE
-JUDI
-JUDIE
-JUDITH
-JUDSON
-JUDY
-JULE
-JULEE
-JULENE
-JULES
-JULI
-JULIA
-JULIAN
-JULIANA
-JULIANE
-JULIANN
-JULIANNA
-JULIANNE
-JULIE
-JULIEANN
-JULIENNE
-JULIET
-JULIETA
-JULIETTA
-JULIETTE
-JULIO
-JULISSA
-JULIUS
-JUNE
-JUNG
-JUNIE
-JUNIOR
-JUNITA
-JUNKO
-JUSTA
-JUSTIN
-JUSTINA
-JUSTINE
-JUTTA
-KA
-KACEY
-KACI
-KACIE
-KACY
-KAI
-KAILA
-KAITLIN
-KAITLYN
-KALA
-KALEIGH
-KALEY
-KALI
-KALLIE
-KALYN
-KAM
-KAMALA
-KAMI
-KAMILAH
-KANDACE
-KANDI
-KANDICE
-KANDIS
-KANDRA
-KANDY
-KANESHA
-KANISHA
-KARA
-KARAN
-KAREEM
-KAREEN
-KAREN
-KARENA
-KAREY
-KARI
-KARIE
-KARIMA
-KARIN
-KARINA
-KARINE
-KARISA
-KARISSA
-KARL
-KARLA
-KARLEEN
-KARLENE
-KARLY
-KARLYN
-KARMA
-KARMEN
-KAROL
-KAROLE
-KAROLINE
-KAROLYN
-KARON
-KARREN
-KARRI
-KARRIE
-KARRY
-KARY
-KARYL
-KARYN
-KASANDRA
-KASEY
-KASHA
-KASI
-KASIE
-KASSANDRA
-KASSIE
-KATE
-KATELIN
-KATELYN
-KATELYNN
-KATERINE
-KATHALEEN
-KATHARINA
-KATHARINE
-KATHARYN
-KATHE
-KATHELEEN
-KATHERIN
-KATHERINA
-KATHERINE
-KATHERN
-KATHERYN
-KATHEY
-KATHI
-KATHIE
-KATHLEEN
-KATHLENE
-KATHLINE
-KATHLYN
-KATHRIN
-KATHRINE
-KATHRYN
-KATHRYNE
-KATHY
-KATHYRN
-KATI
-KATIA
-KATIE
-KATINA
-KATLYN
-KATRICE
-KATRINA
-KATTIE
-KATY
-KAY
-KAYCE
-KAYCEE
-KAYE
-KAYLA
-KAYLEE
-KAYLEEN
-KAYLEIGH
-KAYLENE
-KAZUKO
-KECIA
-KEELEY
-KEELY
-KEENA
-KEENAN
-KEESHA
-KEIKO
-KEILA
-KEIRA
-KEISHA
-KEITH
-KEITHA
-KELI
-KELLE
-KELLEE
-KELLEY
-KELLI
-KELLIE
-KELLY
-KELLYE
-KELSEY
-KELSI
-KELSIE
-KELVIN
-KEMBERLY
-KEN
-KENA
-KENDA
-KENDAL
-KENDALL
-KENDRA
-KENDRICK
-KENETH
-KENIA
-KENISHA
-KENNA
-KENNETH
-KENNITH
-KENNY
-KENT
-KENTON
-KENYA
-KENYATTA
-KENYETTA
-KERA
-KEREN
-KERI
-KERMIT
-KERRI
-KERRIE
-KERRY
-KERSTIN
-KESHA
-KESHIA
-KETURAH
-KEVA
-KEVEN
-KEVIN
-KHADIJAH
-KHALILAH
-KIA
-KIANA
-KIARA
-KIERA
-KIERSTEN
-KIESHA
-KIETH
-KILEY
-KIM
-KIMBER
-KIMBERELY
-KIMBERLEE
-KIMBERLEY
-KIMBERLI
-KIMBERLIE
-KIMBERLY
-KIMBERY
-KIMBRA
-KIMI
-KIMIKO
-KINA
-KINDRA
-KING
-KIP
-KIRA
-KIRBY
-KIRK
-KIRSTEN
-KIRSTIE
-KIRSTIN
-KISHA
-KIT
-KITTIE
-KITTY
-KIYOKO
-KIZZIE
-KIZZY
-KLARA
-KOREY
-KORI
-KORTNEY
-KORY
-KOURTNEY
-KRAIG
-KRIS
-KRISHNA
-KRISSY
-KRISTA
-KRISTAL
-KRISTAN
-KRISTEEN
-KRISTEL
-KRISTEN
-KRISTI
-KRISTIAN
-KRISTIE
-KRISTIN
-KRISTINA
-KRISTINE
-KRISTLE
-KRISTOFER
-KRISTOPHER
-KRISTY
-KRISTYN
-KRYSTA
-KRYSTAL
-KRYSTEN
-KRYSTIN
-KRYSTINA
-KRYSTLE
-KRYSTYNA
-KUM
-KURT
-KURTIS
-KYLA
-KYLE
-KYLEE
-KYLIE
-KYM
-KYMBERLY
-KYOKO
-KYONG
-KYRA
-KYUNG
-LACEY
-LACHELLE
-LACI
-LACIE
-LACRESHA
-LACY
-LADAWN
-LADONNA
-LADY
-LAEL
-LAHOMA
-LAI
-LAILA
-LAINE
-LAJUANA
-LAKEESHA
-LAKEISHA
-LAKENDRA
-LAKENYA
-LAKESHA
-LAKESHIA
-LAKIA
-LAKIESHA
-LAKISHA
-LAKITA
-LALA
-LAMAR
-LAMONICA
-LAMONT
-LAN
-LANA
-LANCE
-LANDON
-LANE
-LANELL
-LANELLE
-LANETTE
-LANG
-LANI
-LANIE
-LANITA
-LANNIE
-LANNY
-LANORA
-LAQUANDA
-LAQUITA
-LARA
-LARAE
-LARAINE
-LAREE
-LARHONDA
-LARISA
-LARISSA
-LARITA
-LARONDA
-LARRAINE
-LARRY
-LARUE
-LASANDRA
-LASHANDA
-LASHANDRA
-LASHAUN
-LASHAUNDA
-LASHAWN
-LASHAWNA
-LASHAWNDA
-LASHAY
-LASHELL
-LASHON
-LASHONDA
-LASHUNDA
-LASONYA
-LATANYA
-LATARSHA
-LATASHA
-LATASHIA
-LATESHA
-LATIA
-LATICIA
-LATINA
-LATISHA
-LATONIA
-LATONYA
-LATORIA
-LATOSHA
-LATOYA
-LATOYIA
-LATRICE
-LATRICIA
-LATRINA
-LATRISHA
-LAUNA
-LAURA
-LAURALEE
-LAURAN
-LAURE
-LAUREEN
-LAUREL
-LAUREN
-LAURENA
-LAURENCE
-LAURENE
-LAURETTA
-LAURETTE
-LAURI
-LAURICE
-LAURIE
-LAURINDA
-LAURINE
-LAURYN
-LAVADA
-LAVELLE
-LAVENIA
-LAVERA
-LAVERN
-LAVERNA
-LAVERNE
-LAVETA
-LAVETTE
-LAVINA
-LAVINIA
-LAVON
-LAVONA
-LAVONDA
-LAVONE
-LAVONIA
-LAVONNA
-LAVONNE
-LAWANA
-LAWANDA
-LAWANNA
-LAWERENCE
-LAWRENCE
-LAYLA
-LAYNE
-LAZARO
-LE
-LEA
-LEAH
-LEAN
-LEANA
-LEANDRA
-LEANDRO
-LEANN
-LEANNA
-LEANNE
-LEANORA
-LEATHA
-LEATRICE
-LECIA
-LEDA
-LEE
-LEEANN
-LEEANNA
-LEEANNE
-LEENA
-LEESA
-LEIA
-LEIDA
-LEIF
-LEIGH
-LEIGHA
-LEIGHANN
-LEILA
-LEILANI
-LEISA
-LEISHA
-LEKISHA
-LELA
-LELAH
-LELAND
-LELIA
-LEMUEL
-LEN
-LENA
-LENARD
-LENITA
-LENNA
-LENNIE
-LENNY
-LENORA
-LENORE
-LEO
-LEOLA
-LEOMA
-LEON
-LEONA
-LEONARD
-LEONARDA
-LEONARDO
-LEONE
-LEONEL
-LEONIA
-LEONIDA
-LEONIE
-LEONILA
-LEONOR
-LEONORA
-LEONORE
-LEONTINE
-LEOPOLDO
-LEORA
-LEOTA
-LERA
-LEROY
-LES
-LESA
-LESHA
-LESIA
-LESLEE
-LESLEY
-LESLI
-LESLIE
-LESSIE
-LESTER
-LETA
-LETHA
-LETICIA
-LETISHA
-LETITIA
-LETTIE
-LETTY
-LEVI
-LEWIS
-LEXIE
-LEZLIE
-LI
-LIA
-LIANA
-LIANE
-LIANNE
-LIBBIE
-LIBBY
-LIBERTY
-LIBRADA
-LIDA
-LIDIA
-LIEN
-LIESELOTTE
-LIGIA
-LILA
-LILI
-LILIA
-LILIAN
-LILIANA
-LILLA
-LILLI
-LILLIA
-LILLIAM
-LILLIAN
-LILLIANA
-LILLIE
-LILLY
-LILY
-LIN
-LINA
-LINCOLN
-LINDA
-LINDSAY
-LINDSEY
-LINDSY
-LINDY
-LINETTE
-LING
-LINH
-LINN
-LINNEA
-LINNIE
-LINO
-LINSEY
-LINWOOD
-LIONEL
-LISA
-LISABETH
-LISANDRA
-LISBETH
-LISE
-LISETTE
-LISHA
-LISSA
-LISSETTE
-LITA
-LIVIA
-LIZ
-LIZA
-LIZABETH
-LIZBETH
-LIZETH
-LIZETTE
-LIZZETTE
-LIZZIE
-LLOYD
-LOAN
-LOGAN
-LOIDA
-LOIS
-LOISE
-LOLA
-LOLITA
-LOMA
-LON
-LONA
-LONDA
-LONG
-LONI
-LONNA
-LONNIE
-LONNY
-LORA
-LORAINE
-LORALEE
-LORE
-LOREAN
-LOREE
-LOREEN
-LORELEI
-LOREN
-LORENA
-LORENE
-LORENZA
-LORENZO
-LORETA
-LORETTA
-LORETTE
-LORI
-LORIA
-LORIANN
-LORIE
-LORILEE
-LORINA
-LORINDA
-LORINE
-LORIS
-LORITA
-LORNA
-LORRAINE
-LORRETTA
-LORRI
-LORRIANE
-LORRIE
-LORRINE
-LORY
-LOTTIE
-LOU
-LOUANN
-LOUANNE
-LOUELLA
-LOUETTA
-LOUIE
-LOUIS
-LOUISA
-LOUISE
-LOURA
-LOURDES
-LOURIE
-LOUVENIA
-LOVE
-LOVELLA
-LOVETTA
-LOVIE
-LOWELL
-LOYCE
-LOYD
-LU
-LUANA
-LUANN
-LUANNA
-LUANNE
-LUBA
-LUCAS
-LUCI
-LUCIA
-LUCIANA
-LUCIANO
-LUCIE
-LUCIEN
-LUCIENNE
-LUCILA
-LUCILE
-LUCILLA
-LUCILLE
-LUCINA
-LUCINDA
-LUCIO
-LUCIUS
-LUCRECIA
-LUCRETIA
-LUCY
-LUDIE
-LUDIVINA
-LUE
-LUELLA
-LUETTA
-LUIGI
-LUIS
-LUISA
-LUISE
-LUKE
-LULA
-LULU
-LUNA
-LUPE
-LUPITA
-LURA
-LURLENE
-LURLINE
-LUTHER
-LUVENIA
-LUZ
-LYDA
-LYDIA
-LYLA
-LYLE
-LYMAN
-LYN
-LYNDA
-LYNDIA
-LYNDON
-LYNDSAY
-LYNDSEY
-LYNELL
-LYNELLE
-LYNETTA
-LYNETTE
-LYNN
-LYNNA
-LYNNE
-LYNNETTE
-LYNSEY
-LYNWOOD
-MA
-MABEL
-MABELLE
-MABLE
-MAC
-MACHELLE
-MACIE
-MACK
-MACKENZIE
-MACY
-MADALENE
-MADALINE
-MADALYN
-MADDIE
-MADELAINE
-MADELEINE
-MADELENE
-MADELINE
-MADELYN
-MADGE
-MADIE
-MADISON
-MADLYN
-MADONNA
-MAE
-MAEGAN
-MAFALDA
-MAGALI
-MAGALY
-MAGAN
-MAGARET
-MAGDA
-MAGDALEN
-MAGDALENA
-MAGDALENE
-MAGEN
-MAGGIE
-MAGNOLIA
-MAHALIA
-MAI
-MAIA
-MAIDA
-MAILE
-MAIRA
-MAIRE
-MAISHA
-MAISIE
-MAJOR
-MAJORIE
-MAKEDA
-MALCOLM
-MALCOM
-MALENA
-MALIA
-MALIK
-MALIKA
-MALINDA
-MALISA
-MALISSA
-MALKA
-MALLIE
-MALLORY
-MALORIE
-MALVINA
-MAMIE
-MAMMIE
-MAN
-MANA
-MANDA
-MANDI
-MANDIE
-MANDY
-MANIE
-MANUAL
-MANUEL
-MANUELA
-MANY
-MAO
-MAPLE
-MARA
-MARAGARET
-MARAGRET
-MARANDA
-MARC
-MARCEL
-MARCELA
-MARCELENE
-MARCELINA
-MARCELINE
-MARCELINO
-MARCELL
-MARCELLA
-MARCELLE
-MARCELLUS
-MARCELO
-MARCENE
-MARCHELLE
-MARCI
-MARCIA
-MARCIE
-MARCO
-MARCOS
-MARCUS
-MARCY
-MARDELL
-MAREN
-MARG
-MARGARET
-MARGARETA
-MARGARETE
-MARGARETT
-MARGARETTA
-MARGARETTE
-MARGARITA
-MARGARITE
-MARGARITO
-MARGART
-MARGE
-MARGENE
-MARGERET
-MARGERT
-MARGERY
-MARGET
-MARGHERITA
-MARGIE
-MARGIT
-MARGO
-MARGORIE
-MARGOT
-MARGRET
-MARGRETT
-MARGUERITA
-MARGUERITE
-MARGURITE
-MARGY
-MARHTA
-MARI
-MARIA
-MARIAH
-MARIAM
-MARIAN
-MARIANA
-MARIANELA
-MARIANN
-MARIANNA
-MARIANNE
-MARIANO
-MARIBEL
-MARIBETH
-MARICA
-MARICELA
-MARICRUZ
-MARIE
-MARIEL
-MARIELA
-MARIELLA
-MARIELLE
-MARIETTA
-MARIETTE
-MARIKO
-MARILEE
-MARILOU
-MARILU
-MARILYN
-MARILYNN
-MARIN
-MARINA
-MARINDA
-MARINE
-MARIO
-MARION
-MARIS
-MARISA
-MARISELA
-MARISHA
-MARISOL
-MARISSA
-MARITA
-MARITZA
-MARIVEL
-MARJORIE
-MARJORY
-MARK
-MARKETTA
-MARKITA
-MARKUS
-MARLA
-MARLANA
-MARLEEN
-MARLEN
-MARLENA
-MARLENE
-MARLIN
-MARLINE
-MARLO
-MARLON
-MARLYN
-MARLYS
-MARNA
-MARNI
-MARNIE
-MARQUERITE
-MARQUETTA
-MARQUIS
-MARQUITA
-MARQUITTA
-MARRY
-MARSHA
-MARSHALL
-MARTA
-MARTH
-MARTHA
-MARTI
-MARTIN
-MARTINA
-MARTINE
-MARTY
-MARVA
-MARVEL
-MARVELLA
-MARVIN
-MARVIS
-MARX
-MARY
-MARYA
-MARYALICE
-MARYAM
-MARYANN
-MARYANNA
-MARYANNE
-MARYBELLE
-MARYBETH
-MARYELLEN
-MARYETTA
-MARYJANE
-MARYJO
-MARYLAND
-MARYLEE
-MARYLIN
-MARYLN
-MARYLOU
-MARYLOUISE
-MARYLYN
-MARYLYNN
-MARYROSE
-MASAKO
-MASON
-MATHA
-MATHEW
-MATHILDA
-MATHILDE
-MATILDA
-MATILDE
-MATT
-MATTHEW
-MATTIE
-MAUD
-MAUDE
-MAUDIE
-MAURA
-MAUREEN
-MAURICE
-MAURICIO
-MAURINE
-MAURITA
-MAURO
-MAVIS
-MAX
-MAXIE
-MAXIMA
-MAXIMINA
-MAXIMO
-MAXINE
-MAXWELL
-MAY
-MAYA
-MAYBELL
-MAYBELLE
-MAYE
-MAYME
-MAYNARD
-MAYOLA
-MAYRA
-MAZIE
-MCKENZIE
-MCKINLEY
-MEAGAN
-MEAGHAN
-MECHELLE
-MEDA
-MEE
-MEG
-MEGAN
-MEGGAN
-MEGHAN
-MEGHANN
-MEI
-MEL
-MELAINE
-MELANI
-MELANIA
-MELANIE
-MELANY
-MELBA
-MELDA
-MELIA
-MELIDA
-MELINA
-MELINDA
-MELISA
-MELISSA
-MELISSIA
-MELITA
-MELLIE
-MELLISA
-MELLISSA
-MELODEE
-MELODI
-MELODIE
-MELODY
-MELONIE
-MELONY
-MELVA
-MELVIN
-MELVINA
-MELYNDA
-MENDY
-MERCEDES
-MERCEDEZ
-MERCY
-MEREDITH
-MERI
-MERIDETH
-MERIDITH
-MERILYN
-MERISSA
-MERLE
-MERLENE
-MERLIN
-MERLYN
-MERNA
-MERRI
-MERRIE
-MERRILEE
-MERRILL
-MERRY
-MERTIE
-MERVIN
-MERYL
-META
-MI
-MIA
-MICA
-MICAELA
-MICAH
-MICHA
-MICHAEL
-MICHAELA
-MICHAELE
-MICHAL
-MICHALE
-MICHEAL
-MICHEL
-MICHELE
-MICHELINA
-MICHELINE
-MICHELL
-MICHELLE
-MICHIKO
-MICKEY
-MICKI
-MICKIE
-MIESHA
-MIGDALIA
-MIGNON
-MIGUEL
-MIGUELINA
-MIKA
-MIKAELA
-MIKE
-MIKEL
-MIKI
-MIKKI
-MILA
-MILAGRO
-MILAGROS
-MILAN
-MILDA
-MILDRED
-MILES
-MILFORD
-MILISSA
-MILLARD
-MILLICENT
-MILLIE
-MILLY
-MILO
-MILTON
-MIMI
-MIN
-MINA
-MINDA
-MINDI
-MINDY
-MINERVA
-MING
-MINH
-MINNA
-MINNIE
-MINTA
-MIQUEL
-MIRA
-MIRANDA
-MIREILLE
-MIRELLA
-MIREYA
-MIRIAM
-MIRIAN
-MIRNA
-MIRTA
-MIRTHA
-MISHA
-MISS
-MISSY
-MISTI
-MISTIE
-MISTY
-MITCH
-MITCHEL
-MITCHELL
-MITSUE
-MITSUKO
-MITTIE
-MITZI
-MITZIE
-MIYOKO
-MODESTA
-MODESTO
-MOHAMED
-MOHAMMAD
-MOHAMMED
-MOIRA
-MOISES
-MOLLIE
-MOLLY
-MONA
-MONET
-MONICA
-MONIKA
-MONIQUE
-MONNIE
-MONROE
-MONSERRATE
-MONTE
-MONTY
-MOON
-MORA
-MORGAN
-MORIAH
-MORRIS
-MORTON
-MOSE
-MOSES
-MOSHE
-MOZELL
-MOZELLA
-MOZELLE
-MUI
-MUOI
-MURIEL
-MURRAY
-MY
-MYESHA
-MYLES
-MYONG
-MYRA
-MYRIAM
-MYRL
-MYRLE
-MYRNA
-MYRON
-MYRTA
-MYRTICE
-MYRTIE
-MYRTIS
-MYRTLE
-MYUNG
-NA
-NADA
-NADENE
-NADIA
-NADINE
-NAIDA
-NAKESHA
-NAKIA
-NAKISHA
-NAKITA
-NAM
-NAN
-NANA
-NANCEE
-NANCEY
-NANCI
-NANCIE
-NANCY
-NANETTE
-NANNETTE
-NANNIE
-NAOMA
-NAOMI
-NAPOLEON
-NARCISA
-NATACHA
-NATALIA
-NATALIE
-NATALYA
-NATASHA
-NATASHIA
-NATHALIE
-NATHAN
-NATHANAEL
-NATHANIAL
-NATHANIEL
-NATISHA
-NATIVIDAD
-NATOSHA
-NEAL
-NECOLE
-NED
-NEDA
-NEDRA
-NEELY
-NEIDA
-NEIL
-NELDA
-NELIA
-NELIDA
-NELL
-NELLA
-NELLE
-NELLIE
-NELLY
-NELSON
-NENA
-NENITA
-NEOMA
-NEOMI
-NEREIDA
-NERISSA
-NERY
-NESTOR
-NETA
-NETTIE
-NEVA
-NEVADA
-NEVILLE
-NEWTON
-NGA
-NGAN
-NGOC
-NGUYET
-NIA
-NICHELLE
-NICHOL
-NICHOLAS
-NICHOLE
-NICHOLLE
-NICK
-NICKI
-NICKIE
-NICKOLAS
-NICKOLE
-NICKY
-NICOL
-NICOLA
-NICOLAS
-NICOLASA
-NICOLE
-NICOLETTE
-NICOLLE
-NIDA
-NIDIA
-NIESHA
-NIEVES
-NIGEL
-NIKI
-NIKIA
-NIKITA
-NIKKI
-NIKOLE
-NILA
-NILDA
-NILSA
-NINA
-NINFA
-NISHA
-NITA
-NOAH
-NOBLE
-NOBUKO
-NOE
-NOEL
-NOELIA
-NOELLA
-NOELLE
-NOEMI
-NOHEMI
-NOLA
-NOLAN
-NOMA
-NONA
-NORA
-NORAH
-NORBERT
-NORBERTO
-NOREEN
-NORENE
-NORIKO
-NORINE
-NORMA
-NORMAN
-NORMAND
-NORRIS
-NOVA
-NOVELLA
-NU
-NUBIA
-NUMBERS
-NYDIA
-NYLA
-OBDULIA
-OCIE
-OCTAVIA
-OCTAVIO
-ODA
-ODELIA
-ODELL
-ODESSA
-ODETTE
-ODILIA
-ODIS
-OFELIA
-OK
-OLA
-OLEN
-OLENE
-OLETA
-OLEVIA
-OLGA
-OLIMPIA
-OLIN
-OLINDA
-OLIVA
-OLIVE
-OLIVER
-OLIVIA
-OLLIE
-OLYMPIA
-OMA
-OMAR
-OMEGA
-OMER
-ONA
-ONEIDA
-ONIE
-ONITA
-OPAL
-OPHELIA
-ORA
-ORALEE
-ORALIA
-OREN
-ORETHA
-ORLANDO
-ORPHA
-ORVAL
-ORVILLE
-OSCAR
-OSSIE
-OSVALDO
-OSWALDO
-OTELIA
-OTHA
-OTILIA
-OTIS
-OTTO
-OUIDA
-OWEN
-OZELL
-OZELLA
-OZIE
-PA
-PABLO
-PAGE
-PAIGE
-PALMA
-PALMER
-PALMIRA
-PAM
-PAMALA
-PAMELA
-PAMELIA
-PAMELLA
-PAMILA
-PAMULA
-PANDORA
-PANSY
-PAOLA
-PARIS
-PARKER
-PARTHENIA
-PARTICIA
-PASQUALE
-PASTY
-PAT
-PATIENCE
-PATRIA
-PATRICA
-PATRICE
-PATRICIA
-PATRICK
-PATRINA
-PATSY
-PATTI
-PATTIE
-PATTY
-PAUL
-PAULA
-PAULENE
-PAULETTA
-PAULETTE
-PAULINA
-PAULINE
-PAULITA
-PAZ
-PEARL
-PEARLE
-PEARLENE
-PEARLIE
-PEARLINE
-PEARLY
-PEDRO
-PEG
-PEGGIE
-PEGGY
-PEI
-PENELOPE
-PENNEY
-PENNI
-PENNIE
-PENNY
-PERCY
-PERLA
-PERRY
-PETE
-PETER
-PETRA
-PETRINA
-PETRONILA
-PHEBE
-PHIL
-PHILIP
-PHILLIP
-PHILLIS
-PHILOMENA
-PHOEBE
-PHUNG
-PHUONG
-PHYLICIA
-PHYLIS
-PHYLISS
-PHYLLIS
-PIA
-PIEDAD
-PIERRE
-PILAR
-PING
-PINKIE
-PIPER
-POK
-POLLY
-PORFIRIO
-PORSCHE
-PORSHA
-PORTER
-PORTIA
-PRECIOUS
-PRESTON
-PRICILLA
-PRINCE
-PRINCESS
-PRISCILA
-PRISCILLA
-PROVIDENCIA
-PRUDENCE
-PURA
-QIANA
-QUEEN
-QUEENIE
-QUENTIN
-QUIANA
-QUINCY
-QUINN
-QUINTIN
-QUINTON
-QUYEN
-RACHAEL
-RACHAL
-RACHEAL
-RACHEL
-RACHELE
-RACHELL
-RACHELLE
-RACQUEL
-RAE
-RAEANN
-RAELENE
-RAFAEL
-RAFAELA
-RAGUEL
-RAINA
-RAISA
-RALEIGH
-RALPH
-RAMIRO
-RAMON
-RAMONA
-RAMONITA
-RANA
-RANAE
-RANDA
-RANDAL
-RANDALL
-RANDEE
-RANDELL
-RANDI
-RANDOLPH
-RANDY
-RANEE
-RAPHAEL
-RAQUEL
-RASHAD
-RASHEEDA
-RASHIDA
-RAUL
-RAVEN
-RAY
-RAYE
-RAYFORD
-RAYLENE
-RAYMON
-RAYMOND
-RAYMONDE
-RAYMUNDO
-RAYNA
-REA
-REAGAN
-REANNA
-REATHA
-REBA
-REBBECA
-REBBECCA
-REBECA
-REBECCA
-REBECKA
-REBEKAH
-REDA
-REED
-REENA
-REFUGIA
-REFUGIO
-REGAN
-REGENA
-REGENIA
-REGGIE
-REGINA
-REGINALD
-REGINE
-REGINIA
-REID
-REIKO
-REINA
-REINALDO
-REITA
-REMA
-REMEDIOS
-REMONA
-RENA
-RENAE
-RENALDO
-RENATA
-RENATE
-RENATO
-RENAY
-RENDA
-RENE
-RENEA
-RENEE
-RENETTA
-RENITA
-RENNA
-RESSIE
-RETA
-RETHA
-RETTA
-REUBEN
-REVA
-REX
-REY
-REYES
-REYNA
-REYNALDA
-REYNALDO
-RHEA
-RHEBA
-RHETT
-RHIANNON
-RHODA
-RHONA
-RHONDA
-RIA
-RICARDA
-RICARDO
-RICH
-RICHARD
-RICHELLE
-RICHIE
-RICK
-RICKEY
-RICKI
-RICKIE
-RICKY
-RICO
-RIGOBERTO
-RIKKI
-RILEY
-RIMA
-RINA
-RISA
-RITA
-RIVA
-RIVKA
-ROB
-ROBBI
-ROBBIE
-ROBBIN
-ROBBY
-ROBBYN
-ROBENA
-ROBERT
-ROBERTA
-ROBERTO
-ROBIN
-ROBT
-ROBYN
-ROCCO
-ROCHEL
-ROCHELL
-ROCHELLE
-ROCIO
-ROCKY
-ROD
-RODERICK
-RODGER
-RODNEY
-RODOLFO
-RODRICK
-RODRIGO
-ROGELIO
-ROGER
-ROLAND
-ROLANDA
-ROLANDE
-ROLANDO
-ROLF
-ROLLAND
-ROMA
-ROMAINE
-ROMAN
-ROMANA
-ROMELIA
-ROMEO
-ROMONA
-RON
-RONA
-RONALD
-RONDA
-RONI
-RONNA
-RONNI
-RONNIE
-RONNY
-ROOSEVELT
-RORY
-ROSA
-ROSALBA
-ROSALEE
-ROSALIA
-ROSALIE
-ROSALINA
-ROSALIND
-ROSALINDA
-ROSALINE
-ROSALVA
-ROSALYN
-ROSAMARIA
-ROSAMOND
-ROSANA
-ROSANN
-ROSANNA
-ROSANNE
-ROSARIA
-ROSARIO
-ROSAURA
-ROSCOE
-ROSE
-ROSEANN
-ROSEANNA
-ROSEANNE
-ROSELEE
-ROSELIA
-ROSELINE
-ROSELLA
-ROSELLE
-ROSELYN
-ROSEMARIE
-ROSEMARY
-ROSENA
-ROSENDA
-ROSENDO
-ROSETTA
-ROSETTE
-ROSIA
-ROSIE
-ROSINA
-ROSIO
-ROSITA
-ROSLYN
-ROSS
-ROSSANA
-ROSSIE
-ROSY
-ROWENA
-ROXANA
-ROXANE
-ROXANN
-ROXANNA
-ROXANNE
-ROXIE
-ROXY
-ROY
-ROYAL
-ROYCE
-ROZANNE
-ROZELLA
-RUBEN
-RUBI
-RUBIE
-RUBIN
-RUBY
-RUBYE
-RUDOLF
-RUDOLPH
-RUDY
-RUEBEN
-RUFINA
-RUFUS
-RUPERT
-RUSS
-RUSSEL
-RUSSELL
-RUSTY
-RUTH
-RUTHA
-RUTHANN
-RUTHANNE
-RUTHE
-RUTHIE
-RYAN
-RYANN
-SABINA
-SABINE
-SABRA
-SABRINA
-SACHA
-SACHIKO
-SADE
-SADIE
-SADYE
-SAGE
-SAL
-SALENA
-SALINA
-SALLEY
-SALLIE
-SALLY
-SALOME
-SALVADOR
-SALVATORE
-SAM
-SAMANTHA
-SAMARA
-SAMATHA
-SAMELLA
-SAMIRA
-SAMMIE
-SAMMY
-SAMUAL
-SAMUEL
-SANA
-SANDA
-SANDEE
-SANDI
-SANDIE
-SANDRA
-SANDY
-SANFORD
-SANG
-SANJUANA
-SANJUANITA
-SANORA
-SANTA
-SANTANA
-SANTIAGO
-SANTINA
-SANTO
-SANTOS
-SARA
-SARAH
-SARAI
-SARAN
-SARI
-SARINA
-SARITA
-SASHA
-SATURNINA
-SAU
-SAUL
-SAUNDRA
-SAVANNA
-SAVANNAH
-SCARLET
-SCARLETT
-SCOT
-SCOTT
-SCOTTIE
-SCOTTY
-SEAN
-SEASON
-SEBASTIAN
-SEBRINA
-SEE
-SEEMA
-SELENA
-SELENE
-SELINA
-SELMA
-SENA
-SENAIDA
-SEPTEMBER
-SERAFINA
-SERENA
-SERGIO
-SERINA
-SERITA
-SETH
-SETSUKO
-SEYMOUR
-SHA
-SHAD
-SHAE
-SHAINA
-SHAKIA
-SHAKIRA
-SHAKITA
-SHALA
-SHALANDA
-SHALON
-SHALONDA
-SHAMEKA
-SHAMIKA
-SHAN
-SHANA
-SHANAE
-SHANDA
-SHANDI
-SHANDRA
-SHANE
-SHANEKA
-SHANEL
-SHANELL
-SHANELLE
-SHANI
-SHANICE
-SHANIKA
-SHANIQUA
-SHANITA
-SHANNA
-SHANNAN
-SHANNON
-SHANON
-SHANTA
-SHANTAE
-SHANTAY
-SHANTE
-SHANTEL
-SHANTELL
-SHANTELLE
-SHANTI
-SHAQUANA
-SHAQUITA
-SHARA
-SHARAN
-SHARDA
-SHAREE
-SHARELL
-SHAREN
-SHARI
-SHARICE
-SHARIE
-SHARIKA
-SHARILYN
-SHARITA
-SHARLA
-SHARLEEN
-SHARLENE
-SHARMAINE
-SHAROLYN
-SHARON
-SHARONDA
-SHARRI
-SHARRON
-SHARYL
-SHARYN
-SHASTA
-SHAUN
-SHAUNA
-SHAUNDA
-SHAUNNA
-SHAUNTA
-SHAUNTE
-SHAVON
-SHAVONDA
-SHAVONNE
-SHAWANA
-SHAWANDA
-SHAWANNA
-SHAWN
-SHAWNA
-SHAWNDA
-SHAWNEE
-SHAWNNA
-SHAWNTA
-SHAY
-SHAYLA
-SHAYNA
-SHAYNE
-SHEA
-SHEBA
-SHEENA
-SHEILA
-SHEILAH
-SHELA
-SHELBA
-SHELBY
-SHELDON
-SHELIA
-SHELLA
-SHELLEY
-SHELLI
-SHELLIE
-SHELLY
-SHELTON
-SHEMEKA
-SHEMIKA
-SHENA
-SHENIKA
-SHENITA
-SHENNA
-SHERA
-SHEREE
-SHERELL
-SHERI
-SHERICE
-SHERIDAN
-SHERIE
-SHERIKA
-SHERILL
-SHERILYN
-SHERISE
-SHERITA
-SHERLENE
-SHERLEY
-SHERLY
-SHERLYN
-SHERMAN
-SHERON
-SHERRELL
-SHERRI
-SHERRIE
-SHERRIL
-SHERRILL
-SHERRON
-SHERRY
-SHERRYL
-SHERWOOD
-SHERY
-SHERYL
-SHERYLL
-SHIELA
-SHILA
-SHILOH
-SHIN
-SHIRA
-SHIRELY
-SHIRL
-SHIRLEE
-SHIRLEEN
-SHIRLENE
-SHIRLEY
-SHIRLY
-SHIZUE
-SHIZUKO
-SHON
-SHONA
-SHONDA
-SHONDRA
-SHONNA
-SHONTA
-SHOSHANA
-SHU
-SHYLA
-SIBYL
-SID
-SIDNEY
-SIERRA
-SIGNE
-SIGRID
-SILAS
-SILVA
-SILVANA
-SILVIA
-SIMA
-SIMON
-SIMONA
-SIMONE
-SIMONNE
-SINA
-SINDY
-SIOBHAN
-SIRENA
-SIU
-SIXTA
-SKYE
-SLYVIA
-SO
-SOCORRO
-SOFIA
-SOILA
-SOL
-SOLANGE
-SOLEDAD
-SOLOMON
-SOMER
-SOMMER
-SON
-SONA
-SONDRA
-SONG
-SONIA
-SONJA
-SONNY
-SONYA
-SOO
-SOOK
-SOON
-SOPHIA
-SOPHIE
-SORAYA
-SPARKLE
-SPENCER
-SPRING
-STACEE
-STACEY
-STACI
-STACIA
-STACIE
-STACY
-STAN
-STANFORD
-STANLEY
-STANTON
-STAR
-STARLA
-STARR
-STASIA
-STEFAN
-STEFANI
-STEFANIA
-STEFANIE
-STEFANY
-STEFFANIE
-STELLA
-STEPANIE
-STEPHAINE
-STEPHAN
-STEPHANE
-STEPHANI
-STEPHANIA
-STEPHANIE
-STEPHANY
-STEPHEN
-STEPHENIE
-STEPHINE
-STEPHNIE
-STERLING
-STEVE
-STEVEN
-STEVIE
-STEWART
-STORMY
-STUART
-SU
-SUANNE
-SUDIE
-SUE
-SUEANN
-SUELLEN
-SUK
-SULEMA
-SUMIKO
-SUMMER
-SUN
-SUNDAY
-SUNG
-SUNNI
-SUNNY
-SUNSHINE
-SUSAN
-SUSANA
-SUSANN
-SUSANNA
-SUSANNAH
-SUSANNE
-SUSIE
-SUSY
-SUZAN
-SUZANN
-SUZANNA
-SUZANNE
-SUZETTE
-SUZI
-SUZIE
-SUZY
-SVETLANA
-SYBIL
-SYBLE
-SYDNEY
-SYLVESTER
-SYLVIA
-SYLVIE
-SYNTHIA
-SYREETA
-TA
-TABATHA
-TABETHA
-TABITHA
-TAD
-TAI
-TAINA
-TAISHA
-TAJUANA
-TAKAKO
-TAKISHA
-TALIA
-TALISHA
-TALITHA
-TAM
-TAMA
-TAMALA
-TAMAR
-TAMARA
-TAMATHA
-TAMBRA
-TAMEIKA
-TAMEKA
-TAMEKIA
-TAMELA
-TAMERA
-TAMESHA
-TAMI
-TAMICA
-TAMIE
-TAMIKA
-TAMIKO
-TAMISHA
-TAMMARA
-TAMMERA
-TAMMI
-TAMMIE
-TAMMY
-TAMRA
-TANA
-TANDRA
-TANDY
-TANEKA
-TANESHA
-TANGELA
-TANIA
-TANIKA
-TANISHA
-TANJA
-TANNA
-TANNER
-TANYA
-TARA
-TARAH
-TAREN
-TARI
-TARRA
-TARSHA
-TARYN
-TASHA
-TASHIA
-TASHINA
-TASIA
-TATIANA
-TATUM
-TATYANA
-TAUNYA
-TAWANA
-TAWANDA
-TAWANNA
-TAWNA
-TAWNY
-TAWNYA
-TAYLOR
-TAYNA
-TED
-TEDDY
-TEENA
-TEGAN
-TEISHA
-TELMA
-TEMEKA
-TEMIKA
-TEMPIE
-TEMPLE
-TENA
-TENESHA
-TENISHA
-TENNIE
-TENNILLE
-TEODORA
-TEODORO
-TEOFILA
-TEQUILA
-TERA
-TEREASA
-TERENCE
-TERESA
-TERESE
-TERESIA
-TERESITA
-TERESSA
-TERI
-TERICA
-TERINA
-TERISA
-TERRA
-TERRANCE
-TERRELL
-TERRENCE
-TERRESA
-TERRI
-TERRIE
-TERRILYN
-TERRY
-TESHA
-TESS
-TESSA
-TESSIE
-THAD
-THADDEUS
-THALIA
-THANH
-THAO
-THEA
-THEDA
-THELMA
-THEO
-THEODORA
-THEODORE
-THEOLA
-THERESA
-THERESE
-THERESIA
-THERESSA
-THERON
-THERSA
-THI
-THOMAS
-THOMASENA
-THOMASINA
-THOMASINE
-THORA
-THRESA
-THU
-THURMAN
-THUY
-TIA
-TIANA
-TIANNA
-TIARA
-TIEN
-TIERA
-TIERRA
-TIESHA
-TIFANY
-TIFFANEY
-TIFFANI
-TIFFANIE
-TIFFANY
-TIFFINY
-TIJUANA
-TILDA
-TILLIE
-TIM
-TIMIKA
-TIMMY
-TIMOTHY
-TINA
-TINISHA
-TINY
-TISA
-TISH
-TISHA
-TITUS
-TOBI
-TOBIAS
-TOBIE
-TOBY
-TOCCARA
-TOD
-TODD
-TOI
-TOM
-TOMAS
-TOMASA
-TOMEKA
-TOMI
-TOMIKA
-TOMIKO
-TOMMIE
-TOMMY
-TOMMYE
-TOMOKO
-TONA
-TONDA
-TONETTE
-TONEY
-TONI
-TONIA
-TONIE
-TONISHA
-TONITA
-TONJA
-TONY
-TONYA
-TORA
-TORI
-TORIE
-TORRI
-TORRIE
-TORY
-TOSHA
-TOSHIA
-TOSHIKO
-TOVA
-TOWANDA
-TOYA
-TRACEE
-TRACEY
-TRACI
-TRACIE
-TRACY
-TRAN
-TRANG
-TRAVIS
-TREASA
-TREENA
-TRENA
-TRENT
-TRENTON
-TRESA
-TRESSA
-TRESSIE
-TREVA
-TREVOR
-TREY
-TRICIA
-TRINA
-TRINH
-TRINIDAD
-TRINITY
-TRISH
-TRISHA
-TRISTA
-TRISTAN
-TROY
-TRUDI
-TRUDIE
-TRUDY
-TRULA
-TRUMAN
-TU
-TUAN
-TULA
-TUYET
-TWANA
-TWANDA
-TWANNA
-TWILA
-TWYLA
-TY
-TYESHA
-TYISHA
-TYLER
-TYNISHA
-TYRA
-TYREE
-TYRELL
-TYRON
-TYRONE
-TYSON
-ULA
-ULRIKE
-ULYSSES
-UN
-UNA
-URSULA
-USHA
-UTE
-VADA
-VAL
-VALARIE
-VALDA
-VALENCIA
-VALENE
-VALENTIN
-VALENTINA
-VALENTINE
-VALERI
-VALERIA
-VALERIE
-VALERY
-VALLIE
-VALORIE
-VALRIE
-VAN
-VANCE
-VANDA
-VANESA
-VANESSA
-VANETTA
-VANIA
-VANITA
-VANNA
-VANNESA
-VANNESSA
-VASHTI
-VASILIKI
-VAUGHN
-VEDA
-VELDA
-VELIA
-VELLA
-VELMA
-VELVA
-VELVET
-VENA
-VENESSA
-VENETTA
-VENICE
-VENITA
-VENNIE
-VENUS
-VEOLA
-VERA
-VERDA
-VERDELL
-VERDIE
-VERENA
-VERGIE
-VERLA
-VERLENE
-VERLIE
-VERLINE
-VERN
-VERNA
-VERNELL
-VERNETTA
-VERNIA
-VERNICE
-VERNIE
-VERNITA
-VERNON
-VERONA
-VERONICA
-VERONIKA
-VERONIQUE
-VERSIE
-VERTIE
-VESTA
-VETA
-VI
-VICENTA
-VICENTE
-VICKEY
-VICKI
-VICKIE
-VICKY
-VICTOR
-VICTORIA
-VICTORINA
-VIDA
-VIKI
-VIKKI
-VILMA
-VINA
-VINCE
-VINCENT
-VINCENZA
-VINCENZO
-VINITA
-VINNIE
-VIOLA
-VIOLET
-VIOLETA
-VIOLETTE
-VIRGEN
-VIRGIE
-VIRGIL
-VIRGILIO
-VIRGINA
-VIRGINIA
-VITA
-VITO
-VIVA
-VIVAN
-VIVIAN
-VIVIANA
-VIVIEN
-VIVIENNE
-VON
-VONCILE
-VONDA
-VONNIE
-WADE
-WAI
-WALDO
-WALKER
-WALLACE
-WALLY
-WALTER
-WALTON
-WALTRAUD
-WAN
-WANDA
-WANETA
-WANETTA
-WANITA
-WARD
-WARNER
-WARREN
-WAVA
-WAYLON
-WAYNE
-WEI
-WELDON
-WEN
-WENDELL
-WENDI
-WENDIE
-WENDOLYN
-WENDY
-WENONA
-WERNER
-WES
-WESLEY
-WESTON
-WHITLEY
-WHITNEY
-WILBER
-WILBERT
-WILBUR
-WILBURN
-WILDA
-WILEY
-WILFORD
-WILFRED
-WILFREDO
-WILHELMINA
-WILHEMINA
-WILL
-WILLA
-WILLARD
-WILLENA
-WILLENE
-WILLETTA
-WILLETTE
-WILLIA
-WILLIAM
-WILLIAMS
-WILLIAN
-WILLIE
-WILLIEMAE
-WILLIS
-WILLODEAN
-WILLOW
-WILLY
-WILMA
-WILMER
-WILSON
-WILTON
-WINDY
-WINFORD
-WINFRED
-WINIFRED
-WINNIE
-WINNIFRED
-WINONA
-WINSTON
-WINTER
-WM
-WONDA
-WOODROW
-WYATT
-WYNELL
-WYNONA
-XAVIER
-XENIA
-XIAO
-XIOMARA
-XOCHITL
-XUAN
-YADIRA
-YAEKO
-YAEL
-YAHAIRA
-YAJAIRA
-YAN
-YANG
-YANIRA
-YASMIN
-YASMINE
-YASUKO
-YEE
-YELENA
-YEN
-YER
-YESENIA
-YESSENIA
-YETTA
-YEVETTE
-YI
-YING
-YOKO
-YOLANDA
-YOLANDE
-YOLANDO
-YOLONDA
-YON
-YONG
-YOSHIE
-YOSHIKO
-YOULANDA
-YOUNG
-YU
-YUETTE
-YUK
-YUKI
-YUKIKO
-YUKO
-YULANDA
-YUN
-YUNG
-YUONNE
-YURI
-YURIKO
-YVETTE
-YVONE
-YVONNE
-ZACHARIAH
-ZACHARY
-ZACHERY
-ZACK
-ZACKARY
-ZADA
-ZAIDA
-ZANA
-ZANDRA
-ZANE
-ZELDA
-ZELLA
-ZELMA
-ZENA
-ZENAIDA
-ZENIA
-ZENOBIA
-ZETTA
-ZINA
-ZITA
-ZOE
-ZOFIA
-ZOILA
-ZOLA
-ZONA
-ZONIA
-ZORA
-ZORAIDA
-ZULA
-ZULEMA
-ZULMA
diff --git a/src/projecteuler/023.py b/src/projecteuler/023.py
deleted file mode 100644
index d109302..0000000
--- a/src/projecteuler/023.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import math
-
-limit = 28123
-numbers = set()
-
-def abundant(n):
- divisors = set()
- divisors.add(1)
- for i in xrange(2, int(math.sqrt(n))+1):
- if n % i == 0:
- divisors.add(i)
- divisors.add(n/i)
-
- if sum(divisors) > n:
- return True
- else:
- return False
-
-def sum_abundant(n):
- for i in numbers:
- if n-i in numbers:
- return True
- return False
-
-
-for n in xrange(2, limit+1):
- if abundant(n):
- numbers.add(n)
-
-sum = 0
-
-for n in xrange(limit+1):
- if not sum_abundant(n):
- sum += n
-
-print sum
-
diff --git a/src/projecteuler/024.py b/src/projecteuler/024.py
deleted file mode 100644
index 47546a5..0000000
--- a/src/projecteuler/024.py
+++ /dev/null
@@ -1,24 +0,0 @@
-
-import sys
-
-digits = [ x for x in range(0, 10) ]
-
-limit = 1000000
-
-count = 0
-
-def permutate(start, end):
- global permutations, count
- if len(end) == 1:
- count += 1
- if count == limit:
- print start+end
- sys.exit(0)
- return
- for i in range(0, len(end)):
- s = start + [end[i]]
- e = end[:i] + end[i+1:]
- permutate(s, e)
-
-permutate([], digits)
-
diff --git a/src/projecteuler/025.py b/src/projecteuler/025.py
deleted file mode 100644
index b69bddc..0000000
--- a/src/projecteuler/025.py
+++ /dev/null
@@ -1,19 +0,0 @@
-import math
-
-def digits(number):
- return math.ceil(math.log10(number+1))
-
-prev = 1
-next = 1
-count = 2
-
-while(True):
- if(digits(next) >= 1000):
- break
- tmp = next
- next += prev
- prev = tmp
- count += 1
-
-print count
-
diff --git a/src/projecteuler/026.py b/src/projecteuler/026.py
deleted file mode 100644
index 0ddd85a..0000000
--- a/src/projecteuler/026.py
+++ /dev/null
@@ -1,33 +0,0 @@
-
-def get_cycle(d):
- remainders = []
- x = 1
- while x > 0:
- if x < d:
- x *= 10
- continue
-
- z = x / d
- x = (x % d) * 10
- if x in remainders: # cycle detected
- pos = 0
- for i in range(len(remainders)):
- if remainders[i] == x:
- return len(remainders) - i
- break
- remainders += [x]
-
- return 0 # no cycle
-
-
-max_remainder = 0
-result = 0
-
-for i in range(1, 1000):
- r = get_cycle(i)
- if r > max_remainder:
- max_remainder = r
- result = i
-
-print result
-
diff --git a/src/projecteuler/027.py b/src/projecteuler/027.py
deleted file mode 100644
index 563d6af..0000000
--- a/src/projecteuler/027.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from common import sieve
-
-primes = sieve(10000).primes()
-
-def count_primes(a, b):
- n = 0
- while True:
- p = n**2 + a*n + b
- if p not in primes:
- break
- n += 1
- return n
-
-max_count = 0
-max_pair = (0, 0)
-
-for a in xrange(-999, 1000):
- for b in xrange(-999, 1000):
- c = count_primes(a, b)
- if c > max_count:
- max_count = c
- max_pair = (a, b)
-
-print max_pair[0] * max_pair[1]
-
diff --git a/src/projecteuler/028.py b/src/projecteuler/028.py
deleted file mode 100644
index 3ec1ff5..0000000
--- a/src/projecteuler/028.py
+++ /dev/null
@@ -1,13 +0,0 @@
-
-width = 1001
-max_level = (width-1)/2
-
-last = sum = 1
-
-for level in range(1, max_level+1):
- add = 2*level
- sum += (last+add) + (last+2*add) + (last+3*add) + (last+4*add)
- last = last+4*add
-
-print sum
-
diff --git a/src/projecteuler/029.py b/src/projecteuler/029.py
deleted file mode 100644
index 0740911..0000000
--- a/src/projecteuler/029.py
+++ /dev/null
@@ -1,9 +0,0 @@
-
-x = []
-
-for i in range(2, 101):
- for j in range(2, 101):
- x.append(i**j)
-
-print len(set(x))
-
diff --git a/src/projecteuler/030.c b/src/projecteuler/030.c
deleted file mode 100644
index 5d044e9..0000000
--- a/src/projecteuler/030.c
+++ /dev/null
@@ -1,41 +0,0 @@
-
-int digit_sum(int number)
-{
- int sum = 0;
- int digit;
- int n = number;
-
- while(n > 0)
- {
- digit = n % 10;
- sum += digit*digit*digit*digit*digit;
- n = n / 10;
- }
-
- if(number == sum)
- return 1;
- else
- return 0;
-}
-
-int main()
-{
- int start = 10;
- int end = 354294; // 9^5 * 6
- int sum = 0;
- int i;
-
- for(i=start; i<end; i++)
- {
- if(digit_sum(i))
- {
- printf("%d\n", i);
- sum += i;
- }
- }
-
- printf("\n%d\n", sum);
-
- return 0;
-}
-
diff --git a/src/projecteuler/031.py b/src/projecteuler/031.py
deleted file mode 100644
index 331c8c2..0000000
--- a/src/projecteuler/031.py
+++ /dev/null
@@ -1,18 +0,0 @@
-
-coins = [ 200, 100, 50, 20, 10, 5, 2, 1 ]
-
-value = 200
-
-def count(v, c):
- if v == 0:
- return 1
- if len(c) == 1:
- return 1
- sum = 0
- n = v / c[0]
- for i in range(0, n+1):
- sum += count(v-i*c[0], c[1:])
- return sum
-
-print count(value, coins)
-
diff --git a/src/projecteuler/032.c b/src/projecteuler/032.c
deleted file mode 100644
index 13c40b5..0000000
--- a/src/projecteuler/032.c
+++ /dev/null
@@ -1,64 +0,0 @@
-
-#include <stdio.h>
-
-/*
- * much faster than python version, though less optimized...
- *
- * to filter out duplicates and add numbers:
- * $ ./032 | sort -u | tr "\n" "+" | sed 's/+$/\n/' | bc
- *
- */
-
-int is_pandigital(long int a, long int b, long int c)
-{
- char digits[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- char digit;
- int i;
-
- while(a > 0)
- {
- digit = a % 10;
- if(digit == 0 || digits[digit]++)
- return 0;
- a /= 10;
- }
- while(b > 0)
- {
- digit = b % 10;
- if(digit == 0 || digits[digit]++)
- return 0;
- b /= 10;
- }
- while(c > 0)
- {
- digit = c % 10;
- if(digit == 0 || digits[digit]++)
- return 0;
- c /= 10;
- }
-
- for(i=1; i<10; i++)
- if(digits[i] != 1)
- return 0;
- return 1;
-}
-
-int main(void)
-{
- long int limit = 10000;
- long int a, b, c;
- for(a=2; a<limit; a++)
- {
- for(b=2; b<limit; b++)
- {
- c = a * b;
- if(c > limit)
- break;
- if(is_pandigital(a, b, c))
- printf("%ld\n", c);
- }
- }
-
- return 0;
-}
-
diff --git a/src/projecteuler/032.py b/src/projecteuler/032.py
deleted file mode 100644
index 0958625..0000000
--- a/src/projecteuler/032.py
+++ /dev/null
@@ -1,43 +0,0 @@
-
-from common import pandigital
-
-pandigital = pandigital(9).numbers(5)
-pandigital.remove(1)
-
-def is_pandigital(a, b, c):
- d = [0]*10
- while a > 0:
- digit = a % 10
- if d[digit] > 0:
- return False
- d[digit] += 1
- a /= 10
- while b > 0:
- digit = b % 10
- if d[digit] > 0:
- return False
- d[digit] += 1
- b /= 10
- while c > 0:
- digit = c % 10
- if d[digit] > 0:
- return False
- d[digit] += 1
- c /= 10
- return d[1:] == [1]*9
-
-products = set()
-
-for a in pandigital:
- for b in pandigital:
- c = a * b
- if c in pandigital and is_pandigital(a, b, c):
- #print str(a), "*", str(b), "=", str(c)
- products.add(c)
-
-sum = 0
-for p in products:
- sum += p
-
-print sum
-
diff --git a/src/projecteuler/033.c b/src/projecteuler/033.c
deleted file mode 100644
index 61a7ffd..0000000
--- a/src/projecteuler/033.c
+++ /dev/null
@@ -1,59 +0,0 @@
-
-int curious_fraction(int a, int b)
-{
- int a1 = a/10;
- int a2 = a%10;
- int b1 = b/10;
- int b2 = b%10;
-
- float result = 1.0*a/b;
-
- if(a2 == 0)
- return 0;
-
- if(a1 == b1)
- {
- float result2 = 1.0*a2/b2;
- if(result == result2)
- return 1;
- }
-
- if(a1 == b2)
- {
- float result2 = 1.0*a2/b1;
- if(result == result2)
- return 1;
- }
-
- if(a2 == b1)
- {
- float result2 = 1.0*a1/b2;
- if(result == result2)
- return 1;
- }
-
- if(a2 == b2)
- {
- float result2 = 1.0*a1/b1;
- if(result == result2)
- return 1;
- }
-
- return 0;
-}
-
-int main()
-{
- int a, b;
- float product = 1.0;
-
- for(a=10; a<100; a++)
- for(b=a+1; b<100; b++)
- if(curious_fraction(a, b))
- product *= 1.0*a/b;
-
- printf("%d\n", (int)(1/product));
-
- return 0;
-}
-
diff --git a/src/projecteuler/033.py b/src/projecteuler/033.py
deleted file mode 100644
index 9575983..0000000
--- a/src/projecteuler/033.py
+++ /dev/null
@@ -1,34 +0,0 @@
-def curious_fraction(a, b):
- a1 = a/10
- a2 = a%10
- b1 = b/10
- b2 = b%10
-
- result = 1.0*a/b;
-
- if a2 == 0 or b2 == 0:
- return False
-
- if a1 == b1 and 1.0*a2/b2 == result:
- return True
-
- if a1 == b2 and 1.0*a2/b1 == result:
- return True
-
- if a2 == b1 and 1.0*a1/b2 == result:
- return True
-
- if a2 == b2 and 1.0*a1/b1 == result:
- return True
-
- return False
-
-product = 1.0
-
-for a in range(10, 100):
- for b in range(a+1, 100):
- if curious_fraction(a, b):
- product *= 1.0*a/b
-
-print int(1/product)
-
diff --git a/src/projecteuler/034.py b/src/projecteuler/034.py
deleted file mode 100644
index 505a987..0000000
--- a/src/projecteuler/034.py
+++ /dev/null
@@ -1,27 +0,0 @@
-def fac(limit):
- result = 1
- for i in range(1, limit+1):
- result *= i
- return result
-
-
-facs = [ fac(i) for i in range(0, 10) ]
-
-def facsum(number):
- global facs
- sum = 0
- while number > 0:
- digit = number % 10
- sum += facs[digit]
- number = number / 10
- return sum
-
-
-sum = 0
-
-for i in xrange(10, 2540160):
- if facsum(i) == i:
- sum += i
-
-print sum
-
diff --git a/src/projecteuler/035.py b/src/projecteuler/035.py
deleted file mode 100644
index 8f00da8..0000000
--- a/src/projecteuler/035.py
+++ /dev/null
@@ -1,33 +0,0 @@
-def circular_prime(number):
- global number_list
- result = True
- number_str = str(number)
- for i in range(1, len(number_str)):
- rotated_str = number_str[i:] + number_str[:i]
- rotated_nr = int(rotated_str)
- if not number_list[rotated_nr-1]:
- result = False
- break
- return result
-
-
-limit = 1000000
-
-number_list = [False]
-for i in range(2, limit+1):
- number_list.append(True)
-
-for i in range(2, limit+1):
- x = i*2
- while(x <= len(number_list)):
- number_list[x-1] = False
- x += i
-
-count = 0
-
-for i in range(1, limit+1):
- if number_list[i-1] and circular_prime(i):
- count += 1
-
-print count
-
diff --git a/src/projecteuler/036.py b/src/projecteuler/036.py
deleted file mode 100644
index bf800da..0000000
--- a/src/projecteuler/036.py
+++ /dev/null
@@ -1,40 +0,0 @@
-
-binary = [ 2**x for x in range(20) ][::-1]
-
-def palindromic_decimal(n):
- if n == int(str(n)[::-1]):
- return True
- return False
-
-
-def dec2bin(n):
- res = ""
- for i in binary:
- if n - i > 0 or n == i:
- res += "1"
- n -= i
- else:
- if len(res) > 0: # do not add leading 0s
- res += "0"
- return res
-
-def bin2dec(n):
- res = 0
- for i in range(1, len(n)+1):
- if n[-i] == "1":
- res += binary[-i]
- return res
-
-def palindromic_binary(n):
- if n == bin2dec(dec2bin(n)[::-1]):
- return True
- return False
-
-sum = 0
-
-for n in xrange(1000000):
- if palindromic_decimal(n) and palindromic_binary(n):
- sum += n
-
-print sum
-
diff --git a/src/projecteuler/037.py b/src/projecteuler/037.py
deleted file mode 100644
index 5e506c2..0000000
--- a/src/projecteuler/037.py
+++ /dev/null
@@ -1,61 +0,0 @@
-
-limit = 800000
-
-number_list = [False] + [True]*(limit-1)
-list_len = len(number_list)
-
-def next_prime(i):
- global number_list
- global list_len
- x = i+1
- while(x <= list_len):
- if number_list[x-1] == True:
- break
- x += 1
- return x
-
-i = 2
-
-while(i*i <= list_len):
- x = i*i
- while(x <= list_len):
- number_list[x-1] = False
- x += i
- i = next_prime(i)
-
-
-primes = set()
-
-for i in xrange(1, limit+1):
- if number_list[i-1]:
- primes.add(i)
-
-
-def truncatable(n):
- # right truncatable
- tmp = n/10
- while tmp > 0:
- if not tmp in primes:
- return False
- tmp = tmp / 10
-
- # left truncatable
- tmp = n
- modulo = 10**14
- while tmp > 0:
- if not tmp in primes:
- return False
- modulo = modulo / 10
- tmp = tmp % modulo
-
- return True
-
-
-result = []
-
-for p in primes:
- if truncatable(p) and p not in (2, 3, 5, 7):
- result += [p]
-
-print sum(result)
-
diff --git a/src/projecteuler/038.py b/src/projecteuler/038.py
deleted file mode 100644
index bc43644..0000000
--- a/src/projecteuler/038.py
+++ /dev/null
@@ -1,43 +0,0 @@
-
-def is_pandigital(x):
- digits = 10*[0]
-
- while x > 0:
- digit = x % 10
- if digit == 0:
- return False
- digits[digit] += 1
- x /= 10
-
- for i in range(1, 10):
- if digits[i] != 1:
- return False
-
- return True
-
-
-def pandigital(x):
- result = str(x * 1)
- count = 1
-
- while len(result) < 9:
- count += 1
- result += str(x * count)
-
- if len(result) > 9:
- return 0
-
- if is_pandigital(int(result)):
- return int(result)
-
- return 0
-
-max_pd = 0
-for i in xrange(9876):
- p = pandigital(i)
- if p > max_pd:
- max_pd = p
- i += 1
-
-print max_pd
-
diff --git a/src/projecteuler/039.c b/src/projecteuler/039.c
deleted file mode 100644
index 202df6c..0000000
--- a/src/projecteuler/039.c
+++ /dev/null
@@ -1,37 +0,0 @@
-
-int solutions(int p)
-{
- int solution = 0;
- int a, b, c;
-
- for(a=0; a<p/2; a++)
- for(b=0; b<p-a; b++)
- {
- c = p - a - b;
- if(a*a + b*b == c*c)
- solution++;
- }
- return solution;
-}
-
-int main()
-{
- int max_solutions = 0;
- int max_p = 0;
- int p;
-
- for(p=3; p<=1000; p++)
- {
- int n = solutions(p);
- if(n > max_solutions)
- {
- max_solutions = n;
- max_p = p;
- }
- }
-
- printf("%d\n", max_p);
-
- return 0;
-}
-
diff --git a/src/projecteuler/039.py b/src/projecteuler/039.py
deleted file mode 100644
index 6a6bd0b..0000000
--- a/src/projecteuler/039.py
+++ /dev/null
@@ -1,21 +0,0 @@
-
-def solutions(p):
- solution = 0
- for a in xrange(1, p/2):
- for b in xrange(a, p-a):
- c = p - a - b
- if a*a + b*b == c*c:
- solution += 1
- return solution
-
-max_solutions = 0
-max_p = 0
-
-for p in xrange(3, 1000):
- n = solutions(p)
- if n > max_solutions:
- max_solutions = n
- max_p = p
-
-print max_p
-
diff --git a/src/projecteuler/040.py b/src/projecteuler/040.py
deleted file mode 100644
index 6f20325..0000000
--- a/src/projecteuler/040.py
+++ /dev/null
@@ -1,34 +0,0 @@
-
-# liefert zurueck an welcher Stelle die x-stelligen Zahlen beginnen
-def begin(x):
- stelle = 1
- for i in range(1, x):
- stelle += 9 * (10**(i-1)) * i
- return stelle
-
-
-def stelle(pos):
- n = 0
- i = 0
- # suche nach Anfang der x-stelligen Region in der pos liegt
- while n <= pos:
- i += 1
- n = begin(i)
-
- stellen = i-1
- startpos = begin(stellen)
- startvalue = 10**(stellen-1)
- diff = pos - startpos
- zahl = startvalue + diff/stellen
- result = (zahl / (10**(stellen-(diff%stellen)-1))) % 10
-
- return result
-
-
-product = 1
-
-for i in range(0, 7):
- product *= stelle(10**i)
-
-print product
-
diff --git a/src/projecteuler/041.py b/src/projecteuler/041.py
deleted file mode 100644
index 04a6272..0000000
--- a/src/projecteuler/041.py
+++ /dev/null
@@ -1,26 +0,0 @@
-from common import pandigital, sieve
-
-primes = list(sieve(10**6).primes())
-numbers = [x for x in pandigital(1, 9).numbers(10) if x > 10**8]
-numbers += [x for x in pandigital(1, 8).numbers(10) if x > 10**7]
-numbers += [x for x in pandigital(1, 7).numbers(10) if x > 10**6]
-numbers += [x for x in pandigital(1, 6).numbers(10) if x > 10**5]
-numbers += [x for x in pandigital(1, 5).numbers(10) if x > 10**4]
-numbers += [x for x in pandigital(1, 4).numbers(10) if x > 10**3]
-numbers += [x for x in pandigital(1, 3).numbers(10) if x > 10**2]
-numbers += [x for x in pandigital(1, 2).numbers(10) if x > 10**1]
-
-numbers.sort(reverse=True)
-
-# check for divisibility up to sqrt(n), as sieve requires too much memory
-def is_prime(n):
- for p in primes:
- if n % p == 0:
- return False
- return True
-
-for n in numbers:
- if is_prime(n):
- print n
- break
-
diff --git a/src/projecteuler/042.py b/src/projecteuler/042.py
deleted file mode 100644
index 46f08fa..0000000
--- a/src/projecteuler/042.py
+++ /dev/null
@@ -1,18 +0,0 @@
-def score(name):
- sum = 0
- for char in name:
- sum += ord(char) - 64
- return sum
-
-triangle_numbers = [ int(0.5*n*(n-1)) for n in range(2, 200) ]
-count = 0
-
-f = open('042.txt', 'r')
-for word in f:
- word = word.rstrip("\n")
- if score(word) in triangle_numbers:
- count += 1
-f.close()
-
-print count
-
diff --git a/src/projecteuler/042.txt b/src/projecteuler/042.txt
deleted file mode 100644
index 124e8b6..0000000
--- a/src/projecteuler/042.txt
+++ /dev/null
@@ -1,1786 +0,0 @@
-A
-ABILITY
-ABLE
-ABOUT
-ABOVE
-ABSENCE
-ABSOLUTELY
-ACADEMIC
-ACCEPT
-ACCESS
-ACCIDENT
-ACCOMPANY
-ACCORDING
-ACCOUNT
-ACHIEVE
-ACHIEVEMENT
-ACID
-ACQUIRE
-ACROSS
-ACT
-ACTION
-ACTIVE
-ACTIVITY
-ACTUAL
-ACTUALLY
-ADD
-ADDITION
-ADDITIONAL
-ADDRESS
-ADMINISTRATION
-ADMIT
-ADOPT
-ADULT
-ADVANCE
-ADVANTAGE
-ADVICE
-ADVISE
-AFFAIR
-AFFECT
-AFFORD
-AFRAID
-AFTER
-AFTERNOON
-AFTERWARDS
-AGAIN
-AGAINST
-AGE
-AGENCY
-AGENT
-AGO
-AGREE
-AGREEMENT
-AHEAD
-AID
-AIM
-AIR
-AIRCRAFT
-ALL
-ALLOW
-ALMOST
-ALONE
-ALONG
-ALREADY
-ALRIGHT
-ALSO
-ALTERNATIVE
-ALTHOUGH
-ALWAYS
-AMONG
-AMONGST
-AMOUNT
-AN
-ANALYSIS
-ANCIENT
-AND
-ANIMAL
-ANNOUNCE
-ANNUAL
-ANOTHER
-ANSWER
-ANY
-ANYBODY
-ANYONE
-ANYTHING
-ANYWAY
-APART
-APPARENT
-APPARENTLY
-APPEAL
-APPEAR
-APPEARANCE
-APPLICATION
-APPLY
-APPOINT
-APPOINTMENT
-APPROACH
-APPROPRIATE
-APPROVE
-AREA
-ARGUE
-ARGUMENT
-ARISE
-ARM
-ARMY
-AROUND
-ARRANGE
-ARRANGEMENT
-ARRIVE
-ART
-ARTICLE
-ARTIST
-AS
-ASK
-ASPECT
-ASSEMBLY
-ASSESS
-ASSESSMENT
-ASSET
-ASSOCIATE
-ASSOCIATION
-ASSUME
-ASSUMPTION
-AT
-ATMOSPHERE
-ATTACH
-ATTACK
-ATTEMPT
-ATTEND
-ATTENTION
-ATTITUDE
-ATTRACT
-ATTRACTIVE
-AUDIENCE
-AUTHOR
-AUTHORITY
-AVAILABLE
-AVERAGE
-AVOID
-AWARD
-AWARE
-AWAY
-AYE
-BABY
-BACK
-BACKGROUND
-BAD
-BAG
-BALANCE
-BALL
-BAND
-BANK
-BAR
-BASE
-BASIC
-BASIS
-BATTLE
-BE
-BEAR
-BEAT
-BEAUTIFUL
-BECAUSE
-BECOME
-BED
-BEDROOM
-BEFORE
-BEGIN
-BEGINNING
-BEHAVIOUR
-BEHIND
-BELIEF
-BELIEVE
-BELONG
-BELOW
-BENEATH
-BENEFIT
-BESIDE
-BEST
-BETTER
-BETWEEN
-BEYOND
-BIG
-BILL
-BIND
-BIRD
-BIRTH
-BIT
-BLACK
-BLOCK
-BLOOD
-BLOODY
-BLOW
-BLUE
-BOARD
-BOAT
-BODY
-BONE
-BOOK
-BORDER
-BOTH
-BOTTLE
-BOTTOM
-BOX
-BOY
-BRAIN
-BRANCH
-BREAK
-BREATH
-BRIDGE
-BRIEF
-BRIGHT
-BRING
-BROAD
-BROTHER
-BUDGET
-BUILD
-BUILDING
-BURN
-BUS
-BUSINESS
-BUSY
-BUT
-BUY
-BY
-CABINET
-CALL
-CAMPAIGN
-CAN
-CANDIDATE
-CAPABLE
-CAPACITY
-CAPITAL
-CAR
-CARD
-CARE
-CAREER
-CAREFUL
-CAREFULLY
-CARRY
-CASE
-CASH
-CAT
-CATCH
-CATEGORY
-CAUSE
-CELL
-CENTRAL
-CENTRE
-CENTURY
-CERTAIN
-CERTAINLY
-CHAIN
-CHAIR
-CHAIRMAN
-CHALLENGE
-CHANCE
-CHANGE
-CHANNEL
-CHAPTER
-CHARACTER
-CHARACTERISTIC
-CHARGE
-CHEAP
-CHECK
-CHEMICAL
-CHIEF
-CHILD
-CHOICE
-CHOOSE
-CHURCH
-CIRCLE
-CIRCUMSTANCE
-CITIZEN
-CITY
-CIVIL
-CLAIM
-CLASS
-CLEAN
-CLEAR
-CLEARLY
-CLIENT
-CLIMB
-CLOSE
-CLOSELY
-CLOTHES
-CLUB
-COAL
-CODE
-COFFEE
-COLD
-COLLEAGUE
-COLLECT
-COLLECTION
-COLLEGE
-COLOUR
-COMBINATION
-COMBINE
-COME
-COMMENT
-COMMERCIAL
-COMMISSION
-COMMIT
-COMMITMENT
-COMMITTEE
-COMMON
-COMMUNICATION
-COMMUNITY
-COMPANY
-COMPARE
-COMPARISON
-COMPETITION
-COMPLETE
-COMPLETELY
-COMPLEX
-COMPONENT
-COMPUTER
-CONCENTRATE
-CONCENTRATION
-CONCEPT
-CONCERN
-CONCERNED
-CONCLUDE
-CONCLUSION
-CONDITION
-CONDUCT
-CONFERENCE
-CONFIDENCE
-CONFIRM
-CONFLICT
-CONGRESS
-CONNECT
-CONNECTION
-CONSEQUENCE
-CONSERVATIVE
-CONSIDER
-CONSIDERABLE
-CONSIDERATION
-CONSIST
-CONSTANT
-CONSTRUCTION
-CONSUMER
-CONTACT
-CONTAIN
-CONTENT
-CONTEXT
-CONTINUE
-CONTRACT
-CONTRAST
-CONTRIBUTE
-CONTRIBUTION
-CONTROL
-CONVENTION
-CONVERSATION
-COPY
-CORNER
-CORPORATE
-CORRECT
-COS
-COST
-COULD
-COUNCIL
-COUNT
-COUNTRY
-COUNTY
-COUPLE
-COURSE
-COURT
-COVER
-CREATE
-CREATION
-CREDIT
-CRIME
-CRIMINAL
-CRISIS
-CRITERION
-CRITICAL
-CRITICISM
-CROSS
-CROWD
-CRY
-CULTURAL
-CULTURE
-CUP
-CURRENT
-CURRENTLY
-CURRICULUM
-CUSTOMER
-CUT
-DAMAGE
-DANGER
-DANGEROUS
-DARK
-DATA
-DATE
-DAUGHTER
-DAY
-DEAD
-DEAL
-DEATH
-DEBATE
-DEBT
-DECADE
-DECIDE
-DECISION
-DECLARE
-DEEP
-DEFENCE
-DEFENDANT
-DEFINE
-DEFINITION
-DEGREE
-DELIVER
-DEMAND
-DEMOCRATIC
-DEMONSTRATE
-DENY
-DEPARTMENT
-DEPEND
-DEPUTY
-DERIVE
-DESCRIBE
-DESCRIPTION
-DESIGN
-DESIRE
-DESK
-DESPITE
-DESTROY
-DETAIL
-DETAILED
-DETERMINE
-DEVELOP
-DEVELOPMENT
-DEVICE
-DIE
-DIFFERENCE
-DIFFERENT
-DIFFICULT
-DIFFICULTY
-DINNER
-DIRECT
-DIRECTION
-DIRECTLY
-DIRECTOR
-DISAPPEAR
-DISCIPLINE
-DISCOVER
-DISCUSS
-DISCUSSION
-DISEASE
-DISPLAY
-DISTANCE
-DISTINCTION
-DISTRIBUTION
-DISTRICT
-DIVIDE
-DIVISION
-DO
-DOCTOR
-DOCUMENT
-DOG
-DOMESTIC
-DOOR
-DOUBLE
-DOUBT
-DOWN
-DRAW
-DRAWING
-DREAM
-DRESS
-DRINK
-DRIVE
-DRIVER
-DROP
-DRUG
-DRY
-DUE
-DURING
-DUTY
-EACH
-EAR
-EARLY
-EARN
-EARTH
-EASILY
-EAST
-EASY
-EAT
-ECONOMIC
-ECONOMY
-EDGE
-EDITOR
-EDUCATION
-EDUCATIONAL
-EFFECT
-EFFECTIVE
-EFFECTIVELY
-EFFORT
-EGG
-EITHER
-ELDERLY
-ELECTION
-ELEMENT
-ELSE
-ELSEWHERE
-EMERGE
-EMPHASIS
-EMPLOY
-EMPLOYEE
-EMPLOYER
-EMPLOYMENT
-EMPTY
-ENABLE
-ENCOURAGE
-END
-ENEMY
-ENERGY
-ENGINE
-ENGINEERING
-ENJOY
-ENOUGH
-ENSURE
-ENTER
-ENTERPRISE
-ENTIRE
-ENTIRELY
-ENTITLE
-ENTRY
-ENVIRONMENT
-ENVIRONMENTAL
-EQUAL
-EQUALLY
-EQUIPMENT
-ERROR
-ESCAPE
-ESPECIALLY
-ESSENTIAL
-ESTABLISH
-ESTABLISHMENT
-ESTATE
-ESTIMATE
-EVEN
-EVENING
-EVENT
-EVENTUALLY
-EVER
-EVERY
-EVERYBODY
-EVERYONE
-EVERYTHING
-EVIDENCE
-EXACTLY
-EXAMINATION
-EXAMINE
-EXAMPLE
-EXCELLENT
-EXCEPT
-EXCHANGE
-EXECUTIVE
-EXERCISE
-EXHIBITION
-EXIST
-EXISTENCE
-EXISTING
-EXPECT
-EXPECTATION
-EXPENDITURE
-EXPENSE
-EXPENSIVE
-EXPERIENCE
-EXPERIMENT
-EXPERT
-EXPLAIN
-EXPLANATION
-EXPLORE
-EXPRESS
-EXPRESSION
-EXTEND
-EXTENT
-EXTERNAL
-EXTRA
-EXTREMELY
-EYE
-FACE
-FACILITY
-FACT
-FACTOR
-FACTORY
-FAIL
-FAILURE
-FAIR
-FAIRLY
-FAITH
-FALL
-FAMILIAR
-FAMILY
-FAMOUS
-FAR
-FARM
-FARMER
-FASHION
-FAST
-FATHER
-FAVOUR
-FEAR
-FEATURE
-FEE
-FEEL
-FEELING
-FEMALE
-FEW
-FIELD
-FIGHT
-FIGURE
-FILE
-FILL
-FILM
-FINAL
-FINALLY
-FINANCE
-FINANCIAL
-FIND
-FINDING
-FINE
-FINGER
-FINISH
-FIRE
-FIRM
-FIRST
-FISH
-FIT
-FIX
-FLAT
-FLIGHT
-FLOOR
-FLOW
-FLOWER
-FLY
-FOCUS
-FOLLOW
-FOLLOWING
-FOOD
-FOOT
-FOOTBALL
-FOR
-FORCE
-FOREIGN
-FOREST
-FORGET
-FORM
-FORMAL
-FORMER
-FORWARD
-FOUNDATION
-FREE
-FREEDOM
-FREQUENTLY
-FRESH
-FRIEND
-FROM
-FRONT
-FRUIT
-FUEL
-FULL
-FULLY
-FUNCTION
-FUND
-FUNNY
-FURTHER
-FUTURE
-GAIN
-GAME
-GARDEN
-GAS
-GATE
-GATHER
-GENERAL
-GENERALLY
-GENERATE
-GENERATION
-GENTLEMAN
-GET
-GIRL
-GIVE
-GLASS
-GO
-GOAL
-GOD
-GOLD
-GOOD
-GOVERNMENT
-GRANT
-GREAT
-GREEN
-GREY
-GROUND
-GROUP
-GROW
-GROWING
-GROWTH
-GUEST
-GUIDE
-GUN
-HAIR
-HALF
-HALL
-HAND
-HANDLE
-HANG
-HAPPEN
-HAPPY
-HARD
-HARDLY
-HATE
-HAVE
-HE
-HEAD
-HEALTH
-HEAR
-HEART
-HEAT
-HEAVY
-HELL
-HELP
-HENCE
-HER
-HERE
-HERSELF
-HIDE
-HIGH
-HIGHLY
-HILL
-HIM
-HIMSELF
-HIS
-HISTORICAL
-HISTORY
-HIT
-HOLD
-HOLE
-HOLIDAY
-HOME
-HOPE
-HORSE
-HOSPITAL
-HOT
-HOTEL
-HOUR
-HOUSE
-HOUSEHOLD
-HOUSING
-HOW
-HOWEVER
-HUGE
-HUMAN
-HURT
-HUSBAND
-I
-IDEA
-IDENTIFY
-IF
-IGNORE
-ILLUSTRATE
-IMAGE
-IMAGINE
-IMMEDIATE
-IMMEDIATELY
-IMPACT
-IMPLICATION
-IMPLY
-IMPORTANCE
-IMPORTANT
-IMPOSE
-IMPOSSIBLE
-IMPRESSION
-IMPROVE
-IMPROVEMENT
-IN
-INCIDENT
-INCLUDE
-INCLUDING
-INCOME
-INCREASE
-INCREASED
-INCREASINGLY
-INDEED
-INDEPENDENT
-INDEX
-INDICATE
-INDIVIDUAL
-INDUSTRIAL
-INDUSTRY
-INFLUENCE
-INFORM
-INFORMATION
-INITIAL
-INITIATIVE
-INJURY
-INSIDE
-INSIST
-INSTANCE
-INSTEAD
-INSTITUTE
-INSTITUTION
-INSTRUCTION
-INSTRUMENT
-INSURANCE
-INTEND
-INTENTION
-INTEREST
-INTERESTED
-INTERESTING
-INTERNAL
-INTERNATIONAL
-INTERPRETATION
-INTERVIEW
-INTO
-INTRODUCE
-INTRODUCTION
-INVESTIGATE
-INVESTIGATION
-INVESTMENT
-INVITE
-INVOLVE
-IRON
-IS
-ISLAND
-ISSUE
-IT
-ITEM
-ITS
-ITSELF
-JOB
-JOIN
-JOINT
-JOURNEY
-JUDGE
-JUMP
-JUST
-JUSTICE
-KEEP
-KEY
-KID
-KILL
-KIND
-KING
-KITCHEN
-KNEE
-KNOW
-KNOWLEDGE
-LABOUR
-LACK
-LADY
-LAND
-LANGUAGE
-LARGE
-LARGELY
-LAST
-LATE
-LATER
-LATTER
-LAUGH
-LAUNCH
-LAW
-LAWYER
-LAY
-LEAD
-LEADER
-LEADERSHIP
-LEADING
-LEAF
-LEAGUE
-LEAN
-LEARN
-LEAST
-LEAVE
-LEFT
-LEG
-LEGAL
-LEGISLATION
-LENGTH
-LESS
-LET
-LETTER
-LEVEL
-LIABILITY
-LIBERAL
-LIBRARY
-LIE
-LIFE
-LIFT
-LIGHT
-LIKE
-LIKELY
-LIMIT
-LIMITED
-LINE
-LINK
-LIP
-LIST
-LISTEN
-LITERATURE
-LITTLE
-LIVE
-LIVING
-LOAN
-LOCAL
-LOCATION
-LONG
-LOOK
-LORD
-LOSE
-LOSS
-LOT
-LOVE
-LOVELY
-LOW
-LUNCH
-MACHINE
-MAGAZINE
-MAIN
-MAINLY
-MAINTAIN
-MAJOR
-MAJORITY
-MAKE
-MALE
-MAN
-MANAGE
-MANAGEMENT
-MANAGER
-MANNER
-MANY
-MAP
-MARK
-MARKET
-MARRIAGE
-MARRIED
-MARRY
-MASS
-MASTER
-MATCH
-MATERIAL
-MATTER
-MAY
-MAYBE
-ME
-MEAL
-MEAN
-MEANING
-MEANS
-MEANWHILE
-MEASURE
-MECHANISM
-MEDIA
-MEDICAL
-MEET
-MEETING
-MEMBER
-MEMBERSHIP
-MEMORY
-MENTAL
-MENTION
-MERELY
-MESSAGE
-METAL
-METHOD
-MIDDLE
-MIGHT
-MILE
-MILITARY
-MILK
-MIND
-MINE
-MINISTER
-MINISTRY
-MINUTE
-MISS
-MISTAKE
-MODEL
-MODERN
-MODULE
-MOMENT
-MONEY
-MONTH
-MORE
-MORNING
-MOST
-MOTHER
-MOTION
-MOTOR
-MOUNTAIN
-MOUTH
-MOVE
-MOVEMENT
-MUCH
-MURDER
-MUSEUM
-MUSIC
-MUST
-MY
-MYSELF
-NAME
-NARROW
-NATION
-NATIONAL
-NATURAL
-NATURE
-NEAR
-NEARLY
-NECESSARILY
-NECESSARY
-NECK
-NEED
-NEGOTIATION
-NEIGHBOUR
-NEITHER
-NETWORK
-NEVER
-NEVERTHELESS
-NEW
-NEWS
-NEWSPAPER
-NEXT
-NICE
-NIGHT
-NO
-NOBODY
-NOD
-NOISE
-NONE
-NOR
-NORMAL
-NORMALLY
-NORTH
-NORTHERN
-NOSE
-NOT
-NOTE
-NOTHING
-NOTICE
-NOTION
-NOW
-NUCLEAR
-NUMBER
-NURSE
-OBJECT
-OBJECTIVE
-OBSERVATION
-OBSERVE
-OBTAIN
-OBVIOUS
-OBVIOUSLY
-OCCASION
-OCCUR
-ODD
-OF
-OFF
-OFFENCE
-OFFER
-OFFICE
-OFFICER
-OFFICIAL
-OFTEN
-OIL
-OKAY
-OLD
-ON
-ONCE
-ONE
-ONLY
-ONTO
-OPEN
-OPERATE
-OPERATION
-OPINION
-OPPORTUNITY
-OPPOSITION
-OPTION
-OR
-ORDER
-ORDINARY
-ORGANISATION
-ORGANISE
-ORGANIZATION
-ORIGIN
-ORIGINAL
-OTHER
-OTHERWISE
-OUGHT
-OUR
-OURSELVES
-OUT
-OUTCOME
-OUTPUT
-OUTSIDE
-OVER
-OVERALL
-OWN
-OWNER
-PACKAGE
-PAGE
-PAIN
-PAINT
-PAINTING
-PAIR
-PANEL
-PAPER
-PARENT
-PARK
-PARLIAMENT
-PART
-PARTICULAR
-PARTICULARLY
-PARTLY
-PARTNER
-PARTY
-PASS
-PASSAGE
-PAST
-PATH
-PATIENT
-PATTERN
-PAY
-PAYMENT
-PEACE
-PENSION
-PEOPLE
-PER
-PERCENT
-PERFECT
-PERFORM
-PERFORMANCE
-PERHAPS
-PERIOD
-PERMANENT
-PERSON
-PERSONAL
-PERSUADE
-PHASE
-PHONE
-PHOTOGRAPH
-PHYSICAL
-PICK
-PICTURE
-PIECE
-PLACE
-PLAN
-PLANNING
-PLANT
-PLASTIC
-PLATE
-PLAY
-PLAYER
-PLEASE
-PLEASURE
-PLENTY
-PLUS
-POCKET
-POINT
-POLICE
-POLICY
-POLITICAL
-POLITICS
-POOL
-POOR
-POPULAR
-POPULATION
-POSITION
-POSITIVE
-POSSIBILITY
-POSSIBLE
-POSSIBLY
-POST
-POTENTIAL
-POUND
-POWER
-POWERFUL
-PRACTICAL
-PRACTICE
-PREFER
-PREPARE
-PRESENCE
-PRESENT
-PRESIDENT
-PRESS
-PRESSURE
-PRETTY
-PREVENT
-PREVIOUS
-PREVIOUSLY
-PRICE
-PRIMARY
-PRIME
-PRINCIPLE
-PRIORITY
-PRISON
-PRISONER
-PRIVATE
-PROBABLY
-PROBLEM
-PROCEDURE
-PROCESS
-PRODUCE
-PRODUCT
-PRODUCTION
-PROFESSIONAL
-PROFIT
-PROGRAM
-PROGRAMME
-PROGRESS
-PROJECT
-PROMISE
-PROMOTE
-PROPER
-PROPERLY
-PROPERTY
-PROPORTION
-PROPOSE
-PROPOSAL
-PROSPECT
-PROTECT
-PROTECTION
-PROVE
-PROVIDE
-PROVIDED
-PROVISION
-PUB
-PUBLIC
-PUBLICATION
-PUBLISH
-PULL
-PUPIL
-PURPOSE
-PUSH
-PUT
-QUALITY
-QUARTER
-QUESTION
-QUICK
-QUICKLY
-QUIET
-QUITE
-RACE
-RADIO
-RAILWAY
-RAIN
-RAISE
-RANGE
-RAPIDLY
-RARE
-RATE
-RATHER
-REACH
-REACTION
-READ
-READER
-READING
-READY
-REAL
-REALISE
-REALITY
-REALIZE
-REALLY
-REASON
-REASONABLE
-RECALL
-RECEIVE
-RECENT
-RECENTLY
-RECOGNISE
-RECOGNITION
-RECOGNIZE
-RECOMMEND
-RECORD
-RECOVER
-RED
-REDUCE
-REDUCTION
-REFER
-REFERENCE
-REFLECT
-REFORM
-REFUSE
-REGARD
-REGION
-REGIONAL
-REGULAR
-REGULATION
-REJECT
-RELATE
-RELATION
-RELATIONSHIP
-RELATIVE
-RELATIVELY
-RELEASE
-RELEVANT
-RELIEF
-RELIGION
-RELIGIOUS
-RELY
-REMAIN
-REMEMBER
-REMIND
-REMOVE
-REPEAT
-REPLACE
-REPLY
-REPORT
-REPRESENT
-REPRESENTATION
-REPRESENTATIVE
-REQUEST
-REQUIRE
-REQUIREMENT
-RESEARCH
-RESOURCE
-RESPECT
-RESPOND
-RESPONSE
-RESPONSIBILITY
-RESPONSIBLE
-REST
-RESTAURANT
-RESULT
-RETAIN
-RETURN
-REVEAL
-REVENUE
-REVIEW
-REVOLUTION
-RICH
-RIDE
-RIGHT
-RING
-RISE
-RISK
-RIVER
-ROAD
-ROCK
-ROLE
-ROLL
-ROOF
-ROOM
-ROUND
-ROUTE
-ROW
-ROYAL
-RULE
-RUN
-RURAL
-SAFE
-SAFETY
-SALE
-SAME
-SAMPLE
-SATISFY
-SAVE
-SAY
-SCALE
-SCENE
-SCHEME
-SCHOOL
-SCIENCE
-SCIENTIFIC
-SCIENTIST
-SCORE
-SCREEN
-SEA
-SEARCH
-SEASON
-SEAT
-SECOND
-SECONDARY
-SECRETARY
-SECTION
-SECTOR
-SECURE
-SECURITY
-SEE
-SEEK
-SEEM
-SELECT
-SELECTION
-SELL
-SEND
-SENIOR
-SENSE
-SENTENCE
-SEPARATE
-SEQUENCE
-SERIES
-SERIOUS
-SERIOUSLY
-SERVANT
-SERVE
-SERVICE
-SESSION
-SET
-SETTLE
-SETTLEMENT
-SEVERAL
-SEVERE
-SEX
-SEXUAL
-SHAKE
-SHALL
-SHAPE
-SHARE
-SHE
-SHEET
-SHIP
-SHOE
-SHOOT
-SHOP
-SHORT
-SHOT
-SHOULD
-SHOULDER
-SHOUT
-SHOW
-SHUT
-SIDE
-SIGHT
-SIGN
-SIGNAL
-SIGNIFICANCE
-SIGNIFICANT
-SILENCE
-SIMILAR
-SIMPLE
-SIMPLY
-SINCE
-SING
-SINGLE
-SIR
-SISTER
-SIT
-SITE
-SITUATION
-SIZE
-SKILL
-SKIN
-SKY
-SLEEP
-SLIGHTLY
-SLIP
-SLOW
-SLOWLY
-SMALL
-SMILE
-SO
-SOCIAL
-SOCIETY
-SOFT
-SOFTWARE
-SOIL
-SOLDIER
-SOLICITOR
-SOLUTION
-SOME
-SOMEBODY
-SOMEONE
-SOMETHING
-SOMETIMES
-SOMEWHAT
-SOMEWHERE
-SON
-SONG
-SOON
-SORRY
-SORT
-SOUND
-SOURCE
-SOUTH
-SOUTHERN
-SPACE
-SPEAK
-SPEAKER
-SPECIAL
-SPECIES
-SPECIFIC
-SPEECH
-SPEED
-SPEND
-SPIRIT
-SPORT
-SPOT
-SPREAD
-SPRING
-STAFF
-STAGE
-STAND
-STANDARD
-STAR
-START
-STATE
-STATEMENT
-STATION
-STATUS
-STAY
-STEAL
-STEP
-STICK
-STILL
-STOCK
-STONE
-STOP
-STORE
-STORY
-STRAIGHT
-STRANGE
-STRATEGY
-STREET
-STRENGTH
-STRIKE
-STRONG
-STRONGLY
-STRUCTURE
-STUDENT
-STUDIO
-STUDY
-STUFF
-STYLE
-SUBJECT
-SUBSTANTIAL
-SUCCEED
-SUCCESS
-SUCCESSFUL
-SUCH
-SUDDENLY
-SUFFER
-SUFFICIENT
-SUGGEST
-SUGGESTION
-SUITABLE
-SUM
-SUMMER
-SUN
-SUPPLY
-SUPPORT
-SUPPOSE
-SURE
-SURELY
-SURFACE
-SURPRISE
-SURROUND
-SURVEY
-SURVIVE
-SWITCH
-SYSTEM
-TABLE
-TAKE
-TALK
-TALL
-TAPE
-TARGET
-TASK
-TAX
-TEA
-TEACH
-TEACHER
-TEACHING
-TEAM
-TEAR
-TECHNICAL
-TECHNIQUE
-TECHNOLOGY
-TELEPHONE
-TELEVISION
-TELL
-TEMPERATURE
-TEND
-TERM
-TERMS
-TERRIBLE
-TEST
-TEXT
-THAN
-THANK
-THANKS
-THAT
-THE
-THEATRE
-THEIR
-THEM
-THEME
-THEMSELVES
-THEN
-THEORY
-THERE
-THEREFORE
-THESE
-THEY
-THIN
-THING
-THINK
-THIS
-THOSE
-THOUGH
-THOUGHT
-THREAT
-THREATEN
-THROUGH
-THROUGHOUT
-THROW
-THUS
-TICKET
-TIME
-TINY
-TITLE
-TO
-TODAY
-TOGETHER
-TOMORROW
-TONE
-TONIGHT
-TOO
-TOOL
-TOOTH
-TOP
-TOTAL
-TOTALLY
-TOUCH
-TOUR
-TOWARDS
-TOWN
-TRACK
-TRADE
-TRADITION
-TRADITIONAL
-TRAFFIC
-TRAIN
-TRAINING
-TRANSFER
-TRANSPORT
-TRAVEL
-TREAT
-TREATMENT
-TREATY
-TREE
-TREND
-TRIAL
-TRIP
-TROOP
-TROUBLE
-TRUE
-TRUST
-TRUTH
-TRY
-TURN
-TWICE
-TYPE
-TYPICAL
-UNABLE
-UNDER
-UNDERSTAND
-UNDERSTANDING
-UNDERTAKE
-UNEMPLOYMENT
-UNFORTUNATELY
-UNION
-UNIT
-UNITED
-UNIVERSITY
-UNLESS
-UNLIKELY
-UNTIL
-UP
-UPON
-UPPER
-URBAN
-US
-USE
-USED
-USEFUL
-USER
-USUAL
-USUALLY
-VALUE
-VARIATION
-VARIETY
-VARIOUS
-VARY
-VAST
-VEHICLE
-VERSION
-VERY
-VIA
-VICTIM
-VICTORY
-VIDEO
-VIEW
-VILLAGE
-VIOLENCE
-VISION
-VISIT
-VISITOR
-VITAL
-VOICE
-VOLUME
-VOTE
-WAGE
-WAIT
-WALK
-WALL
-WANT
-WAR
-WARM
-WARN
-WASH
-WATCH
-WATER
-WAVE
-WAY
-WE
-WEAK
-WEAPON
-WEAR
-WEATHER
-WEEK
-WEEKEND
-WEIGHT
-WELCOME
-WELFARE
-WELL
-WEST
-WESTERN
-WHAT
-WHATEVER
-WHEN
-WHERE
-WHEREAS
-WHETHER
-WHICH
-WHILE
-WHILST
-WHITE
-WHO
-WHOLE
-WHOM
-WHOSE
-WHY
-WIDE
-WIDELY
-WIFE
-WILD
-WILL
-WIN
-WIND
-WINDOW
-WINE
-WING
-WINNER
-WINTER
-WISH
-WITH
-WITHDRAW
-WITHIN
-WITHOUT
-WOMAN
-WONDER
-WONDERFUL
-WOOD
-WORD
-WORK
-WORKER
-WORKING
-WORKS
-WORLD
-WORRY
-WORTH
-WOULD
-WRITE
-WRITER
-WRITING
-WRONG
-YARD
-YEAH
-YEAR
-YES
-YESTERDAY
-YET
-YOU
-YOUNG
-YOUR
-YOURSELF
-YOUTH
diff --git a/src/projecteuler/043.py b/src/projecteuler/043.py
deleted file mode 100644
index 2dd1db9..0000000
--- a/src/projecteuler/043.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from common import pandigital
-
-
-def check_number(i):
- x = str(i)
- if int(x[1:4]) & 1 != 0:
- return False
- if int(x[2:5]) % 3 != 0:
- return False
- if int(x[3:6]) % 5 != 0:
- return False
- if int(x[4:7]) % 7 != 0:
- return False
- if int(x[5:8]) % 11 != 0:
- return False
- if int(x[6:9]) % 13 != 0:
- return False
- if int(x[7:10]) % 17 != 0:
- return False
- return True
-
-
-numbers = pandigital(0, 9).numbers(11)
-
-result = 0
-
-for i in numbers:
- if i < 1000000000:
- continue
-
- if check_number(i):
- result += i
-
-print result
-
diff --git a/src/projecteuler/044.py b/src/projecteuler/044.py
deleted file mode 100644
index 5baae84..0000000
--- a/src/projecteuler/044.py
+++ /dev/null
@@ -1,9 +0,0 @@
-
-pentagonal = [n*(3*n-1)/2 for n in xrange(1, 10000)]
-pentagonal_set = set(pentagonal)
-
-for j in pentagonal:
- for k in pentagonal:
- if j+k in pentagonal_set and j-k in pentagonal_set:
- print abs(j-k)
-
diff --git a/src/projecteuler/045.py b/src/projecteuler/045.py
deleted file mode 100644
index 5a8bb7c..0000000
--- a/src/projecteuler/045.py
+++ /dev/null
@@ -1,12 +0,0 @@
-
-limit = 500000
-
-triangle = set([ int(n*(n+1)/2) for n in range(1, limit) ])
-pentagonal = set([ int(n*(2*n-1)) for n in range(1, limit) ])
-hexagonal = set([ int(n*(3*n-1)/2) for n in range(1, limit) ])
-
-result = triangle & pentagonal & hexagonal
-
-for i in result:
- print i
-
diff --git a/src/projecteuler/046.py b/src/projecteuler/046.py
deleted file mode 100644
index 24a2983..0000000
--- a/src/projecteuler/046.py
+++ /dev/null
@@ -1,35 +0,0 @@
-
-from common import sieve
-
-squares = set([ x*x for x in xrange(1, 1000000) ])
-
-def check_number(number, prime):
- square = (number - prime) >> 1
- return square in squares
-
-prime_set = sieve(1000000).primes()
-primes = list(prime_set)
-primes.sort()
-
-number = 3
-
-while True:
- number += 2
-
- if number in prime_set:
- continue
-
- conjecture = False
-
- for p in primes:
- if p >= number:
- break
- if check_number(number, p):
- conjecture = True
- break
-
- if not conjecture:
- break
-
-print number
-
diff --git a/src/projecteuler/047.py b/src/projecteuler/047.py
deleted file mode 100644
index 19f5185..0000000
--- a/src/projecteuler/047.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from common import sieve
-
-primes = list(sieve(1000000).primes())
-primes.sort()
-
-factors = 4
-
-def check_prime_factors(x):
- distinct = set()
- for p in primes:
- while x % p == 0:
- x /= p
- distinct.add(p)
- if x == 1:
- break
- return len(distinct) == factors
-
-n = 644
-
-while True:
- if check_prime_factors(n) and check_prime_factors(n+1) and check_prime_factors(n+2) and check_prime_factors(n+3):
- print n
- break
- n += 1
-
diff --git a/src/projecteuler/048.py b/src/projecteuler/048.py
deleted file mode 100644
index 7c4102e..0000000
--- a/src/projecteuler/048.py
+++ /dev/null
@@ -1,6 +0,0 @@
-sum = 0
-for i in range(1, 1001):
- sum += i**i
-
-print sum % 10**10
-
diff --git a/src/projecteuler/049.py b/src/projecteuler/049.py
deleted file mode 100644
index 1cb2fbf..0000000
--- a/src/projecteuler/049.py
+++ /dev/null
@@ -1,34 +0,0 @@
-from common import sieve, permutation
-
-primes = sieve(10000).primes()
-primes2 = [ x for x in primes if x > 1000 ]
-primes2.sort()
-
-end = False
-ignore = 1487
-result = []
-
-for p in primes2:
- for q in primes2:
- if p == q:
- continue
- if permutation(p, q):
- new = 0
- if q > p:
- diff = q - p
- new = q + diff
- else:
- diff = p - q
- new = p + diff
-
- if new in primes and permutation(q, new) and not permutation(ignore, p):
- result += [p, q, new]
- end = True
- if end:
- break
- if end:
- break
-
-result.sort()
-print str(result[0]) + str(result[1]) + str(result[2])
-
diff --git a/src/projecteuler/050.py b/src/projecteuler/050.py
deleted file mode 100644
index 615f0d5..0000000
--- a/src/projecteuler/050.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from common import sieve
-
-limit = 1000000
-
-prime_set = sieve(limit).primes()
-prime_list = list(prime_set)
-prime_list.sort()
-
-n = len(prime_list)
-
-max_sum = 0
-max_count = 0
-
-for i in xrange(n):
- sum = prime_list[i]
- count = 1
- for j in xrange(i+1, n):
- sum += prime_list[j]
- count += 1
- if sum > prime_list[-1]:
- break
-
- if sum in prime_set and count > max_count:
- max_sum = sum
- max_count = count
-
-print max_sum
-
diff --git a/src/projecteuler/051.c b/src/projecteuler/051.c
deleted file mode 100644
index ee79ece..0000000
--- a/src/projecteuler/051.c
+++ /dev/null
@@ -1,121 +0,0 @@
-#include "common.h"
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-unsigned long* p;
-
-const int pattern_size = 1024;
-unsigned long* patterns;
-
-void init_patterns()
-{
- int i, cur;
- unsigned long n, pos;
-
- patterns = (unsigned long*) malloc(pattern_size*sizeof(unsigned long));
-
- for(i=0; i<pattern_size; i++)
- {
- pos = 1;
- cur = i;
- n = 0;
- while(cur > 0)
- {
- n += (cur&1)*pos;
- pos *= 10;
- cur >>= 1;
- }
- patterns[i] = n;
- }
-}
-
-int valid_replacement(unsigned long prime, unsigned long number, unsigned long pattern)
-{
- int digit = -1; // replaced digit in prime
-
- while(pattern > 0)
- {
- char d1 = pattern % 10;
- char d2 = prime % 10;
- char d3 = number % 10;
-
- if(d1 == 1)
- {
- if(digit < 0)
- digit = d2;
- else if(digit != d2) // not same digits replaced
- return 0;
- }
-
- if(d1 == 0 && d2 != d3)
- return 0;
- else if(prime == 0 && number != 0)
- return 0;
-
- pattern /= 10;
- prime /= 10;
- number /= 10;
- }
-
- if(pattern == 0 && prime != number)
- return 0;
-
- return 1;
-}
-
-int check_prime(unsigned long prime)
-{
- int i, j;
-
- for(i=2; i<pattern_size; i++)
- {
- unsigned long pat = patterns[i];
- unsigned long tmp = prime;
- int count = 1;
-
- if(pat >= 10*tmp)
- break;
-
- for(j=0; j<10; j++)
- {
- tmp += pat;
-
- if(isprime(tmp, p) && valid_replacement(prime, tmp, pat))
- count++;
- }
-
- if(count>=8)
- {
- printf("Pattern: %ld\n", pat);
- return 1;
- }
- }
-
- return 0;
-}
-
-int main(void)
-{
- unsigned long pcount;
- unsigned long pos;
-
- p = primes(1000000);
- pcount = p[0];
-
- init_patterns();
-
- for(pos=1; pos<=pcount; pos++)
- {
- if(check_prime(p[pos]))
- {
- printf("Prime: %li\n", p[pos]);
- break;
- }
- }
-
- free(p);
- free(patterns);
- return 0;
-}
-
diff --git a/src/projecteuler/052.py b/src/projecteuler/052.py
deleted file mode 100644
index 2419a72..0000000
--- a/src/projecteuler/052.py
+++ /dev/null
@@ -1,22 +0,0 @@
-
-def digits(n):
- result = [0]*10
- while n > 0:
- digit = n % 10
- n /= 10
- result[digit] += 1
- return result
-
-def check(n):
- foo = [ digits(n*x) for x in range(1, 7) ]
- return foo == foo[1:]+foo[:1] # all array entries are equal
-
-n = 1
-
-while True:
- if check(n):
- break
- n += 1
-
-print n
-
diff --git a/src/projecteuler/053.py b/src/projecteuler/053.py
deleted file mode 100644
index 6e9461c..0000000
--- a/src/projecteuler/053.py
+++ /dev/null
@@ -1,14 +0,0 @@
-
-facs = [1]*101
-for i in range(1, 101):
- facs[i] = facs[i-1] * i
-
-count = 0
-for n in range(23, 101):
- for r in range(n+1):
- x = facs[n] / (facs[r]*facs[n-r])
- if x > 1000000:
- count += 1
-
-print count
-
diff --git a/src/projecteuler/054.py b/src/projecteuler/054.py
deleted file mode 100644
index bd7d14f..0000000
--- a/src/projecteuler/054.py
+++ /dev/null
@@ -1,287 +0,0 @@
-
-values = {
-'2': 2,
-'3': 3,
-'4': 4,
-'5': 5,
-'6': 6,
-'7': 7,
-'8': 8,
-'9': 9,
-'T': 10,
-'J': 11,
-'Q': 12,
-'K': 13,
-'A': 14
-}
-
-colors = {
-'H': 1,
-'C': 2,
-'S': 3,
-'D': 4
-}
-
-
-def handvalue(hand):
- return values[hand[0]]*10 + colors[hand[1]]
-
-def count_cards(hand):
- hand = [ x/10 for x in hand ]
- counter = { }
- for c in hand:
- if c in counter:
- counter[c] += 1
- else:
- counter[c] = 1
- return counter
-
-def high_card(hand):
- hand = [ x/10 for x in hand ]
- hand.sort()
- return hand[-1]
-
-def is_flush(hand):
- return (hand[0]%10 == hand[1]%10 == hand[2]%10 == hand[3]%10 == hand[4]%10)
-
-def is_straight(hand):
- hand = [ x/10 for x in hand ]
- hand.sort()
- return (hand[4] == hand[3]+1 == hand[2]+2 == hand[1]+3 == hand[0]+4)
-
-def is_straight_flush(hand):
- return is_flush(hand) and is_straight(hand)
-
-def is_royal_flush(hand):
- return is_straight_flush(hand) and high_card(hand) == values['A']
-
-def is_n_of_a_kind(hand, n):
- counter = count_cards(hand)
- for c in counter:
- if counter[c] == n:
- return True
- return False
-
-def is_four_of_a_kind(hand):
- return is_n_of_a_kind(hand, 4)
-
-def is_three_of_a_kind(hand):
- return is_n_of_a_kind(hand, 3)
-
-def is_one_pair(hand):
- return is_n_of_a_kind(hand, 2)
-
-def is_two_pairs(hand):
- counter = count_cards(hand)
- pairs = 0
- for c in counter:
- if counter[c] == 2 or counter[c] == 3:
- pairs += 1
- return pairs == 2
-
-def is_full_house(hand):
- return is_two_pairs(hand) and is_three_of_a_kind(hand)
-
-
-def better_hand(hand1, hand2):
- # both are straight flush
- if is_straight_flush(hand1):
- if high_card(hand1) > high_card(hand2):
- return 1
- else:
- return 2
-
- # both are four of a kind
- if is_four_of_a_kind(hand1):
- count1 = count_cards(hand1)
- count2 = count_cards(hand2)
- value4_1 = 0
- value4_2 = 0
- for c in count1:
- if count1[c] == 4:
- value4_1 = c
- break
- for c in count2:
- if count2[c] == 4:
- value4_2 = c
- break
- if value4_1 > value4_2:
- return 1
- else:
- return 2
-
- # both are full house
- if is_full_house(hand1):
- count1 = count_cards(hand1)
- count2 = count_cards(hand2)
- value3_1 = 0
- value3_2 = 0
- for c in count1:
- if count1[c] == 3:
- value3_1 = c
- break
- for c in count2:
- if count2[c] == 3:
- value3_2 = c
- break
- if value3_1 > value3_2:
- return 1
- else:
- return 2
-
- # both are flush
- if is_flush(hand1):
- hand1 = [ x/10 for x in hand1 ]
- hand2 = [ x/10 for x in hand2 ]
- hand1.sort()
- hand2.sort()
- for i in range(0, 5):
- if hand1[4-i] > hand2[4-i]:
- return 1
- elif hand2[4-i] > hand1[4-i]:
- return 2
- print "ERROR: no winner with hands: ", hand1, hand2 # should never be reached
-
- # both are straight
- if is_straight(hand1):
- if high_card(hand1) > high_card(hand2):
- return 1
- else:
- return 2
-
- # both are three of a kind
- if is_three_of_a_kind(hand1):
- count1 = count_cards(hand1)
- count2 = count_cards(hand2)
- value3_1 = 0
- value3_2 = 0
- for c in count1:
- if count1[c] == 3:
- value3_1 = c
- break
- for c in count2:
- if count2[c] == 3:
- value3_2 = c
- break
- if value3_1 > value3_2:
- return 1
- else:
- return 2
-
- # both are two pairs
- if is_two_pairs(hand1):
- count1 = count_cards(hand1)
- count2 = count_cards(hand2)
- value2_1 = []
- value1_1 = 0
- value2_2 = []
- value1_2 = 0
- for c in count1:
- if count1[c] == 2:
- value2_1.append(c)
- elif count1[c] == 1:
- value1_1 = c
- for c in count2:
- if count2[c] == 2:
- value2_2.append(c)
- elif count1[c] == 1:
- value1_2 = c
- value2_1.sort()
- value2_2.sort()
- if value2_1[1] > value2_2[1]:
- return 1
- elif value2_2[1] > value2_1[1]:
- return 2
- elif value2_1[0] > value2_2[0]:
- return 1
- elif value2_2[0] > value2_1[0]:
- return 2
- elif value1_1 > value1_2:
- return 1
- else:
- return 2
-
- # both are one pair
- if is_one_pair(hand1):
- count1 = count_cards(hand1)
- count2 = count_cards(hand2)
- value2_1 = 0
- value1_1 = []
- value2_2 = 0
- value1_2 = []
- for c in count1:
- if count1[c] == 2:
- value2_1 = c
- elif count1[c] == 1:
- value1_1.append(c)
- for c in count2:
- if count2[c] == 2:
- value2_2 = c
- elif count2[c] == 1:
- value1_2.append(c)
- value1_1.sort()
- value1_2.sort()
- if value2_1 > value2_2:
- return 1
- elif value2_2 > value2_1:
- return 2
- elif high_card(value1_1) > high_card(value1_2):
- return 1
- else:
- return 2
-
-
- # both are high card
- if high_card(hand1) > high_card(hand2):
- return 1
- else:
- return 2
-
-
-def rank(hand):
- if is_royal_flush(hand):
- return 10
- if is_straight_flush(hand):
- return 9
- if is_four_of_a_kind(hand):
- return 8
- if is_full_house(hand):
- return 7
- if is_flush(hand):
- return 6
- if is_straight(hand):
- return 5
- if is_three_of_a_kind(hand):
- return 4
- if is_two_pairs(hand):
- return 3
- if is_one_pair(hand):
- return 2
- return 1 # high card
-
-def winner(hand1, hand2):
- if rank(hand1) > rank(hand2):
- return 1
- if rank(hand2) > rank(hand1):
- return 2
- return better_hand(hand1, hand2)
-
-hands = []
-
-f = open('054.txt', 'r')
-for line in f:
- line.rstrip('\n')
- hands.append([ handvalue(x) for x in line.split(' ') ])
-f.close()
-
-count_win1 = 0
-
-for h in hands:
- hand1 = h[:5]
- hand2 = h[5:]
- if winner(hand1, hand2) == 1:
- count_win1 += 1
-
-print count_win1
-
-
diff --git a/src/projecteuler/054.txt b/src/projecteuler/054.txt
deleted file mode 100644
index 231e249..0000000
--- a/src/projecteuler/054.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-8C TS KC 9H 4S 7D 2S 5D 3S AC
-5C AD 5D AC 9C 7C 5H 8D TD KS
-3H 7H 6S KC JS QH TD JC 2D 8S
-TH 8H 5C QS TC 9H 4D JC KS JS
-7C 5H KC QH JD AS KH 4C AD 4S
-5H KS 9C 7D 9H 8D 3S 5D 5C AH
-6H 4H 5C 3H 2H 3S QH 5S 6S AS
-TD 8C 4H 7C TC KC 4C 3H 7S KS
-7C 9C 6D KD 3H 4C QS QC AC KH
-JC 6S 5H 2H 2D KD 9D 7C AS JS
-AD QH TH 9D 8H TS 6D 3S AS AC
-2H 4S 5C 5S TC KC JD 6C TS 3C
-QD AS 6H JS 2C 3D 9H KC 4H 8S
-KD 8S 9S 7C 2S 3S 6D 6S 4H KC
-3C 8C 2D 7D 4D 9S 4S QH 4H JD
-8C KC 7S TC 2D TS 8H QD AC 5C
-3D KH QD 6C 6S AD AS 8H 2H QS
-6S 8D 4C 8S 6C QH TC 6D 7D 9D
-2S 8D 8C 4C TS 9S 9D 9C AC 3D
-3C QS 2S 4H JH 3D 2D TD 8S 9H
-5H QS 8S 6D 3C 8C JD AS 7H 7D
-6H TD 9D AS JH 6C QC 9S KD JC
-AH 8S QS 4D TH AC TS 3C 3D 5C
-5S 4D JS 3D 8H 6C TS 3S AD 8C
-6D 7C 5D 5H 3S 5C JC 2H 5S 3D
-5H 6H 2S KS 3D 5D JD 7H JS 8H
-KH 4H AS JS QS QC TC 6D 7C KS
-3D QS TS 2H JS 4D AS 9S JC KD
-QD 5H 4D 5D KH 7H 3D JS KD 4H
-2C 9H 6H 5C 9D 6C JC 2D TH 9S
-7D 6D AS QD JH 4D JS 7C QS 5C
-3H KH QD AD 8C 8H 3S TH 9D 5S
-AH 9S 4D 9D 8S 4H JS 3C TC 8D
-2C KS 5H QD 3S TS 9H AH AD 8S
-5C 7H 5D KD 9H 4D 3D 2D KS AD
-KS KC 9S 6D 2C QH 9D 9H TS TC
-9C 6H 5D QH 4D AD 6D QC JS KH
-9S 3H 9D JD 5C 4D 9H AS TC QH
-2C 6D JC 9C 3C AD 9S KH 9D 7D
-KC 9C 7C JC JS KD 3H AS 3C 7D
-QD KH QS 2C 3S 8S 8H 9H 9C JC
-QH 8D 3C KC 4C 4H 6D AD 9H 9D
-3S KS QS 7H KH 7D 5H 5D JD AD
-2H 2C 6H TH TC 7D 8D 4H 8C AS
-4S 2H AC QC 3S 6D TH 4D 4C KH
-4D TC KS AS 7C 3C 6D 2D 9H 6C
-8C TD 5D QS 2C 7H 4C 9C 3H 9H
-5H JH TS 7S TD 6H AD QD 8H 8S
-5S AD 9C 8C 7C 8D 5H 9D 8S 2S
-4H KH KS 9S 2S KC 5S AD 4S 7D
-QS 9C QD 6H JS 5D AC 8D 2S AS
-KH AC JC 3S 9D 9S 3C 9C 5S JS
-AD 3C 3D KS 3S 5C 9C 8C TS 4S
-JH 8D 5D 6H KD QS QD 3D 6C KC
-8S JD 6C 3S 8C TC QC 3C QH JS
-KC JC 8H 2S 9H 9C JH 8S 8C 9S
-8S 2H QH 4D QC 9D KC AS TH 3C
-8S 6H TH 7C 2H 6S 3C 3H AS 7S
-QH 5S JS 4H 5H TS 8H AH AC JC
-9D 8H 2S 4S TC JC 3C 7H 3H 5C
-3D AD 3C 3S 4C QC AS 5D TH 8C
-6S 9D 4C JS KH AH TS JD 8H AD
-4C 6S 9D 7S AC 4D 3D 3S TC JD
-AD 7H 6H 4H JH KC TD TS 7D 6S
-8H JH TC 3S 8D 8C 9S 2C 5C 4D
-2C 9D KC QH TH QS JC 9C 4H TS
-QS 3C QD 8H KH 4H 8D TD 8S AC
-7C 3C TH 5S 8H 8C 9C JD TC KD
-QC TC JD TS 8C 3H 6H KD 7C TD
-JH QS KS 9C 6D 6S AS 9H KH 6H
-2H 4D AH 2D JH 6H TD 5D 4H JD
-KD 8C 9S JH QD JS 2C QS 5C 7C
-4S TC 7H 8D 2S 6H 7S 9C 7C KC
-8C 5D 7H 4S TD QC 8S JS 4H KS
-AD 8S JH 6D TD KD 7C 6C 2D 7D
-JC 6H 6S JS 4H QH 9H AH 4C 3C
-6H 5H AS 7C 7S 3D KH KC 5D 5C
-JC 3D TD AS 4D 6D 6S QH JD KS
-8C 7S 8S QH 2S JD 5C 7H AH QD
-8S 3C 6H 6C 2C 8D TD 7D 4C 4D
-5D QH KH 7C 2S 7H JS 6D QC QD
-AD 6C 6S 7D TH 6H 2H 8H KH 4H
-KS JS KD 5D 2D KH 7D 9C 8C 3D
-9C 6D QD 3C KS 3S 7S AH JD 2D
-AH QH AS JC 8S 8H 4C KC TH 7D
-JC 5H TD 7C 5D KD 4C AD 8H JS
-KC 2H AC AH 7D JH KH 5D 7S 6D
-9S 5S 9C 6H 8S TD JD 9H 6C AC
-7D 8S 6D TS KD 7H AC 5S 7C 5D
-AH QC JC 4C TC 8C 2H TS 2C 7D
-KD KC 6S 3D 7D 2S 8S 3H 5S 5C
-8S 5D 8H 4C 6H KC 3H 7C 5S KD
-JH 8C 3D 3C 6C KC TD 7H 7C 4C
-JC KC 6H TS QS TD KS 8H 8C 9S
-6C 5S 9C QH 7D AH KS KC 9S 2C
-4D 4S 8H TD 9C 3S 7D 9D AS TH
-6S 7D 3C 6H 5D KD 2C 5C 9D 9C
-2H KC 3D AD 3H QD QS 8D JC 4S
-8C 3H 9C 7C AD 5D JC 9D JS AS
-5D 9H 5C 7H 6S 6C QC JC QD 9S
-JC QS JH 2C 6S 9C QC 3D 4S TC
-4H 5S 8D 3D 4D 2S KC 2H JS 2C
-TD 3S TH KD 4D 7H JH JS KS AC
-7S 8C 9S 2D 8S 7D 5C AD 9D AS
-8C 7H 2S 6C TH 3H 4C 3S 8H AC
-KD 5H JC 8H JD 2D 4H TD JH 5C
-3D AS QH KS 7H JD 8S 5S 6D 5H
-9S 6S TC QS JC 5C 5D 9C TH 8C
-5H 3S JH 9H 2S 2C 6S 7S AS KS
-8C QD JC QS TC QC 4H AC KH 6C
-TC 5H 7D JH 4H 2H 8D JC KS 4D
-5S 9C KH KD 9H 5C TS 3D 7D 2D
-5H AS TC 4D 8C 2C TS 9D 3H 8D
-6H 8D 2D 9H JD 6C 4S 5H 5S 6D
-AD 9C JC 7D 6H 9S 6D JS 9H 3C
-AD JH TC QS 4C 5D 9S 7C 9C AH
-KD 6H 2H TH 8S QD KS 9D 9H AS
-4H 8H 8D 5H 6C AH 5S AS AD 8S
-QS 5D 4S 2H TD KS 5H AC 3H JC
-9C 7D QD KD AC 6D 5H QH 6H 5S
-KC AH QH 2H 7D QS 3H KS 7S JD
-6C 8S 3H 6D KS QD 5D 5C 8H TC
-9H 4D 4S 6S 9D KH QC 4H 6C JD
-TD 2D QH 4S 6H JH KD 3C QD 8C
-4S 6H 7C QD 9D AS AH 6S AD 3C
-2C KC TH 6H 8D AH 5C 6D 8S 5D
-TD TS 7C AD JC QD 9H 3C KC 7H
-5D 4D 5S 8H 4H 7D 3H JD KD 2D
-JH TD 6H QS 4S KD 5C 8S 7D 8H
-AC 3D AS 8C TD 7H KH 5D 6C JD
-9D KS 7C 6D QH TC JD KD AS KC
-JH 8S 5S 7S 7D AS 2D 3D AD 2H
-2H 5D AS 3C QD KC 6H 9H 9S 2C
-9D 5D TH 4C JH 3H 8D TC 8H 9H
-6H KD 2C TD 2H 6C 9D 2D JS 8C
-KD 7S 3C 7C AS QH TS AD 8C 2S
-QS 8H 6C JS 4C 9S QC AD TD TS
-2H 7C TS TC 8C 3C 9H 2D 6D JC
-TC 2H 8D JH KS 6D 3H TD TH 8H
-9D TD 9H QC 5D 6C 8H 8C KC TS
-2H 8C 3D AH 4D TH TC 7D 8H KC
-TS 5C 2D 8C 6S KH AH 5H 6H KC
-5S 5D AH TC 4C JD 8D 6H 8C 6C
-KC QD 3D 8H 2D JC 9H 4H AD 2S
-TD 6S 7D JS KD 4H QS 2S 3S 8C
-4C 9H JH TS 3S 4H QC 5S 9S 9C
-2C KD 9H JS 9S 3H JC TS 5D AC
-AS 2H 5D AD 5H JC 7S TD JS 4C
-2D 4S 8H 3D 7D 2C AD KD 9C TS
-7H QD JH 5H JS AC 3D TH 4C 8H
-6D KH KC QD 5C AD 7C 2D 4H AC
-3D 9D TC 8S QD 2C JC 4H JD AH
-6C TD 5S TC 8S AH 2C 5D AS AC
-TH 7S 3D AS 6C 4C 7H 7D 4H AH
-5C 2H KS 6H 7S 4H 5H 3D 3C 7H
-3C 9S AC 7S QH 2H 3D 6S 3S 3H
-2D 3H AS 2C 6H TC JS 6S 9C 6C
-QH KD QD 6D AC 6H KH 2C TS 8C
-8H 7D 3S 9H 5D 3H 4S QC 9S 5H
-2D 9D 7H 6H 3C 8S 5H 4D 3S 4S
-KD 9S 4S TC 7S QC 3S 8S 2H 7H
-TC 3D 8C 3H 6C 2H 6H KS KD 4D
-KC 3D 9S 3H JS 4S 8H 2D 6C 8S
-6H QS 6C TC QD 9H 7D 7C 5H 4D
-TD 9D 8D 6S 6C TC 5D TS JS 8H
-4H KC JD 9H TC 2C 6S 5H 8H AS
-JS 9C 5C 6S 9D JD 8H KC 4C 6D
-4D 8D 8S 6C 7C 6H 7H 8H 5C KC
-TC 3D JC 6D KS 9S 6H 7S 9C 2C
-6C 3S KD 5H TS 7D 9H 9S 6H KH
-3D QD 4C 6H TS AC 3S 5C 2H KD
-4C AS JS 9S 7C TS 7H 9H JC KS
-4H 8C JD 3H 6H AD 9S 4S 5S KS
-4C 2C 7D 3D AS 9C 2S QS KC 6C
-8S 5H 3D 2S AC 9D 6S 3S 4D TD
-QD TH 7S TS 3D AC 7H 6C 5D QC
-TC QD AD 9C QS 5C 8D KD 3D 3C
-9D 8H AS 3S 7C 8S JD 2D 8D KC
-4C TH AC QH JS 8D 7D 7S 9C KH
-9D 8D 4C JH 2C 2S QD KD TS 4H
-4D 6D 5D 2D JH 3S 8S 3H TC KH
-AD 4D 2C QS 8C KD JH JD AH 5C
-5C 6C 5H 2H JH 4H KS 7C TC 3H
-3C 4C QC 5D JH 9C QD KH 8D TC
-3H 9C JS 7H QH AS 7C 9H 5H JC
-2D 5S QD 4S 3C KC 6S 6C 5C 4C
-5D KH 2D TS 8S 9C AS 9S 7C 4C
-7C AH 8C 8D 5S KD QH QS JH 2C
-8C 9D AH 2H AC QC 5S 8H 7H 2C
-QD 9H 5S QS QC 9C 5H JC TH 4H
-6C 6S 3H 5H 3S 6H KS 8D AC 7S
-AC QH 7H 8C 4S KC 6C 3D 3S TC
-9D 3D JS TH AC 5H 3H 8S 3S TC
-QD KH JS KS 9S QC 8D AH 3C AC
-5H 6C KH 3S 9S JH 2D QD AS 8C
-6C 4D 7S 7H 5S JC 6S 9H 4H JH
-AH 5S 6H 9S AD 3S TH 2H 9D 8C
-4C 8D 9H 7C QC AD 4S 9C KC 5S
-9D 6H 4D TC 4C JH 2S 5D 3S AS
-2H 6C 7C KH 5C AD QS TH JD 8S
-3S 4S 7S AH AS KC JS 2S AD TH
-JS KC 2S 7D 8C 5C 9C TS 5H 9D
-7S 9S 4D TD JH JS KH 6H 5D 2C
-JD JS JC TH 2D 3D QD 8C AC 5H
-7S KH 5S 9D 5D TD 4S 6H 3C 2D
-4S 5D AC 8D 4D 7C AD AS AH 9C
-6S TH TS KS 2C QC AH AS 3C 4S
-2H 8C 3S JC 5C 7C 3H 3C KH JH
-7S 3H JC 5S 6H 4C 2S 4D KC 7H
-4D 7C 4H 9S 8S 6S AD TC 6C JC
-KH QS 3S TC 4C 8H 8S AC 3C TS
-QD QS TH 3C TS 7H 7D AH TD JC
-TD JD QC 4D 9S 7S TS AD 7D AC
-AH 7H 4S 6D 7C 2H 9D KS JC TD
-7C AH JD 4H 6D QS TS 2H 2C 5C
-TC KC 8C 9S 4C JS 3C JC 6S AH
-AS 7D QC 3D 5S JC JD 9D TD KH
-TH 3C 2S 6H AH AC 5H 5C 7S 8H
-QC 2D AC QD 2S 3S JD QS 6S 8H
-KC 4H 3C 9D JS 6H 3S 8S AS 8C
-7H KC 7D JD 2H JC QH 5S 3H QS
-9H TD 3S 8H 7S AC 5C 6C AH 7C
-8D 9H AH JD TD QS 7D 3S 9C 8S
-AH QH 3C JD KC 4S 5S 5D TD KS
-9H 7H 6S JH TH 4C 7C AD 5C 2D
-7C KD 5S TC 9D 6S 6C 5D 2S TH
-KC 9H 8D 5H 7H 4H QC 3D 7C AS
-6S 8S QC TD 4S 5C TH QS QD 2S
-8S 5H TH QC 9H 6S KC 7D 7C 5C
-7H KD AH 4D KH 5C 4S 2D KC QH
-6S 2C TD JC AS 4D 6C 8C 4H 5S
-JC TC JD 5S 6S 8D AS 9D AD 3S
-6D 6H 5D 5S TC 3D 7D QS 9D QD
-4S 6C 8S 3S 7S AD KS 2D 7D 7C
-KC QH JC AC QD 5D 8D QS 7H 7D
-JS AH 8S 5H 3D TD 3H 4S 6C JH
-4S QS 7D AS 9H JS KS 6D TC 5C
-2D 5C 6H TC 4D QH 3D 9H 8S 6C
-6D 7H TC TH 5S JD 5C 9C KS KD
-8D TD QH 6S 4S 6C 8S KC 5C TC
-5S 3D KS AC 4S 7D QD 4C TH 2S
-TS 8H 9S 6S 7S QH 3C AH 7H 8C
-4C 8C TS JS QC 3D 7D 5D 7S JH
-8S 7S 9D QC AC 7C 6D 2H JH KC
-JS KD 3C 6S 4S 7C AH QC KS 5H
-KS 6S 4H JD QS TC 8H KC 6H AS
-KH 7C TC 6S TD JC 5C 7D AH 3S
-3H 4C 4H TC TH 6S 7H 6D 9C QH
-7D 5H 4S 8C JS 4D 3D 8S QH KC
-3H 6S AD 7H 3S QC 8S 4S 7S JS
-3S JD KH TH 6H QS 9C 6C 2D QD
-4S QH 4D 5H KC 7D 6D 8D TH 5S
-TD AD 6S 7H KD KH 9H 5S KC JC
-3H QC AS TS 4S QD KS 9C 7S KC
-TS 6S QC 6C TH TC 9D 5C 5D KD
-JS 3S 4H KD 4C QD 6D 9S JC 9D
-8S JS 6D 4H JH 6H 6S 6C KS KH
-AC 7D 5D TC 9S KH 6S QD 6H AS
-AS 7H 6D QH 8D TH 2S KH 5C 5H
-4C 7C 3D QC TC 4S KH 8C 2D JS
-6H 5D 7S 5H 9C 9H JH 8S TH 7H
-AS JS 2S QD KH 8H 4S AC 8D 8S
-3H 4C TD KD 8C JC 5C QS 2D JD
-TS 7D 5D 6C 2C QS 2H 3C AH KS
-4S 7C 9C 7D JH 6C 5C 8H 9D QD
-2S TD 7S 6D 9C 9S QS KH QH 5C
-JC 6S 9C QH JH 8D 7S JS KH 2H
-8D 5H TH KC 4D 4S 3S 6S 3D QS
-2D JD 4C TD 7C 6D TH 7S JC AH
-QS 7S 4C TH 9D TS AD 4D 3H 6H
-2D 3H 7D JD 3D AS 2S 9C QC 8S
-4H 9H 9C 2C 7S JH KD 5C 5D 6H
-TC 9H 8H JC 3C 9S 8D KS AD KC
-TS 5H JD QS QH QC 8D 5D KH AH
-5D AS 8S 6S 4C AH QC QD TH 7H
-3H 4H 7D 6S 4S 9H AS 8H JS 9D
-JD 8C 2C 9D 7D 5H 5S 9S JC KD
-KD 9C 4S QD AH 7C AD 9D AC TD
-6S 4H 4S 9C 8D KS TC 9D JH 7C
-5S JC 5H 4S QH AC 2C JS 2S 9S
-8C 5H AS QD AD 5C 7D 8S QC TD
-JC 4C 8D 5C KH QS 4D 6H 2H 2C
-TH 4S 2D KC 3H QD AC 7H AD 9D
-KH QD AS 8H TH KC 8D 7S QH 8C
-JC 6C 7D 8C KH AD QS 2H 6S 2D
-JC KH 2D 7D JS QC 5H 4C 5D AD
-TS 3S AD 4S TD 2D TH 6S 9H JH
-9H 2D QS 2C 4S 3D KH AS AC 9D
-KH 6S 8H 4S KD 7D 9D TS QD QC
-JH 5H AH KS AS AD JC QC 5S KH
-5D 7D 6D KS KD 3D 7C 4D JD 3S
-AC JS 8D 5H 9C 3H 4H 4D TS 2C
-6H KS KH 9D 7C 2S 6S 8S 2H 3D
-6H AC JS 7S 3S TD 8H 3H 4H TH
-9H TC QC KC 5C KS 6H 4H AC 8S
-TC 7D QH 4S JC TS 6D 6C AC KH
-QH 7D 7C JH QS QD TH 3H 5D KS
-3D 5S 8D JS 4C 2C KS 7H 9C 4H
-5H 8S 4H TD 2C 3S QD QC 3H KC
-QC JS KD 9C AD 5S 9D 7D 7H TS
-8C JC KH 7C 7S 6C TS 2C QD TH
-5S 9D TH 3C 7S QH 8S 9C 2H 5H
-5D 9H 6H 2S JS KH 3H 7C 2H 5S
-JD 5D 5S 2C TC 2S 6S 6C 3C 8S
-4D KH 8H 4H 2D KS 3H 5C 2S 9H
-3S 2D TD 7H 8S 6H JD KC 9C 8D
-6S QD JH 7C 9H 5H 8S 8H TH TD
-QS 7S TD 7D TS JC KD 7C 3C 2C
-3C JD 8S 4H 2D 2S TD AS 4D AC
-AH KS 6C 4C 4S 7D 8C 9H 6H AS
-5S 3C 9S 2C QS KD 4D 4S AC 5D
-2D TS 2C JS KH QH 5D 8C AS KC
-KD 3H 6C TH 8S 7S KH 6H 9S AC
-6H 7S 6C QS AH 2S 2H 4H 5D 5H
-5H JC QD 2C 2S JD AS QC 6S 7D
-6C TC AS KD 8H 9D 2C 7D JH 9S
-2H 4C 6C AH 8S TD 3H TH 7C TS
-KD 4S TS 6C QH 8D 9D 9C AH 7D
-6D JS 5C QD QC 9C 5D 8C 2H KD
-3C QH JH AD 6S AH KC 8S 6D 6H
-3D 7C 4C 7S 5S 3S 6S 5H JC 3C
-QH 7C 5H 3C 3S 8C TS 4C KD 9C
-QD 3S 7S 5H 7H QH JC 7C 8C KD
-3C KD KH 2S 4C TS AC 6S 2C 7C
-2C KH 3C 4C 6H 4D 5H 5S 7S QD
-4D 7C 8S QD TS 9D KS 6H KD 3C
-QS 4D TS 7S 4C 3H QD 8D 9S TC
-TS QH AC 6S 3C 9H 9D QS 8S 6H
-3S 7S 5D 4S JS 2D 6C QH 6S TH
-4C 4H AS JS 5D 3D TS 9C AC 8S
-6S 9C 7C 3S 5C QS AD AS 6H 3C
-9S 8C 7H 3H 6S 7C AS 9H JD KH
-3D 3H 7S 4D 6C 7C AC 2H 9C TH
-4H 5S 3H AC TC TH 9C 9H 9S 8D
-8D 9H 5H 4D 6C 2H QD 6S 5D 3S
-4C 5C JD QS 4D 3H TH AC QH 8C
-QC 5S 3C 7H AD 4C KS 4H JD 6D
-QS AH 3H KS 9H 2S JS JH 5H 2H
-2H 5S TH 6S TS 3S KS 3C 5H JS
-2D 9S 7H 3D KC JH 6D 7D JS TD
-AC JS 8H 2C 8C JH JC 2D TH 7S
-5D 9S 8H 2H 3D TC AH JC KD 9C
-9D QD JC 2H 6D KH TS 9S QH TH
-2C 8D 4S JD 5H 3H TH TC 9C KC
-AS 3D 9H 7D 4D TH KH 2H 7S 3H
-4H 7S KS 2S JS TS 8S 2H QD 8D
-5S 6H JH KS 8H 2S QC AC 6S 3S
-JC AS AD QS 8H 6C KH 4C 4D QD
-2S 3D TS TD 9S KS 6S QS 5C 8D
-3C 6D 4S QC KC JH QD TH KH AD
-9H AH 4D KS 2S 8D JH JC 7C QS
-2D 6C TH 3C 8H QD QH 2S 3S KS
-6H 5D 9S 4C TS TD JS QD 9D JD
-5H 8H KH 8S KS 7C TD AD 4S KD
-2C 7C JC 5S AS 6C 7D 8S 5H 9C
-6S QD 9S TS KH QS 5S QH 3C KC
-7D 3H 3C KD 5C AS JH 7H 6H JD
-9D 5C 9H KC 8H KS 4S AD 4D 2S
-3S JD QD 8D 2S 7C 5S 6S 5H TS
-6D 9S KC TD 3S 6H QD JD 5C 8D
-5H 9D TS KD 8D 6H TD QC 4C 7D
-6D 4S JD 9D AH 9S AS TD 9H QD
-2D 5S 2H 9C 6H 9S TD QC 7D TC
-3S 2H KS TS 2C 9C 8S JS 9D 7D
-3C KC 6D 5D 6C 6H 8S AS 7S QS
-JH 9S 2H 8D 4C 8H 9H AD TH KH
-QC AS 2S JS 5C 6H KD 3H 7H 2C
-QD 8H 2S 8D 3S 6D AH 2C TC 5C
-JD JS TS 8S 3H 5D TD KC JC 6H
-6S QS TC 3H 5D AH JC 7C 7D 4H
-7C 5D 8H 9C 2H 9H JH KH 5S 2C
-9C 7H 6S TH 3S QC QD 4C AC JD
-2H 5D 9S 7D KC 3S QS 2D AS KH
-2S 4S 2H 7D 5C TD TH QH 9S 4D
-6D 3S TS 6H 4H KS 9D 8H 5S 2D
-9H KS 4H 3S 5C 5D KH 6H 6S JS
-KC AS 8C 4C JC KH QC TH QD AH
-6S KH 9S 2C 5H TC 3C 7H JC 4D
-JD 4S 6S 5S 8D 7H 7S 4D 4C 2H
-7H 9H 5D KH 9C 7C TS TC 7S 5H
-4C 8D QC TS 4S 9H 3D AD JS 7C
-8C QS 5C 5D 3H JS AH KC 4S 9D
-TS JD 8S QS TH JH KH 2D QD JS
-JD QC 5D 6S 9H 3S 2C 8H 9S TS
-2S 4C AD 7H JC 5C 2D 6D 4H 3D
-7S JS 2C 4H 8C AD QD 9C 3S TD
-JD TS 4C 6H 9H 7D QD 6D 3C AS
-AS 7C 4C 6S 5D 5S 5C JS QC 4S
-KD 6S 9S 7C 3C 5S 7D JH QD JS
-4S 7S JH 2C 8S 5D 7H 3D QH AD
-TD 6H 2H 8D 4H 2D 7C AD KH 5D
-TS 3S 5H 2C QD AH 2S 5C KH TD
-KC 4D 8C 5D AS 6C 2H 2S 9H 7C
-KD JS QC TS QS KH JH 2C 5D AD
-3S 5H KC 6C 9H 3H 2H AD 7D 7S
-7S JS JH KD 8S 7D 2S 9H 7C 2H
-9H 2D 8D QC 6S AD AS 8H 5H 6C
-2S 7H 6C 6D 7D 8C 5D 9D JC 3C
-7C 9C 7H JD 2H KD 3S KH AD 4S
-QH AS 9H 4D JD KS KD TS KH 5H
-4C 8H 5S 3S 3D 7D TD AD 7S KC
-JS 8S 5S JC 8H TH 9C 4D 5D KC
-7C 5S 9C QD 2C QH JS 5H 8D KH
-TD 2S KS 3D AD KC 7S TC 3C 5D
-4C 2S AD QS 6C 9S QD TH QH 5C
-8C AD QS 2D 2S KC JD KS 6C JC
-8D 4D JS 2H 5D QD 7S 7D QH TS
-6S 7H 3S 8C 8S 9D QS 8H 6C 9S
-4S TC 2S 5C QD 4D QS 6D TH 6S
-3S 5C 9D 6H 8D 4C 7D TC 7C TD
-AH 6S AS 7H 5S KD 3H 5H AC 4C
-8D 8S AH KS QS 2C AD 6H 7D 5D
-6H 9H 9S 2H QS 8S 9C 5D 2D KD
-TS QC 5S JH 7D 7S TH 9S 9H AC
-7H 3H 6S KC 4D 6D 5C 4S QD TS
-TD 2S 7C QD 3H JH 9D 4H 7S 7H
-KS 3D 4H 5H TC 2S AS 2D 6D 7D
-8H 3C 7H TD 3H AD KC TH 9C KH
-TC 4C 2C 9S 9D 9C 5C 2H JD 3C
-3H AC TS 5D AD 8D 6H QC 6S 8C
-2S TS 3S JD 7H 8S QH 4C 5S 8D
-AC 4S 6C 3C KH 3D 7C 2D 8S 2H
-4H 6C 8S TH 2H 4S 8H 9S 3H 7S
-7C 4C 9C 2C 5C AS 5D KD 4D QH
-9H 4H TS AS 7D 8D 5D 9S 8C 2H
-QC KD AC AD 2H 7S AS 3S 2D 9S
-2H QC 8H TC 6D QD QS 5D KH 3C
-TH JD QS 4C 2S 5S AD 7H 3S AS
-7H JS 3D 6C 3S 6D AS 9S AC QS
-9C TS AS 8C TC 8S 6H 9D 8D 6C
-4D JD 9C KC 7C 6D KS 3S 8C AS
-3H 6S TC 8D TS 3S KC 9S 7C AS
-8C QC 4H 4S 8S 6C 3S TC AH AC
-4D 7D 5C AS 2H 6S TS QC AD TC
-QD QC 8S 4S TH 3D AH TS JH 4H
-5C 2D 9S 2C 3H 3C 9D QD QH 7D
-KC 9H 6C KD 7S 3C 4D AS TC 2D
-3D JS 4D 9D KS 7D TH QC 3H 3C
-8D 5S 2H 9D 3H 8C 4C 4H 3C TH
-JC TH 4S 6S JD 2D 4D 6C 3D 4C
-TS 3S 2D 4H AC 2C 6S 2H JH 6H
-TD 8S AD TC AH AC JH 9S 6S 7S
-6C KC 4S JD 8D 9H 5S 7H QH AH
-KD 8D TS JH 5C 5H 3H AD AS JS
-2D 4H 3D 6C 8C 7S AD 5D 5C 8S
-TD 5D 7S 9C 4S 5H 6C 8C 4C 8S
-JS QH 9C AS 5C QS JC 3D QC 7C
-JC 9C KH JH QS QC 2C TS 3D AD
-5D JH AC 5C 9S TS 4C JD 8C KS
-KC AS 2D KH 9H 2C 5S 4D 3D 6H
-TH AH 2D 8S JC 3D 8C QH 7S 3S
-8H QD 4H JC AS KH KS 3C 9S 6D
-9S QH 7D 9C 4S AC 7H KH 4D KD
-AH AD TH 6D 9C 9S KD KS QH 4H
-QD 6H 9C 7C QS 6D 6S 9D 5S JH
-AH 8D 5H QD 2H JC KS 4H KH 5S
-5C 2S JS 8D 9C 8C 3D AS KC AH
-JD 9S 2H QS 8H 5S 8C TH 5C 4C
-QC QS 8C 2S 2C 3S 9C 4C KS KH
-2D 5D 8S AH AD TD 2C JS KS 8C
-TC 5S 5H 8H QC 9H 6H JD 4H 9S
-3C JH 4H 9H AH 4S 2H 4C 8D AC
-8S TH 4D 7D 6D QD QS 7S TC 7C
-KH 6D 2D JD 5H JS QD JH 4H 4S
-9C 7S JH 4S 3S TS QC 8C TC 4H
-QH 9D 4D JH QS 3S 2C 7C 6C 2D
-4H 9S JD 5C 5H AH 9D TS 2D 4C
-KS JH TS 5D 2D AH JS 7H AS 8D
-JS AH 8C AD KS 5S 8H 2C 6C TH
-2H 5D AD AC KS 3D 8H TS 6H QC
-6D 4H TS 9C 5H JS JH 6S JD 4C
-JH QH 4H 2C 6D 3C 5D 4C QS KC
-6H 4H 6C 7H 6S 2S 8S KH QC 8C
-3H 3D 5D KS 4H TD AD 3S 4D TS
-5S 7C 8S 7D 2C KS 7S 6C 8C JS
-5D 2H 3S 7C 5C QD 5H 6D 9C 9H
-JS 2S KD 9S 8D TD TS AC 8C 9D
-5H QD 2S AC 8C 9H KS 7C 4S 3C
-KH AS 3H 8S 9C JS QS 4S AD 4D
-AS 2S TD AD 4D 9H JC 4C 5H QS
-5D 7C 4H TC 2D 6C JS 4S KC 3S
-4C 2C 5D AC 9H 3D JD 8S QS QH
-2C 8S 6H 3C QH 6D TC KD AC AH
-QC 6C 3S QS 4S AC 8D 5C AD KH
-5S 4C AC KH AS QC 2C 5C 8D 9C
-8H JD 3C KH 8D 5C 9C QD QH 9D
-7H TS 2C 8C 4S TD JC 9C 5H QH
-JS 4S 2C 7C TH 6C AS KS 7S JD
-JH 7C 9H 7H TC 5H 3D 6D 5D 4D
-2C QD JH 2H 9D 5S 3D TD AD KS
-JD QH 3S 4D TH 7D 6S QS KS 4H
-TC KS 5S 8D 8H AD 2S 2D 4C JH
-5S JH TC 3S 2D QS 9D 4C KD 9S
-AC KH 3H AS 9D KC 9H QD 6C 6S
-9H 7S 3D 5C 7D KC TD 8H 4H 6S
-3C 7H 8H TC QD 4D 7S 6S QH 6C
-6D AD 4C QD 6C 5D 7D 9D KS TS
-JH 2H JD 9S 7S TS KH 8D 5D 8H
-2D 9S 4C 7D 9D 5H QD 6D AC 6S
-7S 6D JC QD JH 4C 6S QS 2H 7D
-8C TD JH KD 2H 5C QS 2C JS 7S
-TC 5H 4H JH QD 3S 5S 5D 8S KH
-KS KH 7C 2C 5D JH 6S 9C 6D JC
-5H AH JD 9C JS KC 2H 6H 4D 5S
-AS 3C TH QC 6H 9C 8S 8C TD 7C
-KC 2C QD 9C KH 4D 7S 3C TS 9H
-9C QC 2S TS 8C TD 9S QD 3S 3C
-4D 9D TH JH AH 6S 2S JD QH JS
-QD 9H 6C KD 7D 7H 5D 6S 8H AH
-8H 3C 4S 2H 5H QS QH 7S 4H AC
-QS 3C 7S 9S 4H 3S AH KS 9D 7C
-AD 5S 6S 2H 2D 5H TC 4S 3C 8C
-QH TS 6S 4D JS KS JH AS 8S 6D
-2C 8S 2S TD 5H AS TC TS 6C KC
-KC TS 8H 2H 3H 7C 4C 5S TH TD
-KD AD KH 7H 7S 5D 5H 5S 2D 9C
-AD 9S 3D 7S 8C QC 7C 9C KD KS
-3C QC 9S 8C 4D 5C AS QD 6C 2C
-2H KC 8S JD 7S AC 8D 5C 2S 4D
-9D QH 3D 2S TC 3S KS 3C 9H TD
-KD 6S AC 2C 7H 5H 3S 6C 6H 8C
-QH TC 8S 6S KH TH 4H 5D TS 4D
-8C JS 4H 6H 2C 2H 7D AC QD 3D
-QS KC 6S 2D 5S 4H TD 3H JH 4C
-7S 5H 7H 8H KH 6H QS TH KD 7D
-5H AD KD 7C KH 5S TD 6D 3C 6C
-8C 9C 5H JD 7C KC KH 7H 2H 3S
-7S 4H AD 4D 8S QS TH 3D 7H 5S
-8D TC KS KD 9S 6D AD JD 5C 2S
-7H 8H 6C QD 2H 6H 9D TC 9S 7C
-8D 6D 4C 7C 6C 3C TH KH JS JH
-5S 3S 8S JS 9H AS AD 8H 7S KD
-JH 7C 2C KC 5H AS AD 9C 9S JS
-AD AC 2C 6S QD 7C 3H TH KS KD
-9D JD 4H 8H 4C KH 7S TS 8C KC
-3S 5S 2H 7S 6H 7D KS 5C 6D AD
-5S 8C 9H QS 7H 7S 2H 6C 7D TD
-QS 5S TD AC 9D KC 3D TC 2D 4D
-TD 2H 7D JD QD 4C 7H 5D KC 3D
-4C 3H 8S KD QH 5S QC 9H TC 5H
-9C QD TH 5H TS 5C 9H AH QH 2C
-4D 6S 3C AC 6C 3D 2C 2H TD TH
-AC 9C 5D QC 4D AD 8D 6D 8C KC
-AD 3C 4H AC 8D 8H 7S 9S TD JC
-4H 9H QH JS 2D TH TD TC KD KS
-5S 6S 9S 8D TH AS KH 5H 5C 8S
-JD 2S 9S 6S 5S 8S 5D 7S 7H 9D
-5D 8C 4C 9D AD TS 2C 7D KD TC
-8S QS 4D KC 5C 8D 4S KH JD KD
-AS 5C AD QH 7D 2H 9S 7H 7C TC
-2S 8S JD KH 7S 6C 6D AD 5D QC
-9H 6H 3S 8C 8H AH TC 4H JS TD
-2C TS 4D 7H 2D QC 9C 5D TH 7C
-6C 8H QC 5D TS JH 5C 5H 9H 4S
-2D QC 7H AS JS 8S 2H 4C 4H 8D
-JS 6S AC KD 3D 3C 4S 7H TH KC
-QH KH 6S QS 5S 4H 3C QD 3S 3H
-7H AS KH 8C 4H 9C 5S 3D 6S TS
-9C 7C 3H 5S QD 2C 3D AD AC 5H
-JH TD 2D 4C TS 3H KH AD 3S 7S
-AS 4C 5H 4D 6S KD JC 3C 6H 2D
-3H 6S 8C 2D TH 4S AH QH AD 5H
-7C 2S 9H 7H KC 5C 6D 5S 3H JC
-3C TC 9C 4H QD TD JH 6D 9H 5S
-7C 6S 5C 5D 6C 4S 7H 9H 6H AH
-AD 2H 7D KC 2C 4C 2S 9S 7H 3S
-TH 4C 8S 6S 3S AD KS AS JH TD
-5C TD 4S 4D AD 6S 5D TC 9C 7D
-8H 3S 4D 4S 5S 6H 5C AC 3H 3D
-9H 3C AC 4S QS 8S 9D QH 5H 4D
-JC 6C 5H TS AC 9C JD 8C 7C QD
-8S 8H 9C JD 2D QC QH 6H 3C 8D
-KS JS 2H 6H 5H QH QS 3H 7C 6D
-TC 3H 4S 7H QC 2H 3S 8C JS KH
-AH 8H 5S 4C 9H JD 3H 7S JC AC
-3C 2D 4C 5S 6C 4S QS 3S JD 3D
-5H 2D TC AH KS 6D 7H AD 8C 6H
-6C 7S 3C JD 7C 8H KS KH AH 6D
-AH 7D 3H 8H 8S 7H QS 5H 9D 2D
-JD AC 4H 7S 8S 9S KS AS 9D QH
-7S 2C 8S 5S JH QS JC AH KD 4C
-AH 2S 9H 4H 8D TS TD 6H QH JD
-4H JC 3H QS 6D 7S 9C 8S 9D 8D
-5H TD 4S 9S 4C 8C 8D 7H 3H 3D
-QS KH 3S 2C 2S 3C 7S TD 4S QD
-7C TD 4D 5S KH AC AS 7H 4C 6C
-2S 5H 6D JD 9H QS 8S 2C 2H TD
-2S TS 6H 9H 7S 4H JC 4C 5D 5S
-2C 5H 7D 4H 3S QH JC JS 6D 8H
-4C QH 7C QD 3S AD TH 8S 5S TS
-9H TC 2S TD JC 7D 3S 3D TH QH
-7D 4C 8S 5C JH 8H 6S 3S KC 3H
-JC 3H KH TC QH TH 6H 2C AC 5H
-QS 2H 9D 2C AS 6S 6C 2S 8C 8S
-9H 7D QC TH 4H KD QS AC 7S 3C
-4D JH 6S 5S 8H KS 9S QC 3S AS
-JD 2D 6S 7S TC 9H KC 3H 7D KD
-2H KH 7C 4D 4S 3H JS QD 7D KC
-4C JC AS 9D 3C JS 6C 8H QD 4D
-AH JS 3S 6C 4C 3D JH 6D 9C 9H
-9H 2D 8C 7H 5S KS 6H 9C 2S TC
-6C 8C AD 7H 6H 3D KH AS 5D TH
-KS 8C 3S TS 8S 4D 5S 9S 6C 4H
-9H 4S 4H 5C 7D KC 2D 2H 9D JH
-5C JS TC 9D 9H 5H 7S KH JC 6S
-7C 9H 8H 4D JC KH JD 2H TD TC
-8H 6C 2H 2C KH 6H 9D QS QH 5H
-AC 7D 2S 3D QD JC 2D 8D JD JH
-2H JC 2D 7H 2C 3C 8D KD TD 4H
-3S 4H 6D 8D TS 3H TD 3D 6H TH
-JH JC 3S AC QH 9H 7H 8S QC 2C
-7H TD QS 4S 8S 9C 2S 5D 4D 2H
-3D TS 3H 2S QC 8H 6H KC JC KS
-5D JD 7D TC 8C 6C 9S 3D 8D AC
-8H 6H JH 6C 5D 8D 8S 4H AD 2C
-9D 4H 2D 2C 3S TS AS TC 3C 5D
-4D TH 5H KS QS 6C 4S 2H 3D AD
-5C KC 6H 2C 5S 3C 4D 2D 9H 9S
-JD 4C 3H TH QH 9H 5S AH 8S AC
-7D 9S 6S 2H TD 9C 4H 8H QS 4C
-3C 6H 5D 4H 8C 9C KC 6S QD QS
-3S 9H KD TC 2D JS 8C 6S 4H 4S
-2S 4C 8S QS 6H KH 3H TH 8C 5D
-2C KH 5S 3S 7S 7H 6C 9D QD 8D
-8H KS AC 2D KH TS 6C JS KC 7H
-9C KS 5C TD QC AH 6C 5H 9S 7C
-5D 4D 3H 4H 6S 7C 7S AH QD TD
-2H 7D QC 6S TC TS AH 7S 9D 3H
-TH 5H QD 9S KS 7S 7C 6H 8C TD
-TH 2D 4D QC 5C 7D JD AH 9C 4H
-4H 3H AH 8D 6H QC QH 9H 2H 2C
-2D AD 4C TS 6H 7S TH 4H QS TD
-3C KD 2H 3H QS JD TC QC 5D 8H
-KS JC QD TH 9S KD 8D 8C 2D 9C
-3C QD KD 6D 4D 8D AH AD QC 8S
-8H 3S 9D 2S 3H KS 6H 4C 7C KC
-TH 9S 5C 3D 7D 6H AC 7S 4D 2C
-5C 3D JD 4D 2D 6D 5H 9H 4C KH
-AS 7H TD 6C 2H 3D QD KS 4C 4S
-JC 3C AC 7C JD JS 8H 9S QC 5D
-JD 6S 5S 2H AS 8C 7D 5H JH 3D
-8D TC 5S 9S 8S 3H JC 5H 7S AS
-5C TD 3D 7D 4H 8D 7H 4D 5D JS
-QS 9C KS TD 2S 8S 5C 2H 4H AS
-TH 7S 4H 7D 3H JD KD 5D 2S KC
-JD 7H 4S 8H 4C JS 6H QH 5S 4H
-2C QS 8C 5S 3H QC 2S 6C QD AD
-8C 3D JD TC 4H 2H AD 5S AC 2S
-5D 2C JS 2D AD 9D 3D 4C 4S JH
-8D 5H 5D 6H 7S 4D KS 9D TD JD
-3D 6D 9C 2S AS 7D 5S 5C 8H JD
-7C 8S 3S 6S 5H JD TC AD 7H 7S
-2S 9D TS 4D AC 8D 6C QD JD 3H
-9S KH 2C 3C AC 3D 5H 6H 8D 5D
-KS 3D 2D 6S AS 4C 2S 7C 7H KH
-AC 2H 3S JC 5C QH 4D 2D 5H 7S
-TS AS JD 8C 6H JC 8S 5S 2C 5D
-7S QH 7H 6C QC 8H 2D 7C JD 2S
-2C QD 2S 2H JC 9C 5D 2D JD JH
-7C 5C 9C 8S 7D 6D 8D 6C 9S JH
-2C AD 6S 5H 3S KS 7S 9D KH 4C
-7H 6C 2C 5C TH 9D 8D 3S QC AH
-5S KC 6H TC 5H 8S TH 6D 3C AH
-9C KD 4H AD TD 9S 4S 7D 6H 5D
-7H 5C 5H 6D AS 4C KD KH 4H 9D
-3C 2S 5C 6C JD QS 2H 9D 7D 3H
-AC 2S 6S 7S JS QD 5C QS 6H AD
-5H TH QC 7H TC 3S 7C 6D KC 3D
-4H 3D QC 9S 8H 2C 3S JC KS 5C
-4S 6S 2C 6H 8S 3S 3D 9H 3H JS
-4S 8C 4D 2D 8H 9H 7D 9D AH TS
-9S 2C 9H 4C 8D AS 7D 3D 6D 5S
-6S 4C 7H 8C 3H 5H JC AH 9D 9C
-2S 7C 5S JD 8C 3S 3D 4D 7D 6S
-3C KC 4S 5D 7D 3D JD 7H 3H 4H
-9C 9H 4H 4D TH 6D QD 8S 9S 7S
-2H AC 8S 4S AD 8C 2C AH 7D TC
-TS 9H 3C AD KS TC 3D 8C 8H JD
-QC 8D 2C 3C 7D 7C JD 9H 9C 6C
-AH 6S JS JH 5D AS QC 2C JD TD
-9H KD 2H 5D 2D 3S 7D TC AH TS
-TD 8H AS 5D AH QC AC 6S TC 5H
-KS 4S 7H 4D 8D 9C TC 2H 6H 3H
-3H KD 4S QD QH 3D 8H 8C TD 7S
-8S JD TC AH JS QS 2D KH KS 4D
-3C AD JC KD JS KH 4S TH 9H 2C
-QC 5S JS 9S KS AS 7C QD 2S JD
-KC 5S QS 3S 2D AC 5D 9H 8H KS
-6H 9C TC AD 2C 6D 5S JD 6C 7C
-QS KH TD QD 2C 3H 8S 2S QC AH
-9D 9H JH TC QH 3C 2S JS 5C 7H
-6C 3S 3D 2S 4S QD 2D TH 5D 2C
-2D 6H 6D 2S JC QH AS 7H 4H KH
-5H 6S KS AD TC TS 7C AC 4S 4H
-AD 3C 4H QS 8C 9D KS 2H 2D 4D
-4S 9D 6C 6D 9C AC 8D 3H 7H KD
-JC AH 6C TS JD 6D AD 3S 5D QD
-JC JH JD 3S 7S 8S JS QC 3H 4S
-JD TH 5C 2C AD JS 7H 9S 2H 7S
-8D 3S JH 4D QC AS JD 2C KC 6H
-2C AC 5H KD 5S 7H QD JH AH 2D
-JC QH 8D 8S TC 5H 5C AH 8C 6C
-3H JS 8S QD JH 3C 4H 6D 5C 3S
-6D 4S 4C AH 5H 5S 3H JD 7C 8D
-8H AH 2H 3H JS 3C 7D QC 4H KD
-6S 2H KD 5H 8H 2D 3C 8S 7S QD
-2S 7S KC QC AH TC QS 6D 4C 8D
-5S 9H 2C 3S QD 7S 6C 2H 7C 9D
-3C 6C 5C 5S JD JC KS 3S 5D TS
-7C KS 6S 5S 2S 2D TC 2H 5H QS
-AS 7H 6S TS 5H 9S 9D 3C KD 2H
-4S JS QS 3S 4H 7C 2S AC 6S 9D
-8C JH 2H 5H 7C 5D QH QS KH QC
-3S TD 3H 7C KC 8D 5H 8S KH 8C
-4H KH JD TS 3C 7H AS QC JS 5S
-AH 9D 2C 8D 4D 2D 6H 6C KC 6S
-2S 6H 9D 3S 7H 4D KH 8H KD 3D
-9C TC AC JH KH 4D JD 5H TD 3S
-7S 4H 9D AS 4C 7D QS 9S 2S KH
-3S 8D 8S KS 8C JC 5C KH 2H 5D
-8S QH 2C 4D KC JS QC 9D AC 6H
-8S 8C 7C JS JD 6S 4C 9C AC 4S
-QH 5D 2C 7D JC 8S 2D JS JH 4C
-JS 4C 7S TS JH KC KH 5H QD 4S
-QD 8C 8D 2D 6S TD 9D AC QH 5S
-QH QC JS 3D 3C 5C 4H KH 8S 7H
-7C 2C 5S JC 8S 3H QC 5D 2H KC
-5S 8D KD 6H 4H QD QH 6D AH 3D
-7S KS 6C 2S 4D AC QS 5H TS JD
-7C 2D TC 5D QS AC JS QC 6C KC
-2C KS 4D 3H TS 8S AD 4H 7S 9S
-QD 9H QH 5H 4H 4D KH 3S JC AD
-4D AC KC 8D 6D 4C 2D KH 2C JD
-2C 9H 2D AH 3H 6D 9C 7D TC KS
-8C 3H KD 7C 5C 2S 4S 5H AS AH
-TH JD 4H KD 3H TC 5C 3S AC KH
-6D 7H AH 7S QC 6H 2D TD JD AS
-JH 5D 7H TC 9S 7D JC AS 5S KH
-2H 8C AD TH 6H QD KD 9H 6S 6C
-QH KC 9D 4D 3S JS JH 4H 2C 9H
-TC 7H KH 4H JC 7D 9S 3H QS 7S
-AD 7D JH 6C 7H 4H 3S 3H 4D QH
-JD 2H 5C AS 6C QC 4D 3C TC JH
-AC JD 3H 6H 4C JC AD 7D 7H 9H
-4H TC TS 2C 8C 6S KS 2H JD 9S
-4C 3H QS QC 9S 9H 6D KC 9D 9C
-5C AD 8C 2C QH TH QD JC 8D 8H
-QC 2C 2S QD 9C 4D 3S 8D JH QS
-9D 3S 2C 7S 7C JC TD 3C TC 9H
-3C TS 8H 5C 4C 2C 6S 8D 7C 4H
-KS 7H 2H TC 4H 2C 3S AS AH QS
-8C 2D 2H 2C 4S 4C 6S 7D 5S 3S
-TH QC 5D TD 3C QS KD KC KS AS
-4D AH KD 9H KS 5C 4C 6H JC 7S
-KC 4H 5C QS TC 2H JC 9S AH QH
-4S 9H 3H 5H 3C QD 2H QC JH 8H
-5D AS 7H 2C 3D JH 6H 4C 6S 7D
-9C JD 9H AH JS 8S QH 3H KS 8H
-3S AC QC TS 4D AD 3D AH 8S 9H
-7H 3H QS 9C 9S 5H JH JS AH AC
-8D 3C JD 2H AC 9C 7H 5S 4D 8H
-7C JH 9H 6C JS 9S 7H 8C 9D 4H
-2D AS 9S 6H 4D JS JH 9H AD QD
-6H 7S JH KH AH 7H TD 5S 6S 2C
-8H JH 6S 5H 5S 9D TC 4C QC 9S
-7D 2C KD 3H 5H AS QD 7H JS 4D
-TS QH 6C 8H TH 5H 3C 3H 9C 9D
-AD KH JS 5D 3H AS AC 9S 5C KC
-2C KH 8C JC QS 6D AH 2D KC TC
-9D 3H 2S 7C 4D 6D KH KS 8D 7D
-9H 2S TC JH AC QC 3H 5S 3S 8H
-3S AS KD 8H 4C 3H 7C JH QH TS
-7S 6D 7H 9D JH 4C 3D 3S 6C AS
-4S 2H 2C 4C 8S 5H KC 8C QC QD
-3H 3S 6C QS QC 2D 6S 5D 2C 9D
-2H 8D JH 2S 3H 2D 6C 5C 7S AD
-9H JS 5D QH 8S TS 2H 7S 6S AD
-6D QC 9S 7H 5H 5C 7D KC JD 4H
-QC 5S 9H 9C 4D 6S KS 2S 4C 7C
-9H 7C 4H 8D 3S 6H 5C 8H JS 7S
-2D 6H JS TD 4H 4D JC TH 5H KC
-AC 7C 8D TH 3H 9S 2D 4C KC 4D
-KD QS 9C 7S 3D KS AD TS 4C 4H
-QH 9C 8H 2S 7D KS 7H 5D KD 4C
-9C 2S 2H JC 6S 6C TC QC JH 5C
-7S AC 8H KC 8S 6H QS JC 3D 6S
-JS 2D JH 8C 4S 6H 8H 6D 5D AD
-6H 7D 2S 4H 9H 7C AS AC 8H 5S
-3C JS 4S 6D 5H 2S QH 6S 9C 2C
-3D 5S 6S 9S 4C QS 8D QD 8S TC
-9C 3D AH 9H 5S 2C 7D AD JC 3S
-7H TC AS 3C 6S 6D 7S KH KC 9H
-3S TC 8H 6S 5H JH 8C 7D AC 2S
-QD 9D 9C 3S JC 8C KS 8H 5D 4D
-JS AH JD 6D 9D 8C 9H 9S 8H 3H
-2D 6S 4C 4D 8S AD 4S TC AH 9H
-TS AC QC TH KC 6D 4H 7S 8C 2H
-3C QD JS 9D 5S JC AH 2H TS 9H
-3H 4D QH 5D 9C 5H 7D 4S JC 3S
-8S TH 3H 7C 2H JD JS TS AC 8D
-9C 2H TD KC JD 2S 8C 5S AD 2C
-3D KD 7C 5H 4D QH QD TC 6H 7D
-7H 2C KC 5S KD 6H AH QC 7S QH
-6H 5C AC 5H 2C 9C 2D 7C TD 2S
-4D 9D AH 3D 7C JD 4H 8C 4C KS
-TH 3C JS QH 8H 4C AS 3D QS QC
-4D 7S 5H JH 6D 7D 6H JS KH 3C
-QD 8S 7D 2H 2C 7C JC 2S 5H 8C
-QH 8S 9D TC 2H AD 7C 8D QD 6S
-3S 7C AD 9H 2H 9S JD TS 4C 2D
-3S AS 4H QC 2C 8H 8S 7S TD TC
-JH TH TD 3S 4D 4H 5S 5D QS 2C
-8C QD QH TC 6D 4S 9S 9D 4H QC
-8C JS 9D 6H JD 3H AD 6S TD QC
-KC 8S 3D 7C TD 7D 8D 9H 4S 3S
-6C 4S 3D 9D KD TC KC KS AC 5S
-7C 6S QH 3D JS KD 6H 6D 2D 8C
-JD 2S 5S 4H 8S AC 2D 6S TS 5C
-5H 8C 5S 3C 4S 3D 7C 8D AS 3H
-AS TS 7C 3H AD 7D JC QS 6C 6H
-3S 9S 4C AC QH 5H 5D 9H TS 4H
-6C 5C 7H 7S TD AD JD 5S 2H 2S
-7D 6C KC 3S JD 8D 8S TS QS KH
-8S QS 8D 6C TH AC AH 2C 8H 9S
-7H TD KH QH 8S 3D 4D AH JD AS
-TS 3D 2H JC 2S JH KH 6C QC JS
-KC TH 2D 6H 7S 2S TC 8C 9D QS
-3C 9D 6S KH 8H 6D 5D TH 2C 2H
-6H TC 7D AD 4D 8S TS 9H TD 7S
-JS 6D JD JC 2H AC 6C 3D KH 8D
-KH JD 9S 5D 4H 4C 3H 7S QS 5C
-4H JD 5D 3S 3C 4D KH QH QS 7S
-JD TS 8S QD AH 4C 6H 3S 5S 2C
-QS 3D JD AS 8D TH 7C 6S QC KS
-7S 2H 8C QC 7H AC 6D 2D TH KH
-5S 6C 7H KH 7D AH 8C 5C 7S 3D
-3C KD AD 7D 6C 4D KS 2D 8C 4S
-7C 8D 5S 2D 2S AH AD 2C 9D TD
-3C AD 4S KS JH 7C 5C 8C 9C TH
-AS TD 4D 7C JD 8C QH 3C 5H 9S
-3H 9C 8S 9S 6S QD KS AH 5H JH
-QC 9C 5S 4H 2H TD 7D AS 8C 9D
-8C 2C 9D KD TC 7S 3D KH QC 3C
-4D AS 4C QS 5S 9D 6S JD QH KS
-6D AH 6C 4C 5H TS 9H 7D 3D 5S
-QS JD 7C 8D 9C AC 3S 6S 6C KH
-8H JH 5D 9S 6D AS 6S 3S QC 7H
-QD AD 5C JH 2H AH 4H AS KC 2C
-JH 9C 2C 6H 2D JS 5D 9H KC 6D
-7D 9D KD TH 3H AS 6S QC 6H AD
-JD 4H 7D KC 3H JS 3C TH 3D QS
-4C 3H 8C QD 5H 6H AS 8H AD JD
-TH 8S KD 5D QC 7D JS 5S 5H TS
-7D KC 9D QS 3H 3C 6D TS 7S AH
-7C 4H 7H AH QC AC 4D 5D 6D TH
-3C 4H 2S KD 8H 5H JH TC 6C JD
-4S 8C 3D 4H JS TD 7S JH QS KD
-7C QC KD 4D 7H 6S AD TD TC KH
-5H 9H KC 3H 4D 3D AD 6S QD 6H
-TH 7C 6H TS QH 5S 2C KC TD 6S
-7C 4D 5S JD JH 7D AC KD KH 4H
-7D 6C 8D 8H 5C JH 8S QD TH JD
-8D 7D 6C 7C 9D KD AS 5C QH JH
-9S 2C 8C 3C 4C KS JH 2D 8D 4H
-7S 6C JH KH 8H 3H 9D 2D AH 6D
-4D TC 9C 8D 7H TD KS TH KD 3C
-JD 9H 8D QD AS KD 9D 2C 2S 9C
-8D 3H 5C 7H KS 5H QH 2D 8C 9H
-2D TH 6D QD 6C KC 3H 3S AD 4C
-4H 3H JS 9D 3C TC 5H QH QC JC
-3D 5C 6H 3S 3C JC 5S 7S 2S QH
-AC 5C 8C 4D 5D 4H 2S QD 3C 3H
-2C TD AH 9C KD JS 6S QD 4C QC
-QS 8C 3S 4H TC JS 3H 7C JC AD
-5H 4D 9C KS JC TD 9S TS 8S 9H
-QD TS 7D AS AC 2C TD 6H 8H AH
-6S AD 8C 4S 9H 8D 9D KH 8S 3C
-QS 4D 2D 7S KH JS JC AD 4C 3C
-QS 9S 7H KC TD TH 5H JS AC JH
-6D AC 2S QS 7C AS KS 6S KH 5S
-6D 8H KH 3C QS 2H 5C 9C 9D 6C
-JS 2C 4C 6H 7D JC AC QD TD 3H
-4H QC 8H JD 4C KD KS 5C KC 7S
-6D 2D 3H 2S QD 5S 7H AS TH 6S
-AS 6D 8D 2C 8S TD 8H QD JC AH
-9C 9H 2D TD QH 2H 5C TC 3D 8H
-KC 8S 3D KH 2S TS TC 6S 4D JH
-9H 9D QS AC KC 6H 5D 4D 8D AH
-9S 5C QS 4H 7C 7D 2H 8S AD JS
-3D AC 9S AS 2C 2D 2H 3H JC KH
-7H QH KH JD TC KS 5S 8H 4C 8D
-2H 7H 3S 2S 5H QS 3C AS 9H KD
-AD 3D JD 6H 5S 9C 6D AC 9S 3S
-3D 5D 9C 2D AC 4S 2S AD 6C 6S
-QC 4C 2D 3H 6S KC QH QD 2H JH
-QC 3C 8S 4D 9S 2H 5C 8H QS QD
-6D KD 6S 7H 3S KH 2H 5C JC 6C
-3S 9S TC 6S 8H 2D AD 7S 8S TS
-3C 6H 9C 3H 5C JC 8H QH TD QD
-3C JS QD 5D TD 2C KH 9H TH AS
-9S TC JD 3D 5C 5H AD QH 9H KC
-TC 7H 4H 8H 3H TD 6S AC 7C 2S
-QS 9D 5D 3C JC KS 4D 6C JH 2S
-9S 6S 3C 7H TS 4C KD 6D 3D 9C
-2D 9H AH AC 7H 2S JH 3S 7C QC
-QD 9H 3C 2H AC AS 8S KD 8C KH
-2D 7S TD TH 6D JD 8D 4D 2H 5S
-8S QH KD JD QS JH 4D KC 5H 3S
-3C KH QC 6D 8H 3S AH 7D TD 2D
-5S 9H QH 4S 6S 6C 6D TS TH 7S
-6C 4C 6D QS JS 9C TS 3H 8D 8S
-JS 5C 7S AS 2C AH 2H AD 5S TC
-KD 6C 9C 9D TS 2S JC 4H 2C QD
-QS 9H TC 3H KC KS 4H 3C AD TH
-KH 9C 2H KD 9D TC 7S KC JH 2D
-7C 3S KC AS 8C 5D 9C 9S QH 3H
-2D 8C TD 4C 2H QC 5D TC 2C 7D
-KS 4D 6C QH TD KH 5D 7C AD 8D
-2S 9S 8S 4C 8C 3D 6H QD 7C 7H
-6C 8S QH 5H TS 5C 3C 4S 2S 2H
-8S 6S 2H JC 3S 3H 9D 8C 2S 7H
-QC 2C 8H 9C AC JD 4C 4H 6S 3S
-3H 3S 7D 4C 9S 5H 8H JC 3D TC
-QH 2S 2D 9S KD QD 9H AD 6D 9C
-8D 2D KS 9S JC 4C JD KC 4S TH
-KH TS 6D 4D 5C KD 5H AS 9H AD
-QD JS 7C 6D 5D 5C TH 5H QH QS
-9D QH KH 5H JH 4C 4D TC TH 6C
-KH AS TS 9D KD 9C 7S 4D 8H 5S
-KH AS 2S 7D 9D 4C TS TH AH 7C
-KS 4D AC 8S 9S 8D TH QH 9D 5C
-5D 5C 8C QS TC 4C 3D 3S 2C 8D
-9D KS 2D 3C KC 4S 8C KH 6C JC
-8H AH 6H 7D 7S QD 3C 4C 6C KC
-3H 2C QH 8H AS 7D 4C 8C 4H KC
-QD 5S 4H 2C TD AH JH QH 4C 8S
-3H QS 5S JS 8H 2S 9H 9C 3S 2C
-6H TS 7S JC QD AC TD KC 5S 3H
-QH AS QS 7D JC KC 2C 4C 5C 5S
-QH 3D AS JS 4H 8D 7H JC 2S 9C
-5D 4D 2S 4S 9D 9C 2D QS 8H 7H
-6D 7H 3H JS TS AC 2D JH 7C 8S
-JH 5H KC 3C TC 5S 9H 4C 8H 9D
-8S KC 5H 9H AD KS 9D KH 8D AH
-JC 2H 9H KS 6S 3H QC 5H AH 9C
-5C KH 5S AD 6C JC 9H QC 9C TD
-5S 5D JC QH 2D KS 8H QS 2H TS
-JH 5H 5S AH 7H 3C 8S AS TD KH
-6H 3D JD 2C 4C KC 7S AH 6C JH
-4C KS 9D AD 7S KC 7D 8H 3S 9C
-7H 5C 5H 3C 8H QC 3D KH 6D JC
-2D 4H 5D 7D QC AD AH 9H QH 8H
-KD 8C JS 9D 3S 3C 2H 5D 6D 2S
-8S 6S TS 3C 6H 8D 5S 3H TD 6C
-KS 3D JH 9C 7C 9S QS 5S 4H 6H
-7S 6S TH 4S KC KD 3S JC JH KS
-7C 3C 2S 6D QH 2C 7S 5H 8H AH
-KC 8D QD 6D KH 5C 7H 9D 3D 9C
-6H 2D 8S JS 9S 2S 6D KC 7C TC
-KD 9C JH 7H KC 8S 2S 7S 3D 6H
-4H 9H 2D 4C 8H 7H 5S 8S 2H 8D
-AD 7C 3C 7S 5S 4D 9H 3D JC KH
-5D AS 7D 6D 9C JC 4C QH QS KH
-KD JD 7D 3D QS QC 8S 6D JS QD
-6S 8C 5S QH TH 9H AS AC 2C JD
-QC KS QH 7S 3C 4C 5C KC 5D AH
-6C 4H 9D AH 2C 3H KD 3D TS 5C
-TD 8S QS AS JS 3H KD AC 4H KS
-7D 5D TS 9H 4H 4C 9C 2H 8C QC
-2C 7D 9H 4D KS 4C QH AD KD JS
-QD AD AH KH 9D JS 9H JC KD JD
-8S 3C 4S TS 7S 4D 5C 2S 6H 7C
-JS 7S 5C KD 6D QH 8S TD 2H 6S
-QH 6C TC 6H TD 4C 9D 2H QC 8H
-3D TS 4D 2H 6H 6S 2C 7H 8S 6C
-9H 9D JD JH 3S AH 2C 6S 3H 8S
-2C QS 8C 5S 3H 2S 7D 3C AD 4S
-5C QC QH AS TS 4S 6S 4C 5H JS
-JH 5C TD 4C 6H JS KD KH QS 4H
-TC KH JC 4D 9H 9D 8D KC 3C 8H
-2H TC 8S AD 9S 4H TS 7H 2C 5C
-4H 2S 6C 5S KS AH 9C 7C 8H KD
-TS QH TD QS 3C JH AH 2C 8D 7D
-5D KC 3H 5S AC 4S 7H QS 4C 2H
-3D 7D QC KH JH 6D 6C TD TH KD
-5S 8D TH 6C 9D 7D KH 8C 9S 6D
-JD QS 7S QC 2S QH JC 4S KS 8D
-7S 5S 9S JD KD 9C JC AD 2D 7C
-4S 5H AH JH 9C 5D TD 7C 2D 6S
-KC 6C 7H 6S 9C QD 5S 4H KS TD
-6S 8D KS 2D TH TD 9H JD TS 3S
-KH JS 4H 5D 9D TC TD QC JD TS
-QS QD AC AD 4C 6S 2D AS 3H KC
-4C 7C 3C TD QS 9C KC AS 8D AD
-KC 7H QC 6D 8H 6S 5S AH 7S 8C
-3S AD 9H JC 6D JD AS KH 6S JH
-AD 3D TS KS 7H JH 2D JS QD AC
-9C JD 7C 6D TC 6H 6C JC 3D 3S
-QC KC 3S JC KD 2C 8D AH QS TS
-AS KD 3D JD 8H 7C 8C 5C QD 6C
diff --git a/src/projecteuler/055.py b/src/projecteuler/055.py
deleted file mode 100644
index d623d9b..0000000
--- a/src/projecteuler/055.py
+++ /dev/null
@@ -1,17 +0,0 @@
-
-def lychrel(x):
- for i in xrange(50):
- t = x + int(str(x)[::-1])
- if t == int(str(t)[::-1]):
- return False
- x = t
- return True
-
-count = 0
-
-for i in xrange(1, 10000):
- if lychrel(i):
- count += 1
-
-print count
-
diff --git a/src/projecteuler/056.py b/src/projecteuler/056.py
deleted file mode 100644
index 567f41d..0000000
--- a/src/projecteuler/056.py
+++ /dev/null
@@ -1,18 +0,0 @@
-
-def digit_sum(n):
- s = 0
- while n > 0:
- s += n % 10
- n /= 10
- return s
-
-max_sum = 0
-
-for i in range(2, 100):
- for j in range(2, 100):
- s = digit_sum(i**j)
- if s > max_sum:
- max_sum = s
-
-print max_sum
-
diff --git a/src/projecteuler/057.py b/src/projecteuler/057.py
deleted file mode 100644
index 8098995..0000000
--- a/src/projecteuler/057.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-def get_fraction(c):
- (n, d) = (1, 2)
- for i in xrange(1, c):
- (n, d) = (2*d+n, d) # add 2
- (n, d) = (d, n) # 1/x, swap entries
- return (d+n, d) # add 1
-
-count = 0
-for i in xrange(1, 1000):
- (n, d) = get_fraction(i)
- if len(str(n)) > len(str(d)):
- count += 1
-
-print count
-
diff --git a/src/projecteuler/058.py b/src/projecteuler/058.py
deleted file mode 100644
index a483fac..0000000
--- a/src/projecteuler/058.py
+++ /dev/null
@@ -1,39 +0,0 @@
-from common import sieve
-
-primes = sieve(30000).primes()
-prime_list = list(primes)
-prime_list.sort()
-
-def is_prime(n):
- if n in primes:
- return True
- for p in prime_list:
- if p*p > n:
- return True
- if n % p == 0:
- return False
- return True
-
-def count_primes(numbers):
- prime = 0
- for n in numbers:
- if is_prime(n):
- prime += 1
- return prime
-
-#numbers = [1, 3, 5, 7, 9]
-prime_count = 3
-number_count = 5
-level = 2
-last = 9
-
-while 10*prime_count >= number_count:
- step = 2 * level
- numbers = [last+step, last+2*step, last+3*step, last+4*step]
- prime_count += count_primes(numbers)
- number_count += 4
- level += 1
- last += 4*step
-
-print 2*(level-1) + 1
-
diff --git a/src/projecteuler/059.py b/src/projecteuler/059.py
deleted file mode 100644
index 449afb7..0000000
--- a/src/projecteuler/059.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import string
-
-keys = []
-
-for a in string.lowercase:
- for b in string.lowercase:
- for c in string.lowercase:
- keys.append(a+b+c)
-
-f = open('059.txt', 'r')
-content = f.read().split(',')
-f.close()
-
-cipher = [ int(i) for i in content ]
-cipher_len = len(cipher)
-
-for key in keys:
- decoded = ""
- for p in range(0, cipher_len):
- decoded += chr(cipher[p] ^ ord(key[p%3]))
- if decoded.find(" the ") != -1 and decoded.find(" and ") != -1:
- break
-
-#print decoded
-#print key
-
-print sum([ ord(x) for x in decoded ])
-
diff --git a/src/projecteuler/059.txt b/src/projecteuler/059.txt
deleted file mode 100644
index 08cee2d..0000000
--- a/src/projecteuler/059.txt
+++ /dev/null
@@ -1 +0,0 @@
-79,59,12,2,79,35,8,28,20,2,3,68,8,9,68,45,0,12,9,67,68,4,7,5,23,27,1,21,79,85,78,79,85,71,38,10,71,27,12,2,79,6,2,8,13,9,1,13,9,8,68,19,7,1,71,56,11,21,11,68,6,3,22,2,14,0,30,79,1,31,6,23,19,10,0,73,79,44,2,79,19,6,28,68,16,6,16,15,79,35,8,11,72,71,14,10,3,79,12,2,79,19,6,28,68,32,0,0,73,79,86,71,39,1,71,24,5,20,79,13,9,79,16,15,10,68,5,10,3,14,1,10,14,1,3,71,24,13,19,7,68,32,0,0,73,79,87,71,39,1,71,12,22,2,14,16,2,11,68,2,25,1,21,22,16,15,6,10,0,79,16,15,10,22,2,79,13,20,65,68,41,0,16,15,6,10,0,79,1,31,6,23,19,28,68,19,7,5,19,79,12,2,79,0,14,11,10,64,27,68,10,14,15,2,65,68,83,79,40,14,9,1,71,6,16,20,10,8,1,79,19,6,28,68,14,1,68,15,6,9,75,79,5,9,11,68,19,7,13,20,79,8,14,9,1,71,8,13,17,10,23,71,3,13,0,7,16,71,27,11,71,10,18,2,29,29,8,1,1,73,79,81,71,59,12,2,79,8,14,8,12,19,79,23,15,6,10,2,28,68,19,7,22,8,26,3,15,79,16,15,10,68,3,14,22,12,1,1,20,28,72,71,14,10,3,79,16,15,10,68,3,14,22,12,1,1,20,28,68,4,14,10,71,1,1,17,10,22,71,10,28,19,6,10,0,26,13,20,7,68,14,27,74,71,89,68,32,0,0,71,28,1,9,27,68,45,0,12,9,79,16,15,10,68,37,14,20,19,6,23,19,79,83,71,27,11,71,27,1,11,3,68,2,25,1,21,22,11,9,10,68,6,13,11,18,27,68,19,7,1,71,3,13,0,7,16,71,28,11,71,27,12,6,27,68,2,25,1,21,22,11,9,10,68,10,6,3,15,27,68,5,10,8,14,10,18,2,79,6,2,12,5,18,28,1,71,0,2,71,7,13,20,79,16,2,28,16,14,2,11,9,22,74,71,87,68,45,0,12,9,79,12,14,2,23,2,3,2,71,24,5,20,79,10,8,27,68,19,7,1,71,3,13,0,7,16,92,79,12,2,79,19,6,28,68,8,1,8,30,79,5,71,24,13,19,1,1,20,28,68,19,0,68,19,7,1,71,3,13,0,7,16,73,79,93,71,59,12,2,79,11,9,10,68,16,7,11,71,6,23,71,27,12,2,79,16,21,26,1,71,3,13,0,7,16,75,79,19,15,0,68,0,6,18,2,28,68,11,6,3,15,27,68,19,0,68,2,25,1,21,22,11,9,10,72,71,24,5,20,79,3,8,6,10,0,79,16,8,79,7,8,2,1,71,6,10,19,0,68,19,7,1,71,24,11,21,3,0,73,79,85,87,79,38,18,27,68,6,3,16,15,0,17,0,7,68,19,7,1,71,24,11,21,3,0,71,24,5,20,79,9,6,11,1,71,27,12,21,0,17,0,7,68,15,6,9,75,79,16,15,10,68,16,0,22,11,11,68,3,6,0,9,72,16,71,29,1,4,0,3,9,6,30,2,79,12,14,2,68,16,7,1,9,79,12,2,79,7,6,2,1,73,79,85,86,79,33,17,10,10,71,6,10,71,7,13,20,79,11,16,1,68,11,14,10,3,79,5,9,11,68,6,2,11,9,8,68,15,6,23,71,0,19,9,79,20,2,0,20,11,10,72,71,7,1,71,24,5,20,79,10,8,27,68,6,12,7,2,31,16,2,11,74,71,94,86,71,45,17,19,79,16,8,79,5,11,3,68,16,7,11,71,13,1,11,6,1,17,10,0,71,7,13,10,79,5,9,11,68,6,12,7,2,31,16,2,11,68,15,6,9,75,79,12,2,79,3,6,25,1,71,27,12,2,79,22,14,8,12,19,79,16,8,79,6,2,12,11,10,10,68,4,7,13,11,11,22,2,1,68,8,9,68,32,0,0,73,79,85,84,79,48,15,10,29,71,14,22,2,79,22,2,13,11,21,1,69,71,59,12,14,28,68,14,28,68,9,0,16,71,14,68,23,7,29,20,6,7,6,3,68,5,6,22,19,7,68,21,10,23,18,3,16,14,1,3,71,9,22,8,2,68,15,26,9,6,1,68,23,14,23,20,6,11,9,79,11,21,79,20,11,14,10,75,79,16,15,6,23,71,29,1,5,6,22,19,7,68,4,0,9,2,28,68,1,29,11,10,79,35,8,11,74,86,91,68,52,0,68,19,7,1,71,56,11,21,11,68,5,10,7,6,2,1,71,7,17,10,14,10,71,14,10,3,79,8,14,25,1,3,79,12,2,29,1,71,0,10,71,10,5,21,27,12,71,14,9,8,1,3,71,26,23,73,79,44,2,79,19,6,28,68,1,26,8,11,79,11,1,79,17,9,9,5,14,3,13,9,8,68,11,0,18,2,79,5,9,11,68,1,14,13,19,7,2,18,3,10,2,28,23,73,79,37,9,11,68,16,10,68,15,14,18,2,79,23,2,10,10,71,7,13,20,79,3,11,0,22,30,67,68,19,7,1,71,8,8,8,29,29,71,0,2,71,27,12,2,79,11,9,3,29,71,60,11,9,79,11,1,79,16,15,10,68,33,14,16,15,10,22,73
diff --git a/src/projecteuler/060.py b/src/projecteuler/060.py
deleted file mode 100644
index 22d1311..0000000
--- a/src/projecteuler/060.py
+++ /dev/null
@@ -1,49 +0,0 @@
-from common import sieve
-
-#
-# WARNING: uses a lot of RAM!
-#
-# notes:
-# - limit:1000000, sieve:50000000 -> no result when starting with ["3"] or ["7"]
-# - limit:800000, sieve:50000000 -> no result!
-# - limit:100000, sieve:100000000 -> [['13', '5197', '5701', '6733', '8389']]
-#
-#
-
-limit = 9000
-
-primes = sieve(int(str(limit)+str(limit))).primes()
-prime_list = [ p for p in primes if p < limit]
-prime_list.sort()
-prime_list_str = [ str(p) for p in prime_list ]
-
-def check_list(l):
- result = []
- for sublist in l:
- for p in prime_list_str:
- isprime = True
- for n in sublist:
- if int(n+p) not in primes or int(p+n) not in primes:
- isprime = False
- break
- if isprime:
- result += [ sublist+[p] ]
-
- return result
-
-
-def cleanup(l):
- result = []
- for sublist in l:
- sublist.sort()
- if sublist not in result:
- result += [sublist]
- return result
-
-
-l = [ [p] for p in prime_list_str ]
-for i in range(4):
- l = cleanup(check_list(l))
-
-print l
-
diff --git a/src/projecteuler/061.py b/src/projecteuler/061.py
deleted file mode 100644
index d9688e1..0000000
--- a/src/projecteuler/061.py
+++ /dev/null
@@ -1,53 +0,0 @@
-
-import sys
-
-triangle = set([ n*(n+1)/2 for n in range(45,141) ])
-square = set([ n*n for n in range(32,99) ])
-pentagonal = set([ n*(3*n-1)/2 for n in range(26,82) ])
-hexagonal = set([ n*(2*n-1) for n in range(23,71) ])
-heptagonal = set([ n*(5*n-3)/2 for n in range(21,64) ])
-octagonal = set([ n*(3*n-2) for n in range(19,59) ])
-
-whole = set(triangle | square | pentagonal | hexagonal | heptagonal | octagonal)
-
-
-def check_cond(testset):
- check = 0
- for e in testset:
- if e in octagonal:
- check |= 1
- elif e in heptagonal:
- check |= 2
- elif e in hexagonal:
- check |= 4
- elif e in pentagonal:
- check |= 8
- elif e in square:
- check |= 16
- elif e in triangle:
- check |= 32
- return check == 63
-
-for i0 in whole:
- t0 = i0 % 100
- tail0 = [ n for n in whole if t0*100 < n < (t0+1)*100 ]
- for i1 in tail0:
- t1 = i1 % 100
- tail1 = [ n for n in whole if t1*100 < n < (t1+1)*100 ]
- for i2 in tail1:
- t2 = i2 % 100
- tail2 = [ n for n in whole if t2*100 < n < (t2+1)*100 ]
- for i3 in tail2:
- t3 = i3 % 100
- tail3 = [ n for n in whole if t3*100 < n < (t3+1)*100 ]
- for i4 in tail3:
- t4 = i4 % 100
- tail4 = [ n for n in whole if t4*100 < n < (t4+1)*100 ]
- for i5 in tail4:
- if i5 % 100 != i0 / 100:
- continue
- s = set([i0, i1, i2, i3, i4, i5])
- if len(s) == 6 and check_cond(s):
- print sum(s)
- sys.exit(0)
-
diff --git a/src/projecteuler/062.c b/src/projecteuler/062.c
deleted file mode 100644
index 4ba3350..0000000
--- a/src/projecteuler/062.c
+++ /dev/null
@@ -1,57 +0,0 @@
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-struct number
-{
- char digits[10];
-};
-
-const int cubecount = 30000;
-struct number* cubedigits;
-
-int main(void)
-{
- int i, j;
-
- cubedigits = (struct number*) malloc(cubecount*sizeof(struct number));
- memset(cubedigits, 0, cubecount*sizeof(struct number));
-
- for(i=1; i<cubecount; i++)
- {
- unsigned long long c = (unsigned long long)i*i*i;
- int smallest = 0;
- char count;
-
- while(c > 0)
- {
- char digit = c % 10;
- cubedigits[i].digits[digit]++;
- c /= 10;
- }
-
- // search for permutations (i.e. same digits)
- count = 0;
- for(j=1; j<i; j++)
- {
- if(memcmp(cubedigits[i].digits, cubedigits[j].digits, sizeof(struct number)) == 0)
- {
- if(smallest == 0)
- smallest = j;
-
- count++;
- }
- }
-
- if(count == 4) // 4 additional permutations
- {
- printf("%lli\n", (unsigned long long)smallest*smallest*smallest);
- break;
- }
- }
-
- free(cubedigits);
-
- return 0;
-}
-
diff --git a/src/projecteuler/063.py b/src/projecteuler/063.py
deleted file mode 100644
index f80058b..0000000
--- a/src/projecteuler/063.py
+++ /dev/null
@@ -1,23 +0,0 @@
-
-import math
-
-upper = 9+1
-
-digits = []
-
-# borders searched manually...
-digits += xrange(1, upper)
-digits += [x*x for x in xrange(4, upper)]
-digits += [math.pow(x,3) for x in xrange(5, upper)]
-digits += [math.pow(x,4) for x in xrange(6, upper)]
-digits += [math.pow(x,5) for x in xrange(7, upper)]
-digits += [math.pow(x,6) for x in xrange(7, upper)]
-digits += [math.pow(x,7) for x in xrange(8, upper)]
-digits += [math.pow(x,8) for x in xrange(8, upper)]
-digits += [math.pow(x,9) for x in xrange(8, upper)]
-digits += [math.pow(x,10) for x in xrange(8, upper)]
-for i in xrange(11, 21+1):
- digits += [math.pow(x,i) for x in xrange(9, upper)]
-
-print len(digits)
-
diff --git a/src/projecteuler/064.c b/src/projecteuler/064.c
deleted file mode 100644
index 0e60211..0000000
--- a/src/projecteuler/064.c
+++ /dev/null
@@ -1,84 +0,0 @@
-#include <math.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-
-const int size = 100;
-double *fraction;
-int pos = 0;
-
-void continued_fraction(int n)
-{
- double sqrtn, x, y, an, a0;
-
- memset(fraction, 0, size*sizeof(double));
- pos = 0;
-
- sqrtn = sqrt((double)n);
- a0 = floor(sqrtn);
-
- if((int)sqrtn*sqrtn == n) // works only for rational square roots
- {
- fraction[pos] = sqrtn;
- return;
- }
-
- //
- // floor + ( sqrt(23) - x ) / y
- // nenner = (23 - x*x)
- // tmp = y * (sqrt(23) + x) / nenner)
- // an = floor(tmp)
- // x = an*nenner/y - x
- //
- x = a0;
- y = 1.0;
-
- while(1)
- {
- double denominator = (n - x*x);
- double tmp = y * (sqrtn + x) / denominator;
- an = floor(tmp);
- x = (an * denominator / y) - x;
- y = denominator / y;
-
- fraction[pos++] = an;
-
- if(an == 2*a0)
- break;
- }
-
- /*
- // not working because of double imprecision
- while(1)
- {
- an = floorl(a);
- r = 1/(a - an);
- a = r;
-
- fraction[++pos] = an;
-
- if(an == 2*a0)
- break;
- }
- */
-}
-
-int main(void)
-{
- int i, count=0;
-
- fraction = (double*) malloc(size*sizeof(double));
-
- for(i=2; i<=10000; i++)
- {
- continued_fraction(i);
- if(pos > 0 && pos&1 == 1)
- count++;
- }
-
- printf("%i\n", count);
-
- return 0;
-}
-
diff --git a/src/projecteuler/065.c b/src/projecteuler/065.c
deleted file mode 100644
index 94c17fd..0000000
--- a/src/projecteuler/065.c
+++ /dev/null
@@ -1,40 +0,0 @@
-#include <gmp.h>
-#include <stdio.h>
-
-#define limit 100
-
-unsigned int start = 2;
-unsigned int factors[limit-1];
-
-int main(void)
-{
- int pos, k=1, sum;
- mpz_t numerator, denominator;
-
- for(pos=0; pos<limit-1; pos++)
- {
- if(pos % 3 == 1)
- factors[pos] = 2*(k++);
- else
- factors[pos] = 1;
- }
-
- mpz_init_set_ui(numerator, 1);
- mpz_init_set_ui(denominator, factors[limit-2]);
- for(pos=limit-3; pos>=0; pos--)
- {
- mpz_addmul_ui(numerator, denominator, factors[pos]); // numerator += denominator * factors[pos]
- mpz_swap(numerator, denominator);
- }
-
- mpz_addmul_ui(numerator, denominator, start); // numerator += denominator * start
-
- sum = 0;
- while(mpz_cmp_ui(numerator, 0) > 0)
- sum += mpz_fdiv_q_ui(numerator, numerator, 10);
-
- printf("%li\n", sum);
-
- return 0;
-}
-
diff --git a/src/projecteuler/066.c b/src/projecteuler/066.c
deleted file mode 100644
index 3c1014e..0000000
--- a/src/projecteuler/066.c
+++ /dev/null
@@ -1,112 +0,0 @@
-#include <gmp.h>
-#include <math.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-// numerator/denominator pairs of continued fractions are solutions to pell's equations
-
-/*
- * taken from problem 65
- *
- * numerator, denominator: resulting num / denom are stored there
- * limit: depth of continued fraction
- * start: decimal part (pre-period)
- * factors, factor_len: period of continued fraction with factor_len elements
- *
- */
-void compute(mpz_t numerator, mpz_t denominator, unsigned int limit,
- unsigned long start, const unsigned int* factors, unsigned int factor_len)
-{
- int i;
- mpz_set_ui(numerator, 1);
- mpz_set_ui(denominator, factors[limit % factor_len]);
- for(i=limit-1; i>=0; i--)
- {
- mpz_addmul_ui(numerator, denominator, factors[i % factor_len]);
- mpz_swap(numerator, denominator);
- }
- mpz_addmul_ui(numerator, denominator, start);
-}
-
-// taken from problem 64
-int continued_fraction(unsigned int* fraction, unsigned int n)
-{
- double sqrtn, x, y;
- unsigned int an, a0, pos=0;
-
- sqrtn = sqrt((double)n);
- a0 = (int)floor(sqrtn);
-
- fraction[pos++] = sqrtn;
-
- if((int)sqrtn*sqrtn == n) // works only for rational square roots
- return 1;
-
- x = (double)a0;
- y = 1.0;
-
- while(1)
- {
- double denominator = (n - x*x);
- double tmp = y * (sqrtn + x) / denominator;
- an = (int)floor(tmp);
- x = (an * denominator / y) - x;
- y = denominator / y;
-
- fraction[pos++] = an;
-
- if(an == 2*a0)
- break;
- }
-
- return pos;
-}
-
-const int max_period_size = 100;
-
-int main(void)
-{
- int d, i, maxd=0;
- mpz_t maxx, numerator, denominator, tmp1, tmp2;
- unsigned int* fraction = (unsigned int*) malloc(max_period_size*sizeof(unsigned int));
-
- mpz_init_set_ui(maxx, 0);
- mpz_init(numerator);
- mpz_init(denominator);
- mpz_init(tmp1);
- mpz_init(tmp2);
-
- for(d=2; d<=1000; d++)
- {
-
- memset(fraction, 0, max_period_size*sizeof(unsigned int));
- int frac_len = continued_fraction(fraction, d);
-
- if(frac_len == 1) // no solution for squares
- continue;
-
- for(i=0;;i++)
- {
- compute(numerator, denominator, i, fraction[0], &(fraction[1]), frac_len-1);
-
- // numerator^2 - denominator^2 * d
- mpz_mul(tmp1, numerator, numerator);
- mpz_mul(tmp2, denominator, denominator);
- mpz_submul_ui(tmp1, tmp2, d);
- if(mpz_cmp_ui(tmp1, 1) == 0)
- break;
- }
-
- if(mpz_cmp(numerator, maxx) > 0)
- {
- mpz_set(maxx, numerator);
- maxd = d;
- }
- }
-
- printf("%d\n", maxd);
-
- return 0;
-}
-
diff --git a/src/projecteuler/067.py b/src/projecteuler/067.py
deleted file mode 100644
index 2678fd9..0000000
--- a/src/projecteuler/067.py
+++ /dev/null
@@ -1,20 +0,0 @@
-
-triangle = []
-
-f = open('067.txt', 'r')
-for line in f:
- line.rstrip('\n')
- row_str = line.split(' ')
- row_int = [ int(x) for x in row_str ]
- triangle.append(row_int)
-f.close()
-
-for i in range(1, len(triangle)):
- rowlen = len(triangle[i])
- triangle[i][0] += triangle[i-1][0]
- triangle[i][rowlen-1] += triangle[i-1][rowlen-2]
- for j in range(1, rowlen-1):
- triangle[i][j] += max(triangle[i-1][j-1], triangle[i-1][j])
-
-print max(triangle[-1])
-
diff --git a/src/projecteuler/067.txt b/src/projecteuler/067.txt
deleted file mode 100644
index 00f98e3..0000000
--- a/src/projecteuler/067.txt
+++ /dev/null
@@ -1,100 +0,0 @@
-59
-73 41
-52 40 09
-26 53 06 34
-10 51 87 86 81
-61 95 66 57 25 68
-90 81 80 38 92 67 73
-30 28 51 76 81 18 75 44
-84 14 95 87 62 81 17 78 58
-21 46 71 58 02 79 62 39 31 09
-56 34 35 53 78 31 81 18 90 93 15
-78 53 04 21 84 93 32 13 97 11 37 51
-45 03 81 79 05 18 78 86 13 30 63 99 95
-39 87 96 28 03 38 42 17 82 87 58 07 22 57
-06 17 51 17 07 93 09 07 75 97 95 78 87 08 53
-67 66 59 60 88 99 94 65 55 77 55 34 27 53 78 28
-76 40 41 04 87 16 09 42 75 69 23 97 30 60 10 79 87
-12 10 44 26 21 36 32 84 98 60 13 12 36 16 63 31 91 35
-70 39 06 05 55 27 38 48 28 22 34 35 62 62 15 14 94 89 86
-66 56 68 84 96 21 34 34 34 81 62 40 65 54 62 05 98 03 02 60
-38 89 46 37 99 54 34 53 36 14 70 26 02 90 45 13 31 61 83 73 47
-36 10 63 96 60 49 41 05 37 42 14 58 84 93 96 17 09 43 05 43 06 59
-66 57 87 57 61 28 37 51 84 73 79 15 39 95 88 87 43 39 11 86 77 74 18
-54 42 05 79 30 49 99 73 46 37 50 02 45 09 54 52 27 95 27 65 19 45 26 45
-71 39 17 78 76 29 52 90 18 99 78 19 35 62 71 19 23 65 93 85 49 33 75 09 02
-33 24 47 61 60 55 32 88 57 55 91 54 46 57 07 77 98 52 80 99 24 25 46 78 79 05
-92 09 13 55 10 67 26 78 76 82 63 49 51 31 24 68 05 57 07 54 69 21 67 43 17 63 12
-24 59 06 08 98 74 66 26 61 60 13 03 09 09 24 30 71 08 88 70 72 70 29 90 11 82 41 34
-66 82 67 04 36 60 92 77 91 85 62 49 59 61 30 90 29 94 26 41 89 04 53 22 83 41 09 74 90
-48 28 26 37 28 52 77 26 51 32 18 98 79 36 62 13 17 08 19 54 89 29 73 68 42 14 08 16 70 37
-37 60 69 70 72 71 09 59 13 60 38 13 57 36 09 30 43 89 30 39 15 02 44 73 05 73 26 63 56 86 12
-55 55 85 50 62 99 84 77 28 85 03 21 27 22 19 26 82 69 54 04 13 07 85 14 01 15 70 59 89 95 10 19
-04 09 31 92 91 38 92 86 98 75 21 05 64 42 62 84 36 20 73 42 21 23 22 51 51 79 25 45 85 53 03 43 22
-75 63 02 49 14 12 89 14 60 78 92 16 44 82 38 30 72 11 46 52 90 27 08 65 78 03 85 41 57 79 39 52 33 48
-78 27 56 56 39 13 19 43 86 72 58 95 39 07 04 34 21 98 39 15 39 84 89 69 84 46 37 57 59 35 59 50 26 15 93
-42 89 36 27 78 91 24 11 17 41 05 94 07 69 51 96 03 96 47 90 90 45 91 20 50 56 10 32 36 49 04 53 85 92 25 65
-52 09 61 30 61 97 66 21 96 92 98 90 06 34 96 60 32 69 68 33 75 84 18 31 71 50 84 63 03 03 19 11 28 42 75 45 45
-61 31 61 68 96 34 49 39 05 71 76 59 62 67 06 47 96 99 34 21 32 47 52 07 71 60 42 72 94 56 82 83 84 40 94 87 82 46
-01 20 60 14 17 38 26 78 66 81 45 95 18 51 98 81 48 16 53 88 37 52 69 95 72 93 22 34 98 20 54 27 73 61 56 63 60 34 63
-93 42 94 83 47 61 27 51 79 79 45 01 44 73 31 70 83 42 88 25 53 51 30 15 65 94 80 44 61 84 12 77 02 62 02 65 94 42 14 94
-32 73 09 67 68 29 74 98 10 19 85 48 38 31 85 67 53 93 93 77 47 67 39 72 94 53 18 43 77 40 78 32 29 59 24 06 02 83 50 60 66
-32 01 44 30 16 51 15 81 98 15 10 62 86 79 50 62 45 60 70 38 31 85 65 61 64 06 69 84 14 22 56 43 09 48 66 69 83 91 60 40 36 61
-92 48 22 99 15 95 64 43 01 16 94 02 99 19 17 69 11 58 97 56 89 31 77 45 67 96 12 73 08 20 36 47 81 44 50 64 68 85 40 81 85 52 09
-91 35 92 45 32 84 62 15 19 64 21 66 06 01 52 80 62 59 12 25 88 28 91 50 40 16 22 99 92 79 87 51 21 77 74 77 07 42 38 42 74 83 02 05
-46 19 77 66 24 18 05 32 02 84 31 99 92 58 96 72 91 36 62 99 55 29 53 42 12 37 26 58 89 50 66 19 82 75 12 48 24 87 91 85 02 07 03 76 86
-99 98 84 93 07 17 33 61 92 20 66 60 24 66 40 30 67 05 37 29 24 96 03 27 70 62 13 04 45 47 59 88 43 20 66 15 46 92 30 04 71 66 78 70 53 99
-67 60 38 06 88 04 17 72 10 99 71 07 42 25 54 05 26 64 91 50 45 71 06 30 67 48 69 82 08 56 80 67 18 46 66 63 01 20 08 80 47 07 91 16 03 79 87
-18 54 78 49 80 48 77 40 68 23 60 88 58 80 33 57 11 69 55 53 64 02 94 49 60 92 16 35 81 21 82 96 25 24 96 18 02 05 49 03 50 77 06 32 84 27 18 38
-68 01 50 04 03 21 42 94 53 24 89 05 92 26 52 36 68 11 85 01 04 42 02 45 15 06 50 04 53 73 25 74 81 88 98 21 67 84 79 97 99 20 95 04 40 46 02 58 87
-94 10 02 78 88 52 21 03 88 60 06 53 49 71 20 91 12 65 07 49 21 22 11 41 58 99 36 16 09 48 17 24 52 36 23 15 72 16 84 56 02 99 43 76 81 71 29 39 49 17
-64 39 59 84 86 16 17 66 03 09 43 06 64 18 63 29 68 06 23 07 87 14 26 35 17 12 98 41 53 64 78 18 98 27 28 84 80 67 75 62 10 11 76 90 54 10 05 54 41 39 66
-43 83 18 37 32 31 52 29 95 47 08 76 35 11 04 53 35 43 34 10 52 57 12 36 20 39 40 55 78 44 07 31 38 26 08 15 56 88 86 01 52 62 10 24 32 05 60 65 53 28 57 99
-03 50 03 52 07 73 49 92 66 80 01 46 08 67 25 36 73 93 07 42 25 53 13 96 76 83 87 90 54 89 78 22 78 91 73 51 69 09 79 94 83 53 09 40 69 62 10 79 49 47 03 81 30
-71 54 73 33 51 76 59 54 79 37 56 45 84 17 62 21 98 69 41 95 65 24 39 37 62 03 24 48 54 64 46 82 71 78 33 67 09 16 96 68 52 74 79 68 32 21 13 78 96 60 09 69 20 36
-73 26 21 44 46 38 17 83 65 98 07 23 52 46 61 97 33 13 60 31 70 15 36 77 31 58 56 93 75 68 21 36 69 53 90 75 25 82 39 50 65 94 29 30 11 33 11 13 96 02 56 47 07 49 02
-76 46 73 30 10 20 60 70 14 56 34 26 37 39 48 24 55 76 84 91 39 86 95 61 50 14 53 93 64 67 37 31 10 84 42 70 48 20 10 72 60 61 84 79 69 65 99 73 89 25 85 48 92 56 97 16
-03 14 80 27 22 30 44 27 67 75 79 32 51 54 81 29 65 14 19 04 13 82 04 91 43 40 12 52 29 99 07 76 60 25 01 07 61 71 37 92 40 47 99 66 57 01 43 44 22 40 53 53 09 69 26 81 07
-49 80 56 90 93 87 47 13 75 28 87 23 72 79 32 18 27 20 28 10 37 59 21 18 70 04 79 96 03 31 45 71 81 06 14 18 17 05 31 50 92 79 23 47 09 39 47 91 43 54 69 47 42 95 62 46 32 85
-37 18 62 85 87 28 64 05 77 51 47 26 30 65 05 70 65 75 59 80 42 52 25 20 44 10 92 17 71 95 52 14 77 13 24 55 11 65 26 91 01 30 63 15 49 48 41 17 67 47 03 68 20 90 98 32 04 40 68
-90 51 58 60 06 55 23 68 05 19 76 94 82 36 96 43 38 90 87 28 33 83 05 17 70 83 96 93 06 04 78 47 80 06 23 84 75 23 87 72 99 14 50 98 92 38 90 64 61 58 76 94 36 66 87 80 51 35 61 38
-57 95 64 06 53 36 82 51 40 33 47 14 07 98 78 65 39 58 53 06 50 53 04 69 40 68 36 69 75 78 75 60 03 32 39 24 74 47 26 90 13 40 44 71 90 76 51 24 36 50 25 45 70 80 61 80 61 43 90 64 11
-18 29 86 56 68 42 79 10 42 44 30 12 96 18 23 18 52 59 02 99 67 46 60 86 43 38 55 17 44 93 42 21 55 14 47 34 55 16 49 24 23 29 96 51 55 10 46 53 27 92 27 46 63 57 30 65 43 27 21 20 24 83
-81 72 93 19 69 52 48 01 13 83 92 69 20 48 69 59 20 62 05 42 28 89 90 99 32 72 84 17 08 87 36 03 60 31 36 36 81 26 97 36 48 54 56 56 27 16 91 08 23 11 87 99 33 47 02 14 44 73 70 99 43 35 33
-90 56 61 86 56 12 70 59 63 32 01 15 81 47 71 76 95 32 65 80 54 70 34 51 40 45 33 04 64 55 78 68 88 47 31 47 68 87 03 84 23 44 89 72 35 08 31 76 63 26 90 85 96 67 65 91 19 14 17 86 04 71 32 95
-37 13 04 22 64 37 37 28 56 62 86 33 07 37 10 44 52 82 52 06 19 52 57 75 90 26 91 24 06 21 14 67 76 30 46 14 35 89 89 41 03 64 56 97 87 63 22 34 03 79 17 45 11 53 25 56 96 61 23 18 63 31 37 37 47
-77 23 26 70 72 76 77 04 28 64 71 69 14 85 96 54 95 48 06 62 99 83 86 77 97 75 71 66 30 19 57 90 33 01 60 61 14 12 90 99 32 77 56 41 18 14 87 49 10 14 90 64 18 50 21 74 14 16 88 05 45 73 82 47 74 44
-22 97 41 13 34 31 54 61 56 94 03 24 59 27 98 77 04 09 37 40 12 26 87 09 71 70 07 18 64 57 80 21 12 71 83 94 60 39 73 79 73 19 97 32 64 29 41 07 48 84 85 67 12 74 95 20 24 52 41 67 56 61 29 93 35 72 69
-72 23 63 66 01 11 07 30 52 56 95 16 65 26 83 90 50 74 60 18 16 48 43 77 37 11 99 98 30 94 91 26 62 73 45 12 87 73 47 27 01 88 66 99 21 41 95 80 02 53 23 32 61 48 32 43 43 83 14 66 95 91 19 81 80 67 25 88
-08 62 32 18 92 14 83 71 37 96 11 83 39 99 05 16 23 27 10 67 02 25 44 11 55 31 46 64 41 56 44 74 26 81 51 31 45 85 87 09 81 95 22 28 76 69 46 48 64 87 67 76 27 89 31 11 74 16 62 03 60 94 42 47 09 34 94 93 72
-56 18 90 18 42 17 42 32 14 86 06 53 33 95 99 35 29 15 44 20 49 59 25 54 34 59 84 21 23 54 35 90 78 16 93 13 37 88 54 19 86 67 68 55 66 84 65 42 98 37 87 56 33 28 58 38 28 38 66 27 52 21 81 15 08 22 97 32 85 27
-91 53 40 28 13 34 91 25 01 63 50 37 22 49 71 58 32 28 30 18 68 94 23 83 63 62 94 76 80 41 90 22 82 52 29 12 18 56 10 08 35 14 37 57 23 65 67 40 72 39 93 39 70 89 40 34 07 46 94 22 20 05 53 64 56 30 05 56 61 88 27
-23 95 11 12 37 69 68 24 66 10 87 70 43 50 75 07 62 41 83 58 95 93 89 79 45 39 02 22 05 22 95 43 62 11 68 29 17 40 26 44 25 71 87 16 70 85 19 25 59 94 90 41 41 80 61 70 55 60 84 33 95 76 42 63 15 09 03 40 38 12 03 32
-09 84 56 80 61 55 85 97 16 94 82 94 98 57 84 30 84 48 93 90 71 05 95 90 73 17 30 98 40 64 65 89 07 79 09 19 56 36 42 30 23 69 73 72 07 05 27 61 24 31 43 48 71 84 21 28 26 65 65 59 65 74 77 20 10 81 61 84 95 08 52 23 70
-47 81 28 09 98 51 67 64 35 51 59 36 92 82 77 65 80 24 72 53 22 07 27 10 21 28 30 22 48 82 80 48 56 20 14 43 18 25 50 95 90 31 77 08 09 48 44 80 90 22 93 45 82 17 13 96 25 26 08 73 34 99 06 49 24 06 83 51 40 14 15 10 25 01
-54 25 10 81 30 64 24 74 75 80 36 75 82 60 22 69 72 91 45 67 03 62 79 54 89 74 44 83 64 96 66 73 44 30 74 50 37 05 09 97 70 01 60 46 37 91 39 75 75 18 58 52 72 78 51 81 86 52 08 97 01 46 43 66 98 62 81 18 70 93 73 08 32 46 34
-96 80 82 07 59 71 92 53 19 20 88 66 03 26 26 10 24 27 50 82 94 73 63 08 51 33 22 45 19 13 58 33 90 15 22 50 36 13 55 06 35 47 82 52 33 61 36 27 28 46 98 14 73 20 73 32 16 26 80 53 47 66 76 38 94 45 02 01 22 52 47 96 64 58 52 39
-88 46 23 39 74 63 81 64 20 90 33 33 76 55 58 26 10 46 42 26 74 74 12 83 32 43 09 02 73 55 86 54 85 34 28 23 29 79 91 62 47 41 82 87 99 22 48 90 20 05 96 75 95 04 43 28 81 39 81 01 28 42 78 25 39 77 90 57 58 98 17 36 73 22 63 74 51
-29 39 74 94 95 78 64 24 38 86 63 87 93 06 70 92 22 16 80 64 29 52 20 27 23 50 14 13 87 15 72 96 81 22 08 49 72 30 70 24 79 31 16 64 59 21 89 34 96 91 48 76 43 53 88 01 57 80 23 81 90 79 58 01 80 87 17 99 86 90 72 63 32 69 14 28 88 69
-37 17 71 95 56 93 71 35 43 45 04 98 92 94 84 96 11 30 31 27 31 60 92 03 48 05 98 91 86 94 35 90 90 08 48 19 33 28 68 37 59 26 65 96 50 68 22 07 09 49 34 31 77 49 43 06 75 17 81 87 61 79 52 26 27 72 29 50 07 98 86 01 17 10 46 64 24 18 56
-51 30 25 94 88 85 79 91 40 33 63 84 49 67 98 92 15 26 75 19 82 05 18 78 65 93 61 48 91 43 59 41 70 51 22 15 92 81 67 91 46 98 11 11 65 31 66 10 98 65 83 21 05 56 05 98 73 67 46 74 69 34 08 30 05 52 07 98 32 95 30 94 65 50 24 63 28 81 99 57
-19 23 61 36 09 89 71 98 65 17 30 29 89 26 79 74 94 11 44 48 97 54 81 55 39 66 69 45 28 47 13 86 15 76 74 70 84 32 36 33 79 20 78 14 41 47 89 28 81 05 99 66 81 86 38 26 06 25 13 60 54 55 23 53 27 05 89 25 23 11 13 54 59 54 56 34 16 24 53 44 06
-13 40 57 72 21 15 60 08 04 19 11 98 34 45 09 97 86 71 03 15 56 19 15 44 97 31 90 04 87 87 76 08 12 30 24 62 84 28 12 85 82 53 99 52 13 94 06 65 97 86 09 50 94 68 69 74 30 67 87 94 63 07 78 27 80 36 69 41 06 92 32 78 37 82 30 05 18 87 99 72 19 99
-44 20 55 77 69 91 27 31 28 81 80 27 02 07 97 23 95 98 12 25 75 29 47 71 07 47 78 39 41 59 27 76 13 15 66 61 68 35 69 86 16 53 67 63 99 85 41 56 08 28 33 40 94 76 90 85 31 70 24 65 84 65 99 82 19 25 54 37 21 46 33 02 52 99 51 33 26 04 87 02 08 18 96
-54 42 61 45 91 06 64 79 80 82 32 16 83 63 42 49 19 78 65 97 40 42 14 61 49 34 04 18 25 98 59 30 82 72 26 88 54 36 21 75 03 88 99 53 46 51 55 78 22 94 34 40 68 87 84 25 30 76 25 08 92 84 42 61 40 38 09 99 40 23 29 39 46 55 10 90 35 84 56 70 63 23 91 39
-52 92 03 71 89 07 09 37 68 66 58 20 44 92 51 56 13 71 79 99 26 37 02 06 16 67 36 52 58 16 79 73 56 60 59 27 44 77 94 82 20 50 98 33 09 87 94 37 40 83 64 83 58 85 17 76 53 02 83 52 22 27 39 20 48 92 45 21 09 42 24 23 12 37 52 28 50 78 79 20 86 62 73 20 59
-54 96 80 15 91 90 99 70 10 09 58 90 93 50 81 99 54 38 36 10 30 11 35 84 16 45 82 18 11 97 36 43 96 79 97 65 40 48 23 19 17 31 64 52 65 65 37 32 65 76 99 79 34 65 79 27 55 33 03 01 33 27 61 28 66 08 04 70 49 46 48 83 01 45 19 96 13 81 14 21 31 79 93 85 50 05
-92 92 48 84 59 98 31 53 23 27 15 22 79 95 24 76 05 79 16 93 97 89 38 89 42 83 02 88 94 95 82 21 01 97 48 39 31 78 09 65 50 56 97 61 01 07 65 27 21 23 14 15 80 97 44 78 49 35 33 45 81 74 34 05 31 57 09 38 94 07 69 54 69 32 65 68 46 68 78 90 24 28 49 51 45 86 35
-41 63 89 76 87 31 86 09 46 14 87 82 22 29 47 16 13 10 70 72 82 95 48 64 58 43 13 75 42 69 21 12 67 13 64 85 58 23 98 09 37 76 05 22 31 12 66 50 29 99 86 72 45 25 10 28 19 06 90 43 29 31 67 79 46 25 74 14 97 35 76 37 65 46 23 82 06 22 30 76 93 66 94 17 96 13 20 72
-63 40 78 08 52 09 90 41 70 28 36 14 46 44 85 96 24 52 58 15 87 37 05 98 99 39 13 61 76 38 44 99 83 74 90 22 53 80 56 98 30 51 63 39 44 30 91 91 04 22 27 73 17 35 53 18 35 45 54 56 27 78 48 13 69 36 44 38 71 25 30 56 15 22 73 43 32 69 59 25 93 83 45 11 34 94 44 39 92
-12 36 56 88 13 96 16 12 55 54 11 47 19 78 17 17 68 81 77 51 42 55 99 85 66 27 81 79 93 42 65 61 69 74 14 01 18 56 12 01 58 37 91 22 42 66 83 25 19 04 96 41 25 45 18 69 96 88 36 93 10 12 98 32 44 83 83 04 72 91 04 27 73 07 34 37 71 60 59 31 01 54 54 44 96 93 83 36 04 45
-30 18 22 20 42 96 65 79 17 41 55 69 94 81 29 80 91 31 85 25 47 26 43 49 02 99 34 67 99 76 16 14 15 93 08 32 99 44 61 77 67 50 43 55 87 55 53 72 17 46 62 25 50 99 73 05 93 48 17 31 70 80 59 09 44 59 45 13 74 66 58 94 87 73 16 14 85 38 74 99 64 23 79 28 71 42 20 37 82 31 23
-51 96 39 65 46 71 56 13 29 68 53 86 45 33 51 49 12 91 21 21 76 85 02 17 98 15 46 12 60 21 88 30 92 83 44 59 42 50 27 88 46 86 94 73 45 54 23 24 14 10 94 21 20 34 23 51 04 83 99 75 90 63 60 16 22 33 83 70 11 32 10 50 29 30 83 46 11 05 31 17 86 42 49 01 44 63 28 60 07 78 95 40
-44 61 89 59 04 49 51 27 69 71 46 76 44 04 09 34 56 39 15 06 94 91 75 90 65 27 56 23 74 06 23 33 36 69 14 39 05 34 35 57 33 22 76 46 56 10 61 65 98 09 16 69 04 62 65 18 99 76 49 18 72 66 73 83 82 40 76 31 89 91 27 88 17 35 41 35 32 51 32 67 52 68 74 85 80 57 07 11 62 66 47 22 67
-65 37 19 97 26 17 16 24 24 17 50 37 64 82 24 36 32 11 68 34 69 31 32 89 79 93 96 68 49 90 14 23 04 04 67 99 81 74 70 74 36 96 68 09 64 39 88 35 54 89 96 58 66 27 88 97 32 14 06 35 78 20 71 06 85 66 57 02 58 91 72 05 29 56 73 48 86 52 09 93 22 57 79 42 12 01 31 68 17 59 63 76 07 77
-73 81 14 13 17 20 11 09 01 83 08 85 91 70 84 63 62 77 37 07 47 01 59 95 39 69 39 21 99 09 87 02 97 16 92 36 74 71 90 66 33 73 73 75 52 91 11 12 26 53 05 26 26 48 61 50 90 65 01 87 42 47 74 35 22 73 24 26 56 70 52 05 48 41 31 18 83 27 21 39 80 85 26 08 44 02 71 07 63 22 05 52 19 08 20
-17 25 21 11 72 93 33 49 64 23 53 82 03 13 91 65 85 02 40 05 42 31 77 42 05 36 06 54 04 58 07 76 87 83 25 57 66 12 74 33 85 37 74 32 20 69 03 97 91 68 82 44 19 14 89 28 85 85 80 53 34 87 58 98 88 78 48 65 98 40 11 57 10 67 70 81 60 79 74 72 97 59 79 47 30 20 54 80 89 91 14 05 33 36 79 39
-60 85 59 39 60 07 57 76 77 92 06 35 15 72 23 41 45 52 95 18 64 79 86 53 56 31 69 11 91 31 84 50 44 82 22 81 41 40 30 42 30 91 48 94 74 76 64 58 74 25 96 57 14 19 03 99 28 83 15 75 99 01 89 85 79 50 03 95 32 67 44 08 07 41 62 64 29 20 14 76 26 55 48 71 69 66 19 72 44 25 14 01 48 74 12 98 07
-64 66 84 24 18 16 27 48 20 14 47 69 30 86 48 40 23 16 61 21 51 50 26 47 35 33 91 28 78 64 43 68 04 79 51 08 19 60 52 95 06 68 46 86 35 97 27 58 04 65 30 58 99 12 12 75 91 39 50 31 42 64 70 04 46 07 98 73 98 93 37 89 77 91 64 71 64 65 66 21 78 62 81 74 42 20 83 70 73 95 78 45 92 27 34 53 71 15
-30 11 85 31 34 71 13 48 05 14 44 03 19 67 23 73 19 57 06 90 94 72 57 69 81 62 59 68 88 57 55 69 49 13 07 87 97 80 89 05 71 05 05 26 38 40 16 62 45 99 18 38 98 24 21 26 62 74 69 04 85 57 77 35 58 67 91 79 79 57 86 28 66 34 72 51 76 78 36 95 63 90 08 78 47 63 45 31 22 70 52 48 79 94 15 77 61 67 68
-23 33 44 81 80 92 93 75 94 88 23 61 39 76 22 03 28 94 32 06 49 65 41 34 18 23 08 47 62 60 03 63 33 13 80 52 31 54 73 43 70 26 16 69 57 87 83 31 03 93 70 81 47 95 77 44 29 68 39 51 56 59 63 07 25 70 07 77 43 53 64 03 94 42 95 39 18 01 66 21 16 97 20 50 90 16 70 10 95 69 29 06 25 61 41 26 15 59 63 35
diff --git a/src/projecteuler/068.py b/src/projecteuler/068.py
deleted file mode 100644
index 2357156..0000000
--- a/src/projecteuler/068.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# 16-digit string -> 10 on the outside (used once)
-
-# solved on paper by "trial-and-error":
-print "6531031914842725"
-
diff --git a/src/projecteuler/069.py b/src/projecteuler/069.py
deleted file mode 100644
index 99236c5..0000000
--- a/src/projecteuler/069.py
+++ /dev/null
@@ -1,28 +0,0 @@
-from common import sieve
-
-primes = sieve(1000000).primes()
-prime_list = [ p for p in primes if p < 1000 ]
-prime_list.sort()
-
-def phi(x):
- if x in primes:
- return x-1
- product = x
- for p in prime_list:
- if p*p > x:
- break
- if x % p != 0:
- continue
- product *= (1 - 1/float(p))
- return product
-
-maxn = 0
-maxres = 0
-
-for n in xrange(2, 1000001):
- if n/phi(n) >= maxres:
- maxres = n/phi(n)
- maxn = n
-
-print maxn
-
diff --git a/src/projecteuler/069_2.py b/src/projecteuler/069_2.py
deleted file mode 100644
index c00483b..0000000
--- a/src/projecteuler/069_2.py
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# n/phi(n) is a maximum, if phi(n) is minimal
-#
-# phi(n) = n*(1-1/p1)*(1-1/p2)*...*(1-1/pi)
-# n/phi(n) = 1/((1-1/p1)*(1-1/p2)*...*(1-1/pi))
-# -> smallest primes
-#
-
-from common import sieve
-
-primes = sieve(100).primes()
-prime_list = [ x for x in primes ]
-prime_list.sort()
-
-x = 1
-for p in prime_list:
- if x*p > 1000000:
- break
- x *= p
-
-print x
-
diff --git a/src/projecteuler/071.py b/src/projecteuler/071.py
deleted file mode 100644
index 44c38b0..0000000
--- a/src/projecteuler/071.py
+++ /dev/null
@@ -1,15 +0,0 @@
-
-from common import ggt
-import math
-
-limit = 1000000
-
-(n1, d1) = (1, limit)
-
-for d2 in xrange(limit+1):
- n2 = int(math.floor(float(d2) * 3.0/7.0))
- if n2*d1 > n1*d2 and ggt(n2, d2) == 1 and d2 != 7:
- (n1, d1) = (n2, d2)
-
-print n1
-
diff --git a/src/projecteuler/072.c b/src/projecteuler/072.c
deleted file mode 100644
index c886291..0000000
--- a/src/projecteuler/072.c
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "common.h"
-
-const int limit = 1000000;
-
-int main()
-{
- unsigned long* prime_list = primes(limit);
- unsigned long sum = 0;
- int n;
-
- for(n=2; n<limit; n++)
- sum += phi(n, prime_list);
-
- printf("%ld\n", sum);
-}
-
diff --git a/src/projecteuler/072.txt b/src/projecteuler/072.txt
deleted file mode 100644
index d99267c..0000000
--- a/src/projecteuler/072.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-solved with wolframalpha.com:
- sum phi(n), n=2 to 1000000
-
- 3039650753
-+ 9118948164
-+ 15198149566
-+ 21277458826
-+ 27356832366
-+ 33435937046
-+ 39515212818
-+ 45594757684
-+ 51673635564
-+ 57752969604
--------------
- 303963552391
-
diff --git a/src/projecteuler/073.py b/src/projecteuler/073.py
deleted file mode 100644
index 4aeb7ab..0000000
--- a/src/projecteuler/073.py
+++ /dev/null
@@ -1,14 +0,0 @@
-
-limit = 12000
-
-fractions = set()
-
-for d in xrange(2, limit+1):
- start_n = (d+3)/3
- end_n = d/2
-
- for n in xrange(start_n, end_n+1):
- fractions.add(float(n)/d)
-
-print len(fractions)
-
diff --git a/src/projecteuler/074.py b/src/projecteuler/074.py
deleted file mode 100644
index adee894..0000000
--- a/src/projecteuler/074.py
+++ /dev/null
@@ -1,48 +0,0 @@
-
-fac = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
-numbers = [0]*10000000
-
-numbers[0] = 1
-numbers[1] = 1
-numbers[2] = 1
-numbers[145] = 1
-numbers[40585] = 1
-numbers[169] = 3
-numbers[871] = 2
-numbers[872] = 2
-numbers[45361] = 2
-numbers[45362] = 2
-numbers[1454] = 3
-numbers[363601] = 3
-
-def next(n):
- x = 0
- while n > 0:
- x += fac[n % 10]
- n /= 10
- return x
-
-def count(n):
- if numbers[n] != 0:
- return
- chain = [n]
- x = next(n)
- while x not in chain:
- chain.append(x)
- if numbers[x] != 0:
- break
- x = next(x)
- last = numbers[chain[-1]]
- l = len(chain)
- for j in xrange(0, l-1):
- c = chain[j]
- numbers[c] = l - j - 1 + last
-
-c = 0
-for i in xrange(10, 1000000):
- count(i)
- if numbers[i] == 60:
- c += 1
-
-print c
-
diff --git a/src/projecteuler/075.py b/src/projecteuler/075.py
deleted file mode 100644
index 58e9136..0000000
--- a/src/projecteuler/075.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# generating Pythagorean triplets
-
-limit = 1500000
-limit_search = 900
-squares = [ x*x for x in xrange(limit) ]
-triangles = [ set() for x in xrange(limit+1) ]
-
-
-for m in xrange(1, limit_search):
- for n in xrange(1, m):
- (a,b,c) = (squares[m] - squares[n], 2*m*n, squares[m] + squares[n])
- if a > b:
- (a,b,c) = (b,a,c)
-
- k = 1
- while True:
- if k*(a+b+c) > limit:
- break
- triangles[k*a + k*b + k*c].add((k*a,k*b,k*c))
- k += 1
-
-
-count = 0
-for t in triangles:
- if len(t) == 1:
- count += 1
-
-print count
-
diff --git a/src/projecteuler/080.py b/src/projecteuler/080.py
deleted file mode 100644
index 9becd19..0000000
--- a/src/projecteuler/080.py
+++ /dev/null
@@ -1,55 +0,0 @@
-
-# schriftliches wurzelziehen: http://www.diaware.de/html/wurzel.html
-
-def sqrt(x, accuracy):
- a = [] # vor komma
- b = [] # nach komma
-
- groups = []
- while x > 0:
- groups.append(x % 100)
- x /= 100
- groups = groups[::-1]
-
- result = 0
- remainder = 0
- while accuracy > 0:
- group = 100 * remainder
- if len(groups) > 0:
- group += groups[0]
-
- subcount = 0
- sub = 20*result + 1
- while sub < group:
- group -= sub
- if group < 0:
- break
- subcount += 1
- sub += 2
- remainder = group
- if subcount == 0:
- remainder *= 100
- result *= 10
- result += subcount
-
- if len(groups) > 0:
- a.append(subcount)
- del groups[0]
- else:
- b.append(subcount)
- accuracy -= 1
-
- return (a, b)
-
-squares = set([ x*x for x in range(11) ])
-
-digitsum = 0
-
-for n in xrange(100):
- if n in squares:
- continue
- s = sqrt(n, 100)
- digitsum += sum(s[0]) + sum(s[1])
-
-print digitsum
-
diff --git a/src/projecteuler/081.py b/src/projecteuler/081.py
deleted file mode 100644
index c951abf..0000000
--- a/src/projecteuler/081.py
+++ /dev/null
@@ -1,71 +0,0 @@
-
-# uses Dijkstra's algorithm to find minimal path
-
-infinity = 999999
-
-matrix = []
-
-width = 80
-height = 80
-
-f = open('081.txt', 'r')
-for line in f:
- line.rstrip('\n')
- line_str = line.split(',')
- line_int = [ int(x) for x in line_str ]
- matrix.append(line_int)
-f.close()
-
-
-# initialize
-distance = [infinity] * (width*height)
-pre = [None] * (width*height)
-distance[0] = 0
-Q = range(width*height)
-
-def mindistance(Q):
- mind = infinity
- mini = -1
- for i in Q:
- if distance[i] < mind:
- mind = distance[i]
- mini = i
- return mini
-
-def neighbors(u):
- n = []
- row = u / width
- col = u % width
- if col < width-1:
- n.append(row*width + col + 1) # right neighbor
- if row < height-1:
- n.append((row+1)*width + col) # lower neighbor
- return n
-
-def update(u, v):
- alt = distance[u] + matrix[v/width][v%width]
- if alt < distance[v]:
- distance[v] = alt
- pre[v] = u
-
-# main algorithm
-while len(Q) > 0:
- u = mindistance(Q)
- Q.remove(u)
- for v in neighbors(u):
- if v in Q:
- update(u, v)
-
-# search min distance
-u = width*height-1 # target node
-path = [ u ]
-while pre[u] != None:
- u = pre[u]
- path = [u] + path
-
-minsum = 0
-for n in path:
- minsum += matrix[n/width][n%width]
-
-print minsum
-
diff --git a/src/projecteuler/081.txt b/src/projecteuler/081.txt
deleted file mode 100644
index 1e9e6cd..0000000
--- a/src/projecteuler/081.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870
-1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377
-9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230
-7206,3114,7760,1094,6150,5182,7358,7387,4497,955,101,1478,7777,6966,7010,8417,6453,4955,3496,107,449,8271,131,2948,6185,784,5937,8001,6104,8282,4165,3642,710,2390,575,715,3089,6964,4217,192,5949,7006,715,3328,1152,66,8044,4319,1735,146,4818,5456,6451,4113,1063,4781,6799,602,1504,6245,6550,1417,1343,2363,3785,5448,4545,9371,5420,5068,4613,4882,4241,5043,7873,8042,8434,3939,9256,2187
-3620,8024,577,9997,7377,7682,1314,1158,6282,6310,1896,2509,5436,1732,9480,706,496,101,6232,7375,2207,2306,110,6772,3433,2878,8140,5933,8688,1399,2210,7332,6172,6403,7333,4044,2291,1790,2446,7390,8698,5723,3678,7104,1825,2040,140,3982,4905,4160,2200,5041,2512,1488,2268,1175,7588,8321,8078,7312,977,5257,8465,5068,3453,3096,1651,7906,253,9250,6021,8791,8109,6651,3412,345,4778,5152,4883,7505
-1074,5438,9008,2679,5397,5429,2652,3403,770,9188,4248,2493,4361,8327,9587,707,9525,5913,93,1899,328,2876,3604,673,8576,6908,7659,2544,3359,3883,5273,6587,3065,1749,3223,604,9925,6941,2823,8767,7039,3290,3214,1787,7904,3421,7137,9560,8451,2669,9219,6332,1576,5477,6755,8348,4164,4307,2984,4012,6629,1044,2874,6541,4942,903,1404,9125,5160,8836,4345,2581,460,8438,1538,5507,668,3352,2678,6942
-4295,1176,5596,1521,3061,9868,7037,7129,8933,6659,5947,5063,3653,9447,9245,2679,767,714,116,8558,163,3927,8779,158,5093,2447,5782,3967,1716,931,7772,8164,1117,9244,5783,7776,3846,8862,6014,2330,6947,1777,3112,6008,3491,1906,5952,314,4602,8994,5919,9214,3995,5026,7688,6809,5003,3128,2509,7477,110,8971,3982,8539,2980,4689,6343,5411,2992,5270,5247,9260,2269,7474,1042,7162,5206,1232,4556,4757
-510,3556,5377,1406,5721,4946,2635,7847,4251,8293,8281,6351,4912,287,2870,3380,3948,5322,3840,4738,9563,1906,6298,3234,8959,1562,6297,8835,7861,239,6618,1322,2553,2213,5053,5446,4402,6500,5182,8585,6900,5756,9661,903,5186,7687,5998,7997,8081,8955,4835,6069,2621,1581,732,9564,1082,1853,5442,1342,520,1737,3703,5321,4793,2776,1508,1647,9101,2499,6891,4336,7012,3329,3212,1442,9993,3988,4930,7706
-9444,3401,5891,9716,1228,7107,109,3563,2700,6161,5039,4992,2242,8541,7372,2067,1294,3058,1306,320,8881,5756,9326,411,8650,8824,5495,8282,8397,2000,1228,7817,2099,6473,3571,5994,4447,1299,5991,543,7874,2297,1651,101,2093,3463,9189,6872,6118,872,1008,1779,2805,9084,4048,2123,5877,55,3075,1737,9459,4535,6453,3644,108,5982,4437,5213,1340,6967,9943,5815,669,8074,1838,6979,9132,9315,715,5048
-3327,4030,7177,6336,9933,5296,2621,4785,2755,4832,2512,2118,2244,4407,2170,499,7532,9742,5051,7687,970,6924,3527,4694,5145,1306,2165,5940,2425,8910,3513,1909,6983,346,6377,4304,9330,7203,6605,3709,3346,970,369,9737,5811,4427,9939,3693,8436,5566,1977,3728,2399,3985,8303,2492,5366,9802,9193,7296,1033,5060,9144,2766,1151,7629,5169,5995,58,7619,7565,4208,1713,6279,3209,4908,9224,7409,1325,8540
-6882,1265,1775,3648,4690,959,5837,4520,5394,1378,9485,1360,4018,578,9174,2932,9890,3696,116,1723,1178,9355,7063,1594,1918,8574,7594,7942,1547,6166,7888,354,6932,4651,1010,7759,6905,661,7689,6092,9292,3845,9605,8443,443,8275,5163,7720,7265,6356,7779,1798,1754,5225,6661,1180,8024,5666,88,9153,1840,3508,1193,4445,2648,3538,6243,6375,8107,5902,5423,2520,1122,5015,6113,8859,9370,966,8673,2442
-7338,3423,4723,6533,848,8041,7921,8277,4094,5368,7252,8852,9166,2250,2801,6125,8093,5738,4038,9808,7359,9494,601,9116,4946,2702,5573,2921,9862,1462,1269,2410,4171,2709,7508,6241,7522,615,2407,8200,4189,5492,5649,7353,2590,5203,4274,710,7329,9063,956,8371,3722,4253,4785,1194,4828,4717,4548,940,983,2575,4511,2938,1827,2027,2700,1236,841,5760,1680,6260,2373,3851,1841,4968,1172,5179,7175,3509
-4420,1327,3560,2376,6260,2988,9537,4064,4829,8872,9598,3228,1792,7118,9962,9336,4368,9189,6857,1829,9863,6287,7303,7769,2707,8257,2391,2009,3975,4993,3068,9835,3427,341,8412,2134,4034,8511,6421,3041,9012,2983,7289,100,1355,7904,9186,6920,5856,2008,6545,8331,3655,5011,839,8041,9255,6524,3862,8788,62,7455,3513,5003,8413,3918,2076,7960,6108,3638,6999,3436,1441,4858,4181,1866,8731,7745,3744,1000
-356,8296,8325,1058,1277,4743,3850,2388,6079,6462,2815,5620,8495,5378,75,4324,3441,9870,1113,165,1544,1179,2834,562,6176,2313,6836,8839,2986,9454,5199,6888,1927,5866,8760,320,1792,8296,7898,6121,7241,5886,5814,2815,8336,1576,4314,3109,2572,6011,2086,9061,9403,3947,5487,9731,7281,3159,1819,1334,3181,5844,5114,9898,4634,2531,4412,6430,4262,8482,4546,4555,6804,2607,9421,686,8649,8860,7794,6672
-9870,152,1558,4963,8750,4754,6521,6256,8818,5208,5691,9659,8377,9725,5050,5343,2539,6101,1844,9700,7750,8114,5357,3001,8830,4438,199,9545,8496,43,2078,327,9397,106,6090,8181,8646,6414,7499,5450,4850,6273,5014,4131,7639,3913,6571,8534,9703,4391,7618,445,1320,5,1894,6771,7383,9191,4708,9706,6939,7937,8726,9382,5216,3685,2247,9029,8154,1738,9984,2626,9438,4167,6351,5060,29,1218,1239,4785
-192,5213,8297,8974,4032,6966,5717,1179,6523,4679,9513,1481,3041,5355,9303,9154,1389,8702,6589,7818,6336,3539,5538,3094,6646,6702,6266,2759,4608,4452,617,9406,8064,6379,444,5602,4950,1810,8391,1536,316,8714,1178,5182,5863,5110,5372,4954,1978,2971,5680,4863,2255,4630,5723,2168,538,1692,1319,7540,440,6430,6266,7712,7385,5702,620,641,3136,7350,1478,3155,2820,9109,6261,1122,4470,14,8493,2095
-1046,4301,6082,474,4974,7822,2102,5161,5172,6946,8074,9716,6586,9962,9749,5015,2217,995,5388,4402,7652,6399,6539,1349,8101,3677,1328,9612,7922,2879,231,5887,2655,508,4357,4964,3554,5930,6236,7384,4614,280,3093,9600,2110,7863,2631,6626,6620,68,1311,7198,7561,1768,5139,1431,221,230,2940,968,5283,6517,2146,1646,869,9402,7068,8645,7058,1765,9690,4152,2926,9504,2939,7504,6074,2944,6470,7859
-4659,736,4951,9344,1927,6271,8837,8711,3241,6579,7660,5499,5616,3743,5801,4682,9748,8796,779,1833,4549,8138,4026,775,4170,2432,4174,3741,7540,8017,2833,4027,396,811,2871,1150,9809,2719,9199,8504,1224,540,2051,3519,7982,7367,2761,308,3358,6505,2050,4836,5090,7864,805,2566,2409,6876,3361,8622,5572,5895,3280,441,7893,8105,1634,2929,274,3926,7786,6123,8233,9921,2674,5340,1445,203,4585,3837
-5759,338,7444,7968,7742,3755,1591,4839,1705,650,7061,2461,9230,9391,9373,2413,1213,431,7801,4994,2380,2703,6161,6878,8331,2538,6093,1275,5065,5062,2839,582,1014,8109,3525,1544,1569,8622,7944,2905,6120,1564,1839,5570,7579,1318,2677,5257,4418,5601,7935,7656,5192,1864,5886,6083,5580,6202,8869,1636,7907,4759,9082,5854,3185,7631,6854,5872,5632,5280,1431,2077,9717,7431,4256,8261,9680,4487,4752,4286
-1571,1428,8599,1230,7772,4221,8523,9049,4042,8726,7567,6736,9033,2104,4879,4967,6334,6716,3994,1269,8995,6539,3610,7667,6560,6065,874,848,4597,1711,7161,4811,6734,5723,6356,6026,9183,2586,5636,1092,7779,7923,8747,6887,7505,9909,1792,3233,4526,3176,1508,8043,720,5212,6046,4988,709,5277,8256,3642,1391,5803,1468,2145,3970,6301,7767,2359,8487,9771,8785,7520,856,1605,8972,2402,2386,991,1383,5963
-1822,4824,5957,6511,9868,4113,301,9353,6228,2881,2966,6956,9124,9574,9233,1601,7340,973,9396,540,4747,8590,9535,3650,7333,7583,4806,3593,2738,8157,5215,8472,2284,9473,3906,6982,5505,6053,7936,6074,7179,6688,1564,1103,6860,5839,2022,8490,910,7551,7805,881,7024,1855,9448,4790,1274,3672,2810,774,7623,4223,4850,6071,9975,4935,1915,9771,6690,3846,517,463,7624,4511,614,6394,3661,7409,1395,8127
-8738,3850,9555,3695,4383,2378,87,6256,6740,7682,9546,4255,6105,2000,1851,4073,8957,9022,6547,5189,2487,303,9602,7833,1628,4163,6678,3144,8589,7096,8913,5823,4890,7679,1212,9294,5884,2972,3012,3359,7794,7428,1579,4350,7246,4301,7779,7790,3294,9547,4367,3549,1958,8237,6758,3497,3250,3456,6318,1663,708,7714,6143,6890,3428,6853,9334,7992,591,6449,9786,1412,8500,722,5468,1371,108,3939,4199,2535
-7047,4323,1934,5163,4166,461,3544,2767,6554,203,6098,2265,9078,2075,4644,6641,8412,9183,487,101,7566,5622,1975,5726,2920,5374,7779,5631,3753,3725,2672,3621,4280,1162,5812,345,8173,9785,1525,955,5603,2215,2580,5261,2765,2990,5979,389,3907,2484,1232,5933,5871,3304,1138,1616,5114,9199,5072,7442,7245,6472,4760,6359,9053,7876,2564,9404,3043,9026,2261,3374,4460,7306,2326,966,828,3274,1712,3446
-3975,4565,8131,5800,4570,2306,8838,4392,9147,11,3911,7118,9645,4994,2028,6062,5431,2279,8752,2658,7836,994,7316,5336,7185,3289,1898,9689,2331,5737,3403,1124,2679,3241,7748,16,2724,5441,6640,9368,9081,5618,858,4969,17,2103,6035,8043,7475,2181,939,415,1617,8500,8253,2155,7843,7974,7859,1746,6336,3193,2617,8736,4079,6324,6645,8891,9396,5522,6103,1857,8979,3835,2475,1310,7422,610,8345,7615
-9248,5397,5686,2988,3446,4359,6634,9141,497,9176,6773,7448,1907,8454,916,1596,2241,1626,1384,2741,3649,5362,8791,7170,2903,2475,5325,6451,924,3328,522,90,4813,9737,9557,691,2388,1383,4021,1609,9206,4707,5200,7107,8104,4333,9860,5013,1224,6959,8527,1877,4545,7772,6268,621,4915,9349,5970,706,9583,3071,4127,780,8231,3017,9114,3836,7503,2383,1977,4870,8035,2379,9704,1037,3992,3642,1016,4303
-5093,138,4639,6609,1146,5565,95,7521,9077,2272,974,4388,2465,2650,722,4998,3567,3047,921,2736,7855,173,2065,4238,1048,5,6847,9548,8632,9194,5942,4777,7910,8971,6279,7253,2516,1555,1833,3184,9453,9053,6897,7808,8629,4877,1871,8055,4881,7639,1537,7701,2508,7564,5845,5023,2304,5396,3193,2955,1088,3801,6203,1748,3737,1276,13,4120,7715,8552,3047,2921,106,7508,304,1280,7140,2567,9135,5266
-6237,4607,7527,9047,522,7371,4883,2540,5867,6366,5301,1570,421,276,3361,527,6637,4861,2401,7522,5808,9371,5298,2045,5096,5447,7755,5115,7060,8529,4078,1943,1697,1764,5453,7085,960,2405,739,2100,5800,728,9737,5704,5693,1431,8979,6428,673,7540,6,7773,5857,6823,150,5869,8486,684,5816,9626,7451,5579,8260,3397,5322,6920,1879,2127,2884,5478,4977,9016,6165,6292,3062,5671,5968,78,4619,4763
-9905,7127,9390,5185,6923,3721,9164,9705,4341,1031,1046,5127,7376,6528,3248,4941,1178,7889,3364,4486,5358,9402,9158,8600,1025,874,1839,1783,309,9030,1843,845,8398,1433,7118,70,8071,2877,3904,8866,6722,4299,10,1929,5897,4188,600,1889,3325,2485,6473,4474,7444,6992,4846,6166,4441,2283,2629,4352,7775,1101,2214,9985,215,8270,9750,2740,8361,7103,5930,8664,9690,8302,9267,344,2077,1372,1880,9550
-5825,8517,7769,2405,8204,1060,3603,7025,478,8334,1997,3692,7433,9101,7294,7498,9415,5452,3850,3508,6857,9213,6807,4412,7310,854,5384,686,4978,892,8651,3241,2743,3801,3813,8588,6701,4416,6990,6490,3197,6838,6503,114,8343,5844,8646,8694,65,791,5979,2687,2621,2019,8097,1423,3644,9764,4921,3266,3662,5561,2476,8271,8138,6147,1168,3340,1998,9874,6572,9873,6659,5609,2711,3931,9567,4143,7833,8887
-6223,2099,2700,589,4716,8333,1362,5007,2753,2848,4441,8397,7192,8191,4916,9955,6076,3370,6396,6971,3156,248,3911,2488,4930,2458,7183,5455,170,6809,6417,3390,1956,7188,577,7526,2203,968,8164,479,8699,7915,507,6393,4632,1597,7534,3604,618,3280,6061,9793,9238,8347,568,9645,2070,5198,6482,5000,9212,6655,5961,7513,1323,3872,6170,3812,4146,2736,67,3151,5548,2781,9679,7564,5043,8587,1893,4531
-5826,3690,6724,2121,9308,6986,8106,6659,2142,1642,7170,2877,5757,6494,8026,6571,8387,9961,6043,9758,9607,6450,8631,8334,7359,5256,8523,2225,7487,1977,9555,8048,5763,2414,4948,4265,2427,8978,8088,8841,9208,9601,5810,9398,8866,9138,4176,5875,7212,3272,6759,5678,7649,4922,5422,1343,8197,3154,3600,687,1028,4579,2084,9467,4492,7262,7296,6538,7657,7134,2077,1505,7332,6890,8964,4879,7603,7400,5973,739
-1861,1613,4879,1884,7334,966,2000,7489,2123,4287,1472,3263,4726,9203,1040,4103,6075,6049,330,9253,4062,4268,1635,9960,577,1320,3195,9628,1030,4092,4979,6474,6393,2799,6967,8687,7724,7392,9927,2085,3200,6466,8702,265,7646,8665,7986,7266,4574,6587,612,2724,704,3191,8323,9523,3002,704,5064,3960,8209,2027,2758,8393,4875,4641,9584,6401,7883,7014,768,443,5490,7506,1852,2005,8850,5776,4487,4269
-4052,6687,4705,7260,6645,6715,3706,5504,8672,2853,1136,8187,8203,4016,871,1809,1366,4952,9294,5339,6872,2645,6083,7874,3056,5218,7485,8796,7401,3348,2103,426,8572,4163,9171,3176,948,7654,9344,3217,1650,5580,7971,2622,76,2874,880,2034,9929,1546,2659,5811,3754,7096,7436,9694,9960,7415,2164,953,2360,4194,2397,1047,2196,6827,575,784,2675,8821,6802,7972,5996,6699,2134,7577,2887,1412,4349,4380
-4629,2234,6240,8132,7592,3181,6389,1214,266,1910,2451,8784,2790,1127,6932,1447,8986,2492,5476,397,889,3027,7641,5083,5776,4022,185,3364,5701,2442,2840,4160,9525,4828,6602,2614,7447,3711,4505,7745,8034,6514,4907,2605,7753,6958,7270,6936,3006,8968,439,2326,4652,3085,3425,9863,5049,5361,8688,297,7580,8777,7916,6687,8683,7141,306,9569,2384,1500,3346,4601,7329,9040,6097,2727,6314,4501,4974,2829
-8316,4072,2025,6884,3027,1808,5714,7624,7880,8528,4205,8686,7587,3230,1139,7273,6163,6986,3914,9309,1464,9359,4474,7095,2212,7302,2583,9462,7532,6567,1606,4436,8981,5612,6796,4385,5076,2007,6072,3678,8331,1338,3299,8845,4783,8613,4071,1232,6028,2176,3990,2148,3748,103,9453,538,6745,9110,926,3125,473,5970,8728,7072,9062,1404,1317,5139,9862,6496,6062,3338,464,1600,2532,1088,8232,7739,8274,3873
-2341,523,7096,8397,8301,6541,9844,244,4993,2280,7689,4025,4196,5522,7904,6048,2623,9258,2149,9461,6448,8087,7245,1917,8340,7127,8466,5725,6996,3421,5313,512,9164,9837,9794,8369,4185,1488,7210,1524,1016,4620,9435,2478,7765,8035,697,6677,3724,6988,5853,7662,3895,9593,1185,4727,6025,5734,7665,3070,138,8469,6748,6459,561,7935,8646,2378,462,7755,3115,9690,8877,3946,2728,8793,244,6323,8666,4271
-6430,2406,8994,56,1267,3826,9443,7079,7579,5232,6691,3435,6718,5698,4144,7028,592,2627,217,734,6194,8156,9118,58,2640,8069,4127,3285,694,3197,3377,4143,4802,3324,8134,6953,7625,3598,3584,4289,7065,3434,2106,7132,5802,7920,9060,7531,3321,1725,1067,3751,444,5503,6785,7937,6365,4803,198,6266,8177,1470,6390,1606,2904,7555,9834,8667,2033,1723,5167,1666,8546,8152,473,4475,6451,7947,3062,3281
-2810,3042,7759,1741,2275,2609,7676,8640,4117,1958,7500,8048,1757,3954,9270,1971,4796,2912,660,5511,3553,1012,5757,4525,6084,7198,8352,5775,7726,8591,7710,9589,3122,4392,6856,5016,749,2285,3356,7482,9956,7348,2599,8944,495,3462,3578,551,4543,7207,7169,7796,1247,4278,6916,8176,3742,8385,2310,1345,8692,2667,4568,1770,8319,3585,4920,3890,4928,7343,5385,9772,7947,8786,2056,9266,3454,2807,877,2660
-6206,8252,5928,5837,4177,4333,207,7934,5581,9526,8906,1498,8411,2984,5198,5134,2464,8435,8514,8674,3876,599,5327,826,2152,4084,2433,9327,9697,4800,2728,3608,3849,3861,3498,9943,1407,3991,7191,9110,5666,8434,4704,6545,5944,2357,1163,4995,9619,6754,4200,9682,6654,4862,4744,5953,6632,1054,293,9439,8286,2255,696,8709,1533,1844,6441,430,1999,6063,9431,7018,8057,2920,6266,6799,356,3597,4024,6665
-3847,6356,8541,7225,2325,2946,5199,469,5450,7508,2197,9915,8284,7983,6341,3276,3321,16,1321,7608,5015,3362,8491,6968,6818,797,156,2575,706,9516,5344,5457,9210,5051,8099,1617,9951,7663,8253,9683,2670,1261,4710,1068,8753,4799,1228,2621,3275,6188,4699,1791,9518,8701,5932,4275,6011,9877,2933,4182,6059,2930,6687,6682,9771,654,9437,3169,8596,1827,5471,8909,2352,123,4394,3208,8756,5513,6917,2056
-5458,8173,3138,3290,4570,4892,3317,4251,9699,7973,1163,1935,5477,6648,9614,5655,9592,975,9118,2194,7322,8248,8413,3462,8560,1907,7810,6650,7355,2939,4973,6894,3933,3784,3200,2419,9234,4747,2208,2207,1945,2899,1407,6145,8023,3484,5688,7686,2737,3828,3704,9004,5190,9740,8643,8650,5358,4426,1522,1707,3613,9887,6956,2447,2762,833,1449,9489,2573,1080,4167,3456,6809,2466,227,7125,2759,6250,6472,8089
-3266,7025,9756,3914,1265,9116,7723,9788,6805,5493,2092,8688,6592,9173,4431,4028,6007,7131,4446,4815,3648,6701,759,3312,8355,4485,4187,5188,8746,7759,3528,2177,5243,8379,3838,7233,4607,9187,7216,2190,6967,2920,6082,7910,5354,3609,8958,6949,7731,494,8753,8707,1523,4426,3543,7085,647,6771,9847,646,5049,824,8417,5260,2730,5702,2513,9275,4279,2767,8684,1165,9903,4518,55,9682,8963,6005,2102,6523
-1998,8731,936,1479,5259,7064,4085,91,7745,7136,3773,3810,730,8255,2705,2653,9790,6807,2342,355,9344,2668,3690,2028,9679,8102,574,4318,6481,9175,5423,8062,2867,9657,7553,3442,3920,7430,3945,7639,3714,3392,2525,4995,4850,2867,7951,9667,486,9506,9888,781,8866,1702,3795,90,356,1483,4200,2131,6969,5931,486,6880,4404,1084,5169,4910,6567,8335,4686,5043,2614,3352,2667,4513,6472,7471,5720,1616
-8878,1613,1716,868,1906,2681,564,665,5995,2474,7496,3432,9491,9087,8850,8287,669,823,347,6194,2264,2592,7871,7616,8508,4827,760,2676,4660,4881,7572,3811,9032,939,4384,929,7525,8419,5556,9063,662,8887,7026,8534,3111,1454,2082,7598,5726,6687,9647,7608,73,3014,5063,670,5461,5631,3367,9796,8475,7908,5073,1565,5008,5295,4457,1274,4788,1728,338,600,8415,8535,9351,7750,6887,5845,1741,125
-3637,6489,9634,9464,9055,2413,7824,9517,7532,3577,7050,6186,6980,9365,9782,191,870,2497,8498,2218,2757,5420,6468,586,3320,9230,1034,1393,9886,5072,9391,1178,8464,8042,6869,2075,8275,3601,7715,9470,8786,6475,8373,2159,9237,2066,3264,5000,679,355,3069,4073,494,2308,5512,4334,9438,8786,8637,9774,1169,1949,6594,6072,4270,9158,7916,5752,6794,9391,6301,5842,3285,2141,3898,8027,4310,8821,7079,1307
-8497,6681,4732,7151,7060,5204,9030,7157,833,5014,8723,3207,9796,9286,4913,119,5118,7650,9335,809,3675,2597,5144,3945,5090,8384,187,4102,1260,2445,2792,4422,8389,9290,50,1765,1521,6921,8586,4368,1565,5727,7855,2003,4834,9897,5911,8630,5070,1330,7692,7557,7980,6028,5805,9090,8265,3019,3802,698,9149,5748,1965,9658,4417,5994,5584,8226,2937,272,5743,1278,5698,8736,2595,6475,5342,6596,1149,6920
-8188,8009,9546,6310,8772,2500,9846,6592,6872,3857,1307,8125,7042,1544,6159,2330,643,4604,7899,6848,371,8067,2062,3200,7295,1857,9505,6936,384,2193,2190,301,8535,5503,1462,7380,5114,4824,8833,1763,4974,8711,9262,6698,3999,2645,6937,7747,1128,2933,3556,7943,2885,3122,9105,5447,418,2899,5148,3699,9021,9501,597,4084,175,1621,1,1079,6067,5812,4326,9914,6633,5394,4233,6728,9084,1864,5863,1225
-9935,8793,9117,1825,9542,8246,8437,3331,9128,9675,6086,7075,319,1334,7932,3583,7167,4178,1726,7720,695,8277,7887,6359,5912,1719,2780,8529,1359,2013,4498,8072,1129,9998,1147,8804,9405,6255,1619,2165,7491,1,8882,7378,3337,503,5758,4109,3577,985,3200,7615,8058,5032,1080,6410,6873,5496,1466,2412,9885,5904,4406,3605,8770,4361,6205,9193,1537,9959,214,7260,9566,1685,100,4920,7138,9819,5637,976
-3466,9854,985,1078,7222,8888,5466,5379,3578,4540,6853,8690,3728,6351,7147,3134,6921,9692,857,3307,4998,2172,5783,3931,9417,2541,6299,13,787,2099,9131,9494,896,8600,1643,8419,7248,2660,2609,8579,91,6663,5506,7675,1947,6165,4286,1972,9645,3805,1663,1456,8853,5705,9889,7489,1107,383,4044,2969,3343,152,7805,4980,9929,5033,1737,9953,7197,9158,4071,1324,473,9676,3984,9680,3606,8160,7384,5432
-1005,4512,5186,3953,2164,3372,4097,3247,8697,3022,9896,4101,3871,6791,3219,2742,4630,6967,7829,5991,6134,1197,1414,8923,8787,1394,8852,5019,7768,5147,8004,8825,5062,9625,7988,1110,3992,7984,9966,6516,6251,8270,421,3723,1432,4830,6935,8095,9059,2214,6483,6846,3120,1587,6201,6691,9096,9627,6671,4002,3495,9939,7708,7465,5879,6959,6634,3241,3401,2355,9061,2611,7830,3941,2177,2146,5089,7079,519,6351
-7280,8586,4261,2831,7217,3141,9994,9940,5462,2189,4005,6942,9848,5350,8060,6665,7519,4324,7684,657,9453,9296,2944,6843,7499,7847,1728,9681,3906,6353,5529,2822,3355,3897,7724,4257,7489,8672,4356,3983,1948,6892,7415,4153,5893,4190,621,1736,4045,9532,7701,3671,1211,1622,3176,4524,9317,7800,5638,6644,6943,5463,3531,2821,1347,5958,3436,1438,2999,994,850,4131,2616,1549,3465,5946,690,9273,6954,7991
-9517,399,3249,2596,7736,2142,1322,968,7350,1614,468,3346,3265,7222,6086,1661,5317,2582,7959,4685,2807,2917,1037,5698,1529,3972,8716,2634,3301,3412,8621,743,8001,4734,888,7744,8092,3671,8941,1487,5658,7099,2781,99,1932,4443,4756,4652,9328,1581,7855,4312,5976,7255,6480,3996,2748,1973,9731,4530,2790,9417,7186,5303,3557,351,7182,9428,1342,9020,7599,1392,8304,2070,9138,7215,2008,9937,1106,7110
-7444,769,9688,632,1571,6820,8743,4338,337,3366,3073,1946,8219,104,4210,6986,249,5061,8693,7960,6546,1004,8857,5997,9352,4338,6105,5008,2556,6518,6694,4345,3727,7956,20,3954,8652,4424,9387,2035,8358,5962,5304,5194,8650,8282,1256,1103,2138,6679,1985,3653,2770,2433,4278,615,2863,1715,242,3790,2636,6998,3088,1671,2239,957,5411,4595,6282,2881,9974,2401,875,7574,2987,4587,3147,6766,9885,2965
-3287,3016,3619,6818,9073,6120,5423,557,2900,2015,8111,3873,1314,4189,1846,4399,7041,7583,2427,2864,3525,5002,2069,748,1948,6015,2684,438,770,8367,1663,7887,7759,1885,157,7770,4520,4878,3857,1137,3525,3050,6276,5569,7649,904,4533,7843,2199,5648,7628,9075,9441,3600,7231,2388,5640,9096,958,3058,584,5899,8150,1181,9616,1098,8162,6819,8171,1519,1140,7665,8801,2632,1299,9192,707,9955,2710,7314
-1772,2963,7578,3541,3095,1488,7026,2634,6015,4633,4370,2762,1650,2174,909,8158,2922,8467,4198,4280,9092,8856,8835,5457,2790,8574,9742,5054,9547,4156,7940,8126,9824,7340,8840,6574,3547,1477,3014,6798,7134,435,9484,9859,3031,4,1502,4133,1738,1807,4825,463,6343,9701,8506,9822,9555,8688,8168,3467,3234,6318,1787,5591,419,6593,7974,8486,9861,6381,6758,194,3061,4315,2863,4665,3789,2201,1492,4416
-126,8927,6608,5682,8986,6867,1715,6076,3159,788,3140,4744,830,9253,5812,5021,7616,8534,1546,9590,1101,9012,9821,8132,7857,4086,1069,7491,2988,1579,2442,4321,2149,7642,6108,250,6086,3167,24,9528,7663,2685,1220,9196,1397,5776,1577,1730,5481,977,6115,199,6326,2183,3767,5928,5586,7561,663,8649,9688,949,5913,9160,1870,5764,9887,4477,6703,1413,4995,5494,7131,2192,8969,7138,3997,8697,646,1028
-8074,1731,8245,624,4601,8706,155,8891,309,2552,8208,8452,2954,3124,3469,4246,3352,1105,4509,8677,9901,4416,8191,9283,5625,7120,2952,8881,7693,830,4580,8228,9459,8611,4499,1179,4988,1394,550,2336,6089,6872,269,7213,1848,917,6672,4890,656,1478,6536,3165,4743,4990,1176,6211,7207,5284,9730,4738,1549,4986,4942,8645,3698,9429,1439,2175,6549,3058,6513,1574,6988,8333,3406,5245,5431,7140,7085,6407
-7845,4694,2530,8249,290,5948,5509,1588,5940,4495,5866,5021,4626,3979,3296,7589,4854,1998,5627,3926,8346,6512,9608,1918,7070,4747,4182,2858,2766,4606,6269,4107,8982,8568,9053,4244,5604,102,2756,727,5887,2566,7922,44,5986,621,1202,374,6988,4130,3627,6744,9443,4568,1398,8679,397,3928,9159,367,2917,6127,5788,3304,8129,911,2669,1463,9749,264,4478,8940,1109,7309,2462,117,4692,7724,225,2312
-4164,3637,2000,941,8903,39,3443,7172,1031,3687,4901,8082,4945,4515,7204,9310,9349,9535,9940,218,1788,9245,2237,1541,5670,6538,6047,5553,9807,8101,1925,8714,445,8332,7309,6830,5786,5736,7306,2710,3034,1838,7969,6318,7912,2584,2080,7437,6705,2254,7428,820,782,9861,7596,3842,3631,8063,5240,6666,394,4565,7865,4895,9890,6028,6117,4724,9156,4473,4552,602,470,6191,4927,5387,884,3146,1978,3000
-4258,6880,1696,3582,5793,4923,2119,1155,9056,9698,6603,3768,5514,9927,9609,6166,6566,4536,4985,4934,8076,9062,6741,6163,7399,4562,2337,5600,2919,9012,8459,1308,6072,1225,9306,8818,5886,7243,7365,8792,6007,9256,6699,7171,4230,7002,8720,7839,4533,1671,478,7774,1607,2317,5437,4705,7886,4760,6760,7271,3081,2997,3088,7675,6208,3101,6821,6840,122,9633,4900,2067,8546,4549,2091,7188,5605,8599,6758,5229
-7854,5243,9155,3556,8812,7047,2202,1541,5993,4600,4760,713,434,7911,7426,7414,8729,322,803,7960,7563,4908,6285,6291,736,3389,9339,4132,8701,7534,5287,3646,592,3065,7582,2592,8755,6068,8597,1982,5782,1894,2900,6236,4039,6569,3037,5837,7698,700,7815,2491,7272,5878,3083,6778,6639,3589,5010,8313,2581,6617,5869,8402,6808,2951,2321,5195,497,2190,6187,1342,1316,4453,7740,4154,2959,1781,1482,8256
-7178,2046,4419,744,8312,5356,6855,8839,319,2962,5662,47,6307,8662,68,4813,567,2712,9931,1678,3101,8227,6533,4933,6656,92,5846,4780,6256,6361,4323,9985,1231,2175,7178,3034,9744,6155,9165,7787,5836,9318,7860,9644,8941,6480,9443,8188,5928,161,6979,2352,5628,6991,1198,8067,5867,6620,3778,8426,2994,3122,3124,6335,3918,8897,2655,9670,634,1088,1576,8935,7255,474,8166,7417,9547,2886,5560,3842
-6957,3111,26,7530,7143,1295,1744,6057,3009,1854,8098,5405,2234,4874,9447,2620,9303,27,7410,969,40,2966,5648,7596,8637,4238,3143,3679,7187,690,9980,7085,7714,9373,5632,7526,6707,3951,9734,4216,2146,3602,5371,6029,3039,4433,4855,4151,1449,3376,8009,7240,7027,4602,2947,9081,4045,8424,9352,8742,923,2705,4266,3232,2264,6761,363,2651,3383,7770,6730,7856,7340,9679,2158,610,4471,4608,910,6241
-4417,6756,1013,8797,658,8809,5032,8703,7541,846,3357,2920,9817,1745,9980,7593,4667,3087,779,3218,6233,5568,4296,2289,2654,7898,5021,9461,5593,8214,9173,4203,2271,7980,2983,5952,9992,8399,3468,1776,3188,9314,1720,6523,2933,621,8685,5483,8986,6163,3444,9539,4320,155,3992,2828,2150,6071,524,2895,5468,8063,1210,3348,9071,4862,483,9017,4097,6186,9815,3610,5048,1644,1003,9865,9332,2145,1944,2213
-9284,3803,4920,1927,6706,4344,7383,4786,9890,2010,5228,1224,3158,6967,8580,8990,8883,5213,76,8306,2031,4980,5639,9519,7184,5645,7769,3259,8077,9130,1317,3096,9624,3818,1770,695,2454,947,6029,3474,9938,3527,5696,4760,7724,7738,2848,6442,5767,6845,8323,4131,2859,7595,2500,4815,3660,9130,8580,7016,8231,4391,8369,3444,4069,4021,556,6154,627,2778,1496,4206,6356,8434,8491,3816,8231,3190,5575,1015
-3787,7572,1788,6803,5641,6844,1961,4811,8535,9914,9999,1450,8857,738,4662,8569,6679,2225,7839,8618,286,2648,5342,2294,3205,4546,176,8705,3741,6134,8324,8021,7004,5205,7032,6637,9442,5539,5584,4819,5874,5807,8589,6871,9016,983,1758,3786,1519,6241,185,8398,495,3370,9133,3051,4549,9674,7311,9738,3316,9383,2658,2776,9481,7558,619,3943,3324,6491,4933,153,9738,4623,912,3595,7771,7939,1219,4405
-2650,3883,4154,5809,315,7756,4430,1788,4451,1631,6461,7230,6017,5751,138,588,5282,2442,9110,9035,6349,2515,1570,6122,4192,4174,3530,1933,4186,4420,4609,5739,4135,2963,6308,1161,8809,8619,2796,3819,6971,8228,4188,1492,909,8048,2328,6772,8467,7671,9068,2226,7579,6422,7056,8042,3296,2272,3006,2196,7320,3238,3490,3102,37,1293,3212,4767,5041,8773,5794,4456,6174,7279,7054,2835,7053,9088,790,6640
-3101,1057,7057,3826,6077,1025,2955,1224,1114,6729,5902,4698,6239,7203,9423,1804,4417,6686,1426,6941,8071,1029,4985,9010,6122,6597,1622,1574,3513,1684,7086,5505,3244,411,9638,4150,907,9135,829,981,1707,5359,8781,9751,5,9131,3973,7159,1340,6955,7514,7993,6964,8198,1933,2797,877,3993,4453,8020,9349,8646,2779,8679,2961,3547,3374,3510,1129,3568,2241,2625,9138,5974,8206,7669,7678,1833,8700,4480
-4865,9912,8038,8238,782,3095,8199,1127,4501,7280,2112,2487,3626,2790,9432,1475,6312,8277,4827,2218,5806,7132,8752,1468,7471,6386,739,8762,8323,8120,5169,9078,9058,3370,9560,7987,8585,8531,5347,9312,1058,4271,1159,5286,5404,6925,8606,9204,7361,2415,560,586,4002,2644,1927,2824,768,4409,2942,3345,1002,808,4941,6267,7979,5140,8643,7553,9438,7320,4938,2666,4609,2778,8158,6730,3748,3867,1866,7181
-171,3771,7134,8927,4778,2913,3326,2004,3089,7853,1378,1729,4777,2706,9578,1360,5693,3036,1851,7248,2403,2273,8536,6501,9216,613,9671,7131,7719,6425,773,717,8803,160,1114,7554,7197,753,4513,4322,8499,4533,2609,4226,8710,6627,644,9666,6260,4870,5744,7385,6542,6203,7703,6130,8944,5589,2262,6803,6381,7414,6888,5123,7320,9392,9061,6780,322,8975,7050,5089,1061,2260,3199,1150,1865,5386,9699,6501
-3744,8454,6885,8277,919,1923,4001,6864,7854,5519,2491,6057,8794,9645,1776,5714,9786,9281,7538,6916,3215,395,2501,9618,4835,8846,9708,2813,3303,1794,8309,7176,2206,1602,1838,236,4593,2245,8993,4017,10,8215,6921,5206,4023,5932,6997,7801,262,7640,3107,8275,4938,7822,2425,3223,3886,2105,8700,9526,2088,8662,8034,7004,5710,2124,7164,3574,6630,9980,4242,2901,9471,1491,2117,4562,1130,9086,4117,6698
-2810,2280,2331,1170,4554,4071,8387,1215,2274,9848,6738,1604,7281,8805,439,1298,8318,7834,9426,8603,6092,7944,1309,8828,303,3157,4638,4439,9175,1921,4695,7716,1494,1015,1772,5913,1127,1952,1950,8905,4064,9890,385,9357,7945,5035,7082,5369,4093,6546,5187,5637,2041,8946,1758,7111,6566,1027,1049,5148,7224,7248,296,6169,375,1656,7993,2816,3717,4279,4675,1609,3317,42,6201,3100,3144,163,9530,4531
-7096,6070,1009,4988,3538,5801,7149,3063,2324,2912,7911,7002,4338,7880,2481,7368,3516,2016,7556,2193,1388,3865,8125,4637,4096,8114,750,3144,1938,7002,9343,4095,1392,4220,3455,6969,9647,1321,9048,1996,1640,6626,1788,314,9578,6630,2813,6626,4981,9908,7024,4355,3201,3521,3864,3303,464,1923,595,9801,3391,8366,8084,9374,1041,8807,9085,1892,9431,8317,9016,9221,8574,9981,9240,5395,2009,6310,2854,9255
-8830,3145,2960,9615,8220,6061,3452,2918,6481,9278,2297,3385,6565,7066,7316,5682,107,7646,4466,68,1952,9603,8615,54,7191,791,6833,2560,693,9733,4168,570,9127,9537,1925,8287,5508,4297,8452,8795,6213,7994,2420,4208,524,5915,8602,8330,2651,8547,6156,1812,6271,7991,9407,9804,1553,6866,1128,2119,4691,9711,8315,5879,9935,6900,482,682,4126,1041,428,6247,3720,5882,7526,2582,4327,7725,3503,2631
-2738,9323,721,7434,1453,6294,2957,3786,5722,6019,8685,4386,3066,9057,6860,499,5315,3045,5194,7111,3137,9104,941,586,3066,755,4177,8819,7040,5309,3583,3897,4428,7788,4721,7249,6559,7324,825,7311,3760,6064,6070,9672,4882,584,1365,9739,9331,5783,2624,7889,1604,1303,1555,7125,8312,425,8936,3233,7724,1480,403,7440,1784,1754,4721,1569,652,3893,4574,5692,9730,4813,9844,8291,9199,7101,3391,8914
-6044,2928,9332,3328,8588,447,3830,1176,3523,2705,8365,6136,5442,9049,5526,8575,8869,9031,7280,706,2794,8814,5767,4241,7696,78,6570,556,5083,1426,4502,3336,9518,2292,1885,3740,3153,9348,9331,8051,2759,5407,9028,7840,9255,831,515,2612,9747,7435,8964,4971,2048,4900,5967,8271,1719,9670,2810,6777,1594,6367,6259,8316,3815,1689,6840,9437,4361,822,9619,3065,83,6344,7486,8657,8228,9635,6932,4864
-8478,4777,6334,4678,7476,4963,6735,3096,5860,1405,5127,7269,7793,4738,227,9168,2996,8928,765,733,1276,7677,6258,1528,9558,3329,302,8901,1422,8277,6340,645,9125,8869,5952,141,8141,1816,9635,4025,4184,3093,83,2344,2747,9352,7966,1206,1126,1826,218,7939,2957,2729,810,8752,5247,4174,4038,8884,7899,9567,301,5265,5752,7524,4381,1669,3106,8270,6228,6373,754,2547,4240,2313,5514,3022,1040,9738
-2265,8192,1763,1369,8469,8789,4836,52,1212,6690,5257,8918,6723,6319,378,4039,2421,8555,8184,9577,1432,7139,8078,5452,9628,7579,4161,7490,5159,8559,1011,81,478,5840,1964,1334,6875,8670,9900,739,1514,8692,522,9316,6955,1345,8132,2277,3193,9773,3923,4177,2183,1236,6747,6575,4874,6003,6409,8187,745,8776,9440,7543,9825,2582,7381,8147,7236,5185,7564,6125,218,7991,6394,391,7659,7456,5128,5294
-2132,8992,8160,5782,4420,3371,3798,5054,552,5631,7546,4716,1332,6486,7892,7441,4370,6231,4579,2121,8615,1145,9391,1524,1385,2400,9437,2454,7896,7467,2928,8400,3299,4025,7458,4703,7206,6358,792,6200,725,4275,4136,7390,5984,4502,7929,5085,8176,4600,119,3568,76,9363,6943,2248,9077,9731,6213,5817,6729,4190,3092,6910,759,2682,8380,1254,9604,3011,9291,5329,9453,9746,2739,6522,3765,5634,1113,5789
-5304,5499,564,2801,679,2653,1783,3608,7359,7797,3284,796,3222,437,7185,6135,8571,2778,7488,5746,678,6140,861,7750,803,9859,9918,2425,3734,2698,9005,4864,9818,6743,2475,132,9486,3825,5472,919,292,4411,7213,7699,6435,9019,6769,1388,802,2124,1345,8493,9487,8558,7061,8777,8833,2427,2238,5409,4957,8503,3171,7622,5779,6145,2417,5873,5563,5693,9574,9491,1937,7384,4563,6842,5432,2751,3406,7981
diff --git a/src/projecteuler/082.py b/src/projecteuler/082.py
deleted file mode 100644
index b0fd92a..0000000
--- a/src/projecteuler/082.py
+++ /dev/null
@@ -1,85 +0,0 @@
-
-# uses Dijkstra's algorithm to find minimal path
-# (based on solution for problem 81)
-#
-# slow, but working
-
-infinity = 99999999
-
-matrix = []
-
-width = 80
-height = 80
-
-f = open('082.txt', 'r')
-for line in f:
- line.rstrip('\n')
- line_str = line.split(',')
- line_int = [ int(x) for x in line_str ]
- matrix.append(line_int)
-f.close()
-
-globalmin = 500000
-
-for currentrow in range(height):
-
- # initialize
- distance = [infinity] * (width*height)
- pre = [None] * (width*height)
- distance[currentrow*width] = 0 # start node
- Q = range(width*height)
-
- def mindistance(Q):
- mini = Q[0]
- mind = distance[mini]
- for i in Q:
- if distance[i] < mind:
- mind = distance[i]
- mini = i
- return mini
-
- def neighbors(u):
- n = []
- row = u / width
- col = u % width
- if col == 0:
- return[u+1]
- if col < width-1:
- n.append(row*width + col + 1) # right neighbor
- if row < height-1:
- n.append((row+1)*width + col) # lower neighbor
- if row > 0:
- n.append((row-1)*width + col) # upper neighbor
- return n
-
- def update(u, v):
- alt = distance[u] + matrix[v/width][v%width]
- if alt < distance[v]:
- distance[v] = alt
- pre[v] = u
-
- # main algorithm
- while len(Q) > 0:
- u = mindistance(Q)
- Q.remove(u)
- for v in neighbors(u):
- if v in Q:
- update(u, v)
-
- # search min distance
- for targetrow in range(height):
- u = targetrow*width-1 # target node
- path = [ u ]
- while pre[u] != None:
- u = pre[u]
- path = [u] + path
-
- minsum = 0
- for n in path:
- minsum += matrix[n/width][n%width]
-
- if minsum < globalmin:
- globalmin = minsum
-
-print globalmin
-
diff --git a/src/projecteuler/082.txt b/src/projecteuler/082.txt
deleted file mode 100644
index 1e9e6cd..0000000
--- a/src/projecteuler/082.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870
-1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377
-9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230
-7206,3114,7760,1094,6150,5182,7358,7387,4497,955,101,1478,7777,6966,7010,8417,6453,4955,3496,107,449,8271,131,2948,6185,784,5937,8001,6104,8282,4165,3642,710,2390,575,715,3089,6964,4217,192,5949,7006,715,3328,1152,66,8044,4319,1735,146,4818,5456,6451,4113,1063,4781,6799,602,1504,6245,6550,1417,1343,2363,3785,5448,4545,9371,5420,5068,4613,4882,4241,5043,7873,8042,8434,3939,9256,2187
-3620,8024,577,9997,7377,7682,1314,1158,6282,6310,1896,2509,5436,1732,9480,706,496,101,6232,7375,2207,2306,110,6772,3433,2878,8140,5933,8688,1399,2210,7332,6172,6403,7333,4044,2291,1790,2446,7390,8698,5723,3678,7104,1825,2040,140,3982,4905,4160,2200,5041,2512,1488,2268,1175,7588,8321,8078,7312,977,5257,8465,5068,3453,3096,1651,7906,253,9250,6021,8791,8109,6651,3412,345,4778,5152,4883,7505
-1074,5438,9008,2679,5397,5429,2652,3403,770,9188,4248,2493,4361,8327,9587,707,9525,5913,93,1899,328,2876,3604,673,8576,6908,7659,2544,3359,3883,5273,6587,3065,1749,3223,604,9925,6941,2823,8767,7039,3290,3214,1787,7904,3421,7137,9560,8451,2669,9219,6332,1576,5477,6755,8348,4164,4307,2984,4012,6629,1044,2874,6541,4942,903,1404,9125,5160,8836,4345,2581,460,8438,1538,5507,668,3352,2678,6942
-4295,1176,5596,1521,3061,9868,7037,7129,8933,6659,5947,5063,3653,9447,9245,2679,767,714,116,8558,163,3927,8779,158,5093,2447,5782,3967,1716,931,7772,8164,1117,9244,5783,7776,3846,8862,6014,2330,6947,1777,3112,6008,3491,1906,5952,314,4602,8994,5919,9214,3995,5026,7688,6809,5003,3128,2509,7477,110,8971,3982,8539,2980,4689,6343,5411,2992,5270,5247,9260,2269,7474,1042,7162,5206,1232,4556,4757
-510,3556,5377,1406,5721,4946,2635,7847,4251,8293,8281,6351,4912,287,2870,3380,3948,5322,3840,4738,9563,1906,6298,3234,8959,1562,6297,8835,7861,239,6618,1322,2553,2213,5053,5446,4402,6500,5182,8585,6900,5756,9661,903,5186,7687,5998,7997,8081,8955,4835,6069,2621,1581,732,9564,1082,1853,5442,1342,520,1737,3703,5321,4793,2776,1508,1647,9101,2499,6891,4336,7012,3329,3212,1442,9993,3988,4930,7706
-9444,3401,5891,9716,1228,7107,109,3563,2700,6161,5039,4992,2242,8541,7372,2067,1294,3058,1306,320,8881,5756,9326,411,8650,8824,5495,8282,8397,2000,1228,7817,2099,6473,3571,5994,4447,1299,5991,543,7874,2297,1651,101,2093,3463,9189,6872,6118,872,1008,1779,2805,9084,4048,2123,5877,55,3075,1737,9459,4535,6453,3644,108,5982,4437,5213,1340,6967,9943,5815,669,8074,1838,6979,9132,9315,715,5048
-3327,4030,7177,6336,9933,5296,2621,4785,2755,4832,2512,2118,2244,4407,2170,499,7532,9742,5051,7687,970,6924,3527,4694,5145,1306,2165,5940,2425,8910,3513,1909,6983,346,6377,4304,9330,7203,6605,3709,3346,970,369,9737,5811,4427,9939,3693,8436,5566,1977,3728,2399,3985,8303,2492,5366,9802,9193,7296,1033,5060,9144,2766,1151,7629,5169,5995,58,7619,7565,4208,1713,6279,3209,4908,9224,7409,1325,8540
-6882,1265,1775,3648,4690,959,5837,4520,5394,1378,9485,1360,4018,578,9174,2932,9890,3696,116,1723,1178,9355,7063,1594,1918,8574,7594,7942,1547,6166,7888,354,6932,4651,1010,7759,6905,661,7689,6092,9292,3845,9605,8443,443,8275,5163,7720,7265,6356,7779,1798,1754,5225,6661,1180,8024,5666,88,9153,1840,3508,1193,4445,2648,3538,6243,6375,8107,5902,5423,2520,1122,5015,6113,8859,9370,966,8673,2442
-7338,3423,4723,6533,848,8041,7921,8277,4094,5368,7252,8852,9166,2250,2801,6125,8093,5738,4038,9808,7359,9494,601,9116,4946,2702,5573,2921,9862,1462,1269,2410,4171,2709,7508,6241,7522,615,2407,8200,4189,5492,5649,7353,2590,5203,4274,710,7329,9063,956,8371,3722,4253,4785,1194,4828,4717,4548,940,983,2575,4511,2938,1827,2027,2700,1236,841,5760,1680,6260,2373,3851,1841,4968,1172,5179,7175,3509
-4420,1327,3560,2376,6260,2988,9537,4064,4829,8872,9598,3228,1792,7118,9962,9336,4368,9189,6857,1829,9863,6287,7303,7769,2707,8257,2391,2009,3975,4993,3068,9835,3427,341,8412,2134,4034,8511,6421,3041,9012,2983,7289,100,1355,7904,9186,6920,5856,2008,6545,8331,3655,5011,839,8041,9255,6524,3862,8788,62,7455,3513,5003,8413,3918,2076,7960,6108,3638,6999,3436,1441,4858,4181,1866,8731,7745,3744,1000
-356,8296,8325,1058,1277,4743,3850,2388,6079,6462,2815,5620,8495,5378,75,4324,3441,9870,1113,165,1544,1179,2834,562,6176,2313,6836,8839,2986,9454,5199,6888,1927,5866,8760,320,1792,8296,7898,6121,7241,5886,5814,2815,8336,1576,4314,3109,2572,6011,2086,9061,9403,3947,5487,9731,7281,3159,1819,1334,3181,5844,5114,9898,4634,2531,4412,6430,4262,8482,4546,4555,6804,2607,9421,686,8649,8860,7794,6672
-9870,152,1558,4963,8750,4754,6521,6256,8818,5208,5691,9659,8377,9725,5050,5343,2539,6101,1844,9700,7750,8114,5357,3001,8830,4438,199,9545,8496,43,2078,327,9397,106,6090,8181,8646,6414,7499,5450,4850,6273,5014,4131,7639,3913,6571,8534,9703,4391,7618,445,1320,5,1894,6771,7383,9191,4708,9706,6939,7937,8726,9382,5216,3685,2247,9029,8154,1738,9984,2626,9438,4167,6351,5060,29,1218,1239,4785
-192,5213,8297,8974,4032,6966,5717,1179,6523,4679,9513,1481,3041,5355,9303,9154,1389,8702,6589,7818,6336,3539,5538,3094,6646,6702,6266,2759,4608,4452,617,9406,8064,6379,444,5602,4950,1810,8391,1536,316,8714,1178,5182,5863,5110,5372,4954,1978,2971,5680,4863,2255,4630,5723,2168,538,1692,1319,7540,440,6430,6266,7712,7385,5702,620,641,3136,7350,1478,3155,2820,9109,6261,1122,4470,14,8493,2095
-1046,4301,6082,474,4974,7822,2102,5161,5172,6946,8074,9716,6586,9962,9749,5015,2217,995,5388,4402,7652,6399,6539,1349,8101,3677,1328,9612,7922,2879,231,5887,2655,508,4357,4964,3554,5930,6236,7384,4614,280,3093,9600,2110,7863,2631,6626,6620,68,1311,7198,7561,1768,5139,1431,221,230,2940,968,5283,6517,2146,1646,869,9402,7068,8645,7058,1765,9690,4152,2926,9504,2939,7504,6074,2944,6470,7859
-4659,736,4951,9344,1927,6271,8837,8711,3241,6579,7660,5499,5616,3743,5801,4682,9748,8796,779,1833,4549,8138,4026,775,4170,2432,4174,3741,7540,8017,2833,4027,396,811,2871,1150,9809,2719,9199,8504,1224,540,2051,3519,7982,7367,2761,308,3358,6505,2050,4836,5090,7864,805,2566,2409,6876,3361,8622,5572,5895,3280,441,7893,8105,1634,2929,274,3926,7786,6123,8233,9921,2674,5340,1445,203,4585,3837
-5759,338,7444,7968,7742,3755,1591,4839,1705,650,7061,2461,9230,9391,9373,2413,1213,431,7801,4994,2380,2703,6161,6878,8331,2538,6093,1275,5065,5062,2839,582,1014,8109,3525,1544,1569,8622,7944,2905,6120,1564,1839,5570,7579,1318,2677,5257,4418,5601,7935,7656,5192,1864,5886,6083,5580,6202,8869,1636,7907,4759,9082,5854,3185,7631,6854,5872,5632,5280,1431,2077,9717,7431,4256,8261,9680,4487,4752,4286
-1571,1428,8599,1230,7772,4221,8523,9049,4042,8726,7567,6736,9033,2104,4879,4967,6334,6716,3994,1269,8995,6539,3610,7667,6560,6065,874,848,4597,1711,7161,4811,6734,5723,6356,6026,9183,2586,5636,1092,7779,7923,8747,6887,7505,9909,1792,3233,4526,3176,1508,8043,720,5212,6046,4988,709,5277,8256,3642,1391,5803,1468,2145,3970,6301,7767,2359,8487,9771,8785,7520,856,1605,8972,2402,2386,991,1383,5963
-1822,4824,5957,6511,9868,4113,301,9353,6228,2881,2966,6956,9124,9574,9233,1601,7340,973,9396,540,4747,8590,9535,3650,7333,7583,4806,3593,2738,8157,5215,8472,2284,9473,3906,6982,5505,6053,7936,6074,7179,6688,1564,1103,6860,5839,2022,8490,910,7551,7805,881,7024,1855,9448,4790,1274,3672,2810,774,7623,4223,4850,6071,9975,4935,1915,9771,6690,3846,517,463,7624,4511,614,6394,3661,7409,1395,8127
-8738,3850,9555,3695,4383,2378,87,6256,6740,7682,9546,4255,6105,2000,1851,4073,8957,9022,6547,5189,2487,303,9602,7833,1628,4163,6678,3144,8589,7096,8913,5823,4890,7679,1212,9294,5884,2972,3012,3359,7794,7428,1579,4350,7246,4301,7779,7790,3294,9547,4367,3549,1958,8237,6758,3497,3250,3456,6318,1663,708,7714,6143,6890,3428,6853,9334,7992,591,6449,9786,1412,8500,722,5468,1371,108,3939,4199,2535
-7047,4323,1934,5163,4166,461,3544,2767,6554,203,6098,2265,9078,2075,4644,6641,8412,9183,487,101,7566,5622,1975,5726,2920,5374,7779,5631,3753,3725,2672,3621,4280,1162,5812,345,8173,9785,1525,955,5603,2215,2580,5261,2765,2990,5979,389,3907,2484,1232,5933,5871,3304,1138,1616,5114,9199,5072,7442,7245,6472,4760,6359,9053,7876,2564,9404,3043,9026,2261,3374,4460,7306,2326,966,828,3274,1712,3446
-3975,4565,8131,5800,4570,2306,8838,4392,9147,11,3911,7118,9645,4994,2028,6062,5431,2279,8752,2658,7836,994,7316,5336,7185,3289,1898,9689,2331,5737,3403,1124,2679,3241,7748,16,2724,5441,6640,9368,9081,5618,858,4969,17,2103,6035,8043,7475,2181,939,415,1617,8500,8253,2155,7843,7974,7859,1746,6336,3193,2617,8736,4079,6324,6645,8891,9396,5522,6103,1857,8979,3835,2475,1310,7422,610,8345,7615
-9248,5397,5686,2988,3446,4359,6634,9141,497,9176,6773,7448,1907,8454,916,1596,2241,1626,1384,2741,3649,5362,8791,7170,2903,2475,5325,6451,924,3328,522,90,4813,9737,9557,691,2388,1383,4021,1609,9206,4707,5200,7107,8104,4333,9860,5013,1224,6959,8527,1877,4545,7772,6268,621,4915,9349,5970,706,9583,3071,4127,780,8231,3017,9114,3836,7503,2383,1977,4870,8035,2379,9704,1037,3992,3642,1016,4303
-5093,138,4639,6609,1146,5565,95,7521,9077,2272,974,4388,2465,2650,722,4998,3567,3047,921,2736,7855,173,2065,4238,1048,5,6847,9548,8632,9194,5942,4777,7910,8971,6279,7253,2516,1555,1833,3184,9453,9053,6897,7808,8629,4877,1871,8055,4881,7639,1537,7701,2508,7564,5845,5023,2304,5396,3193,2955,1088,3801,6203,1748,3737,1276,13,4120,7715,8552,3047,2921,106,7508,304,1280,7140,2567,9135,5266
-6237,4607,7527,9047,522,7371,4883,2540,5867,6366,5301,1570,421,276,3361,527,6637,4861,2401,7522,5808,9371,5298,2045,5096,5447,7755,5115,7060,8529,4078,1943,1697,1764,5453,7085,960,2405,739,2100,5800,728,9737,5704,5693,1431,8979,6428,673,7540,6,7773,5857,6823,150,5869,8486,684,5816,9626,7451,5579,8260,3397,5322,6920,1879,2127,2884,5478,4977,9016,6165,6292,3062,5671,5968,78,4619,4763
-9905,7127,9390,5185,6923,3721,9164,9705,4341,1031,1046,5127,7376,6528,3248,4941,1178,7889,3364,4486,5358,9402,9158,8600,1025,874,1839,1783,309,9030,1843,845,8398,1433,7118,70,8071,2877,3904,8866,6722,4299,10,1929,5897,4188,600,1889,3325,2485,6473,4474,7444,6992,4846,6166,4441,2283,2629,4352,7775,1101,2214,9985,215,8270,9750,2740,8361,7103,5930,8664,9690,8302,9267,344,2077,1372,1880,9550
-5825,8517,7769,2405,8204,1060,3603,7025,478,8334,1997,3692,7433,9101,7294,7498,9415,5452,3850,3508,6857,9213,6807,4412,7310,854,5384,686,4978,892,8651,3241,2743,3801,3813,8588,6701,4416,6990,6490,3197,6838,6503,114,8343,5844,8646,8694,65,791,5979,2687,2621,2019,8097,1423,3644,9764,4921,3266,3662,5561,2476,8271,8138,6147,1168,3340,1998,9874,6572,9873,6659,5609,2711,3931,9567,4143,7833,8887
-6223,2099,2700,589,4716,8333,1362,5007,2753,2848,4441,8397,7192,8191,4916,9955,6076,3370,6396,6971,3156,248,3911,2488,4930,2458,7183,5455,170,6809,6417,3390,1956,7188,577,7526,2203,968,8164,479,8699,7915,507,6393,4632,1597,7534,3604,618,3280,6061,9793,9238,8347,568,9645,2070,5198,6482,5000,9212,6655,5961,7513,1323,3872,6170,3812,4146,2736,67,3151,5548,2781,9679,7564,5043,8587,1893,4531
-5826,3690,6724,2121,9308,6986,8106,6659,2142,1642,7170,2877,5757,6494,8026,6571,8387,9961,6043,9758,9607,6450,8631,8334,7359,5256,8523,2225,7487,1977,9555,8048,5763,2414,4948,4265,2427,8978,8088,8841,9208,9601,5810,9398,8866,9138,4176,5875,7212,3272,6759,5678,7649,4922,5422,1343,8197,3154,3600,687,1028,4579,2084,9467,4492,7262,7296,6538,7657,7134,2077,1505,7332,6890,8964,4879,7603,7400,5973,739
-1861,1613,4879,1884,7334,966,2000,7489,2123,4287,1472,3263,4726,9203,1040,4103,6075,6049,330,9253,4062,4268,1635,9960,577,1320,3195,9628,1030,4092,4979,6474,6393,2799,6967,8687,7724,7392,9927,2085,3200,6466,8702,265,7646,8665,7986,7266,4574,6587,612,2724,704,3191,8323,9523,3002,704,5064,3960,8209,2027,2758,8393,4875,4641,9584,6401,7883,7014,768,443,5490,7506,1852,2005,8850,5776,4487,4269
-4052,6687,4705,7260,6645,6715,3706,5504,8672,2853,1136,8187,8203,4016,871,1809,1366,4952,9294,5339,6872,2645,6083,7874,3056,5218,7485,8796,7401,3348,2103,426,8572,4163,9171,3176,948,7654,9344,3217,1650,5580,7971,2622,76,2874,880,2034,9929,1546,2659,5811,3754,7096,7436,9694,9960,7415,2164,953,2360,4194,2397,1047,2196,6827,575,784,2675,8821,6802,7972,5996,6699,2134,7577,2887,1412,4349,4380
-4629,2234,6240,8132,7592,3181,6389,1214,266,1910,2451,8784,2790,1127,6932,1447,8986,2492,5476,397,889,3027,7641,5083,5776,4022,185,3364,5701,2442,2840,4160,9525,4828,6602,2614,7447,3711,4505,7745,8034,6514,4907,2605,7753,6958,7270,6936,3006,8968,439,2326,4652,3085,3425,9863,5049,5361,8688,297,7580,8777,7916,6687,8683,7141,306,9569,2384,1500,3346,4601,7329,9040,6097,2727,6314,4501,4974,2829
-8316,4072,2025,6884,3027,1808,5714,7624,7880,8528,4205,8686,7587,3230,1139,7273,6163,6986,3914,9309,1464,9359,4474,7095,2212,7302,2583,9462,7532,6567,1606,4436,8981,5612,6796,4385,5076,2007,6072,3678,8331,1338,3299,8845,4783,8613,4071,1232,6028,2176,3990,2148,3748,103,9453,538,6745,9110,926,3125,473,5970,8728,7072,9062,1404,1317,5139,9862,6496,6062,3338,464,1600,2532,1088,8232,7739,8274,3873
-2341,523,7096,8397,8301,6541,9844,244,4993,2280,7689,4025,4196,5522,7904,6048,2623,9258,2149,9461,6448,8087,7245,1917,8340,7127,8466,5725,6996,3421,5313,512,9164,9837,9794,8369,4185,1488,7210,1524,1016,4620,9435,2478,7765,8035,697,6677,3724,6988,5853,7662,3895,9593,1185,4727,6025,5734,7665,3070,138,8469,6748,6459,561,7935,8646,2378,462,7755,3115,9690,8877,3946,2728,8793,244,6323,8666,4271
-6430,2406,8994,56,1267,3826,9443,7079,7579,5232,6691,3435,6718,5698,4144,7028,592,2627,217,734,6194,8156,9118,58,2640,8069,4127,3285,694,3197,3377,4143,4802,3324,8134,6953,7625,3598,3584,4289,7065,3434,2106,7132,5802,7920,9060,7531,3321,1725,1067,3751,444,5503,6785,7937,6365,4803,198,6266,8177,1470,6390,1606,2904,7555,9834,8667,2033,1723,5167,1666,8546,8152,473,4475,6451,7947,3062,3281
-2810,3042,7759,1741,2275,2609,7676,8640,4117,1958,7500,8048,1757,3954,9270,1971,4796,2912,660,5511,3553,1012,5757,4525,6084,7198,8352,5775,7726,8591,7710,9589,3122,4392,6856,5016,749,2285,3356,7482,9956,7348,2599,8944,495,3462,3578,551,4543,7207,7169,7796,1247,4278,6916,8176,3742,8385,2310,1345,8692,2667,4568,1770,8319,3585,4920,3890,4928,7343,5385,9772,7947,8786,2056,9266,3454,2807,877,2660
-6206,8252,5928,5837,4177,4333,207,7934,5581,9526,8906,1498,8411,2984,5198,5134,2464,8435,8514,8674,3876,599,5327,826,2152,4084,2433,9327,9697,4800,2728,3608,3849,3861,3498,9943,1407,3991,7191,9110,5666,8434,4704,6545,5944,2357,1163,4995,9619,6754,4200,9682,6654,4862,4744,5953,6632,1054,293,9439,8286,2255,696,8709,1533,1844,6441,430,1999,6063,9431,7018,8057,2920,6266,6799,356,3597,4024,6665
-3847,6356,8541,7225,2325,2946,5199,469,5450,7508,2197,9915,8284,7983,6341,3276,3321,16,1321,7608,5015,3362,8491,6968,6818,797,156,2575,706,9516,5344,5457,9210,5051,8099,1617,9951,7663,8253,9683,2670,1261,4710,1068,8753,4799,1228,2621,3275,6188,4699,1791,9518,8701,5932,4275,6011,9877,2933,4182,6059,2930,6687,6682,9771,654,9437,3169,8596,1827,5471,8909,2352,123,4394,3208,8756,5513,6917,2056
-5458,8173,3138,3290,4570,4892,3317,4251,9699,7973,1163,1935,5477,6648,9614,5655,9592,975,9118,2194,7322,8248,8413,3462,8560,1907,7810,6650,7355,2939,4973,6894,3933,3784,3200,2419,9234,4747,2208,2207,1945,2899,1407,6145,8023,3484,5688,7686,2737,3828,3704,9004,5190,9740,8643,8650,5358,4426,1522,1707,3613,9887,6956,2447,2762,833,1449,9489,2573,1080,4167,3456,6809,2466,227,7125,2759,6250,6472,8089
-3266,7025,9756,3914,1265,9116,7723,9788,6805,5493,2092,8688,6592,9173,4431,4028,6007,7131,4446,4815,3648,6701,759,3312,8355,4485,4187,5188,8746,7759,3528,2177,5243,8379,3838,7233,4607,9187,7216,2190,6967,2920,6082,7910,5354,3609,8958,6949,7731,494,8753,8707,1523,4426,3543,7085,647,6771,9847,646,5049,824,8417,5260,2730,5702,2513,9275,4279,2767,8684,1165,9903,4518,55,9682,8963,6005,2102,6523
-1998,8731,936,1479,5259,7064,4085,91,7745,7136,3773,3810,730,8255,2705,2653,9790,6807,2342,355,9344,2668,3690,2028,9679,8102,574,4318,6481,9175,5423,8062,2867,9657,7553,3442,3920,7430,3945,7639,3714,3392,2525,4995,4850,2867,7951,9667,486,9506,9888,781,8866,1702,3795,90,356,1483,4200,2131,6969,5931,486,6880,4404,1084,5169,4910,6567,8335,4686,5043,2614,3352,2667,4513,6472,7471,5720,1616
-8878,1613,1716,868,1906,2681,564,665,5995,2474,7496,3432,9491,9087,8850,8287,669,823,347,6194,2264,2592,7871,7616,8508,4827,760,2676,4660,4881,7572,3811,9032,939,4384,929,7525,8419,5556,9063,662,8887,7026,8534,3111,1454,2082,7598,5726,6687,9647,7608,73,3014,5063,670,5461,5631,3367,9796,8475,7908,5073,1565,5008,5295,4457,1274,4788,1728,338,600,8415,8535,9351,7750,6887,5845,1741,125
-3637,6489,9634,9464,9055,2413,7824,9517,7532,3577,7050,6186,6980,9365,9782,191,870,2497,8498,2218,2757,5420,6468,586,3320,9230,1034,1393,9886,5072,9391,1178,8464,8042,6869,2075,8275,3601,7715,9470,8786,6475,8373,2159,9237,2066,3264,5000,679,355,3069,4073,494,2308,5512,4334,9438,8786,8637,9774,1169,1949,6594,6072,4270,9158,7916,5752,6794,9391,6301,5842,3285,2141,3898,8027,4310,8821,7079,1307
-8497,6681,4732,7151,7060,5204,9030,7157,833,5014,8723,3207,9796,9286,4913,119,5118,7650,9335,809,3675,2597,5144,3945,5090,8384,187,4102,1260,2445,2792,4422,8389,9290,50,1765,1521,6921,8586,4368,1565,5727,7855,2003,4834,9897,5911,8630,5070,1330,7692,7557,7980,6028,5805,9090,8265,3019,3802,698,9149,5748,1965,9658,4417,5994,5584,8226,2937,272,5743,1278,5698,8736,2595,6475,5342,6596,1149,6920
-8188,8009,9546,6310,8772,2500,9846,6592,6872,3857,1307,8125,7042,1544,6159,2330,643,4604,7899,6848,371,8067,2062,3200,7295,1857,9505,6936,384,2193,2190,301,8535,5503,1462,7380,5114,4824,8833,1763,4974,8711,9262,6698,3999,2645,6937,7747,1128,2933,3556,7943,2885,3122,9105,5447,418,2899,5148,3699,9021,9501,597,4084,175,1621,1,1079,6067,5812,4326,9914,6633,5394,4233,6728,9084,1864,5863,1225
-9935,8793,9117,1825,9542,8246,8437,3331,9128,9675,6086,7075,319,1334,7932,3583,7167,4178,1726,7720,695,8277,7887,6359,5912,1719,2780,8529,1359,2013,4498,8072,1129,9998,1147,8804,9405,6255,1619,2165,7491,1,8882,7378,3337,503,5758,4109,3577,985,3200,7615,8058,5032,1080,6410,6873,5496,1466,2412,9885,5904,4406,3605,8770,4361,6205,9193,1537,9959,214,7260,9566,1685,100,4920,7138,9819,5637,976
-3466,9854,985,1078,7222,8888,5466,5379,3578,4540,6853,8690,3728,6351,7147,3134,6921,9692,857,3307,4998,2172,5783,3931,9417,2541,6299,13,787,2099,9131,9494,896,8600,1643,8419,7248,2660,2609,8579,91,6663,5506,7675,1947,6165,4286,1972,9645,3805,1663,1456,8853,5705,9889,7489,1107,383,4044,2969,3343,152,7805,4980,9929,5033,1737,9953,7197,9158,4071,1324,473,9676,3984,9680,3606,8160,7384,5432
-1005,4512,5186,3953,2164,3372,4097,3247,8697,3022,9896,4101,3871,6791,3219,2742,4630,6967,7829,5991,6134,1197,1414,8923,8787,1394,8852,5019,7768,5147,8004,8825,5062,9625,7988,1110,3992,7984,9966,6516,6251,8270,421,3723,1432,4830,6935,8095,9059,2214,6483,6846,3120,1587,6201,6691,9096,9627,6671,4002,3495,9939,7708,7465,5879,6959,6634,3241,3401,2355,9061,2611,7830,3941,2177,2146,5089,7079,519,6351
-7280,8586,4261,2831,7217,3141,9994,9940,5462,2189,4005,6942,9848,5350,8060,6665,7519,4324,7684,657,9453,9296,2944,6843,7499,7847,1728,9681,3906,6353,5529,2822,3355,3897,7724,4257,7489,8672,4356,3983,1948,6892,7415,4153,5893,4190,621,1736,4045,9532,7701,3671,1211,1622,3176,4524,9317,7800,5638,6644,6943,5463,3531,2821,1347,5958,3436,1438,2999,994,850,4131,2616,1549,3465,5946,690,9273,6954,7991
-9517,399,3249,2596,7736,2142,1322,968,7350,1614,468,3346,3265,7222,6086,1661,5317,2582,7959,4685,2807,2917,1037,5698,1529,3972,8716,2634,3301,3412,8621,743,8001,4734,888,7744,8092,3671,8941,1487,5658,7099,2781,99,1932,4443,4756,4652,9328,1581,7855,4312,5976,7255,6480,3996,2748,1973,9731,4530,2790,9417,7186,5303,3557,351,7182,9428,1342,9020,7599,1392,8304,2070,9138,7215,2008,9937,1106,7110
-7444,769,9688,632,1571,6820,8743,4338,337,3366,3073,1946,8219,104,4210,6986,249,5061,8693,7960,6546,1004,8857,5997,9352,4338,6105,5008,2556,6518,6694,4345,3727,7956,20,3954,8652,4424,9387,2035,8358,5962,5304,5194,8650,8282,1256,1103,2138,6679,1985,3653,2770,2433,4278,615,2863,1715,242,3790,2636,6998,3088,1671,2239,957,5411,4595,6282,2881,9974,2401,875,7574,2987,4587,3147,6766,9885,2965
-3287,3016,3619,6818,9073,6120,5423,557,2900,2015,8111,3873,1314,4189,1846,4399,7041,7583,2427,2864,3525,5002,2069,748,1948,6015,2684,438,770,8367,1663,7887,7759,1885,157,7770,4520,4878,3857,1137,3525,3050,6276,5569,7649,904,4533,7843,2199,5648,7628,9075,9441,3600,7231,2388,5640,9096,958,3058,584,5899,8150,1181,9616,1098,8162,6819,8171,1519,1140,7665,8801,2632,1299,9192,707,9955,2710,7314
-1772,2963,7578,3541,3095,1488,7026,2634,6015,4633,4370,2762,1650,2174,909,8158,2922,8467,4198,4280,9092,8856,8835,5457,2790,8574,9742,5054,9547,4156,7940,8126,9824,7340,8840,6574,3547,1477,3014,6798,7134,435,9484,9859,3031,4,1502,4133,1738,1807,4825,463,6343,9701,8506,9822,9555,8688,8168,3467,3234,6318,1787,5591,419,6593,7974,8486,9861,6381,6758,194,3061,4315,2863,4665,3789,2201,1492,4416
-126,8927,6608,5682,8986,6867,1715,6076,3159,788,3140,4744,830,9253,5812,5021,7616,8534,1546,9590,1101,9012,9821,8132,7857,4086,1069,7491,2988,1579,2442,4321,2149,7642,6108,250,6086,3167,24,9528,7663,2685,1220,9196,1397,5776,1577,1730,5481,977,6115,199,6326,2183,3767,5928,5586,7561,663,8649,9688,949,5913,9160,1870,5764,9887,4477,6703,1413,4995,5494,7131,2192,8969,7138,3997,8697,646,1028
-8074,1731,8245,624,4601,8706,155,8891,309,2552,8208,8452,2954,3124,3469,4246,3352,1105,4509,8677,9901,4416,8191,9283,5625,7120,2952,8881,7693,830,4580,8228,9459,8611,4499,1179,4988,1394,550,2336,6089,6872,269,7213,1848,917,6672,4890,656,1478,6536,3165,4743,4990,1176,6211,7207,5284,9730,4738,1549,4986,4942,8645,3698,9429,1439,2175,6549,3058,6513,1574,6988,8333,3406,5245,5431,7140,7085,6407
-7845,4694,2530,8249,290,5948,5509,1588,5940,4495,5866,5021,4626,3979,3296,7589,4854,1998,5627,3926,8346,6512,9608,1918,7070,4747,4182,2858,2766,4606,6269,4107,8982,8568,9053,4244,5604,102,2756,727,5887,2566,7922,44,5986,621,1202,374,6988,4130,3627,6744,9443,4568,1398,8679,397,3928,9159,367,2917,6127,5788,3304,8129,911,2669,1463,9749,264,4478,8940,1109,7309,2462,117,4692,7724,225,2312
-4164,3637,2000,941,8903,39,3443,7172,1031,3687,4901,8082,4945,4515,7204,9310,9349,9535,9940,218,1788,9245,2237,1541,5670,6538,6047,5553,9807,8101,1925,8714,445,8332,7309,6830,5786,5736,7306,2710,3034,1838,7969,6318,7912,2584,2080,7437,6705,2254,7428,820,782,9861,7596,3842,3631,8063,5240,6666,394,4565,7865,4895,9890,6028,6117,4724,9156,4473,4552,602,470,6191,4927,5387,884,3146,1978,3000
-4258,6880,1696,3582,5793,4923,2119,1155,9056,9698,6603,3768,5514,9927,9609,6166,6566,4536,4985,4934,8076,9062,6741,6163,7399,4562,2337,5600,2919,9012,8459,1308,6072,1225,9306,8818,5886,7243,7365,8792,6007,9256,6699,7171,4230,7002,8720,7839,4533,1671,478,7774,1607,2317,5437,4705,7886,4760,6760,7271,3081,2997,3088,7675,6208,3101,6821,6840,122,9633,4900,2067,8546,4549,2091,7188,5605,8599,6758,5229
-7854,5243,9155,3556,8812,7047,2202,1541,5993,4600,4760,713,434,7911,7426,7414,8729,322,803,7960,7563,4908,6285,6291,736,3389,9339,4132,8701,7534,5287,3646,592,3065,7582,2592,8755,6068,8597,1982,5782,1894,2900,6236,4039,6569,3037,5837,7698,700,7815,2491,7272,5878,3083,6778,6639,3589,5010,8313,2581,6617,5869,8402,6808,2951,2321,5195,497,2190,6187,1342,1316,4453,7740,4154,2959,1781,1482,8256
-7178,2046,4419,744,8312,5356,6855,8839,319,2962,5662,47,6307,8662,68,4813,567,2712,9931,1678,3101,8227,6533,4933,6656,92,5846,4780,6256,6361,4323,9985,1231,2175,7178,3034,9744,6155,9165,7787,5836,9318,7860,9644,8941,6480,9443,8188,5928,161,6979,2352,5628,6991,1198,8067,5867,6620,3778,8426,2994,3122,3124,6335,3918,8897,2655,9670,634,1088,1576,8935,7255,474,8166,7417,9547,2886,5560,3842
-6957,3111,26,7530,7143,1295,1744,6057,3009,1854,8098,5405,2234,4874,9447,2620,9303,27,7410,969,40,2966,5648,7596,8637,4238,3143,3679,7187,690,9980,7085,7714,9373,5632,7526,6707,3951,9734,4216,2146,3602,5371,6029,3039,4433,4855,4151,1449,3376,8009,7240,7027,4602,2947,9081,4045,8424,9352,8742,923,2705,4266,3232,2264,6761,363,2651,3383,7770,6730,7856,7340,9679,2158,610,4471,4608,910,6241
-4417,6756,1013,8797,658,8809,5032,8703,7541,846,3357,2920,9817,1745,9980,7593,4667,3087,779,3218,6233,5568,4296,2289,2654,7898,5021,9461,5593,8214,9173,4203,2271,7980,2983,5952,9992,8399,3468,1776,3188,9314,1720,6523,2933,621,8685,5483,8986,6163,3444,9539,4320,155,3992,2828,2150,6071,524,2895,5468,8063,1210,3348,9071,4862,483,9017,4097,6186,9815,3610,5048,1644,1003,9865,9332,2145,1944,2213
-9284,3803,4920,1927,6706,4344,7383,4786,9890,2010,5228,1224,3158,6967,8580,8990,8883,5213,76,8306,2031,4980,5639,9519,7184,5645,7769,3259,8077,9130,1317,3096,9624,3818,1770,695,2454,947,6029,3474,9938,3527,5696,4760,7724,7738,2848,6442,5767,6845,8323,4131,2859,7595,2500,4815,3660,9130,8580,7016,8231,4391,8369,3444,4069,4021,556,6154,627,2778,1496,4206,6356,8434,8491,3816,8231,3190,5575,1015
-3787,7572,1788,6803,5641,6844,1961,4811,8535,9914,9999,1450,8857,738,4662,8569,6679,2225,7839,8618,286,2648,5342,2294,3205,4546,176,8705,3741,6134,8324,8021,7004,5205,7032,6637,9442,5539,5584,4819,5874,5807,8589,6871,9016,983,1758,3786,1519,6241,185,8398,495,3370,9133,3051,4549,9674,7311,9738,3316,9383,2658,2776,9481,7558,619,3943,3324,6491,4933,153,9738,4623,912,3595,7771,7939,1219,4405
-2650,3883,4154,5809,315,7756,4430,1788,4451,1631,6461,7230,6017,5751,138,588,5282,2442,9110,9035,6349,2515,1570,6122,4192,4174,3530,1933,4186,4420,4609,5739,4135,2963,6308,1161,8809,8619,2796,3819,6971,8228,4188,1492,909,8048,2328,6772,8467,7671,9068,2226,7579,6422,7056,8042,3296,2272,3006,2196,7320,3238,3490,3102,37,1293,3212,4767,5041,8773,5794,4456,6174,7279,7054,2835,7053,9088,790,6640
-3101,1057,7057,3826,6077,1025,2955,1224,1114,6729,5902,4698,6239,7203,9423,1804,4417,6686,1426,6941,8071,1029,4985,9010,6122,6597,1622,1574,3513,1684,7086,5505,3244,411,9638,4150,907,9135,829,981,1707,5359,8781,9751,5,9131,3973,7159,1340,6955,7514,7993,6964,8198,1933,2797,877,3993,4453,8020,9349,8646,2779,8679,2961,3547,3374,3510,1129,3568,2241,2625,9138,5974,8206,7669,7678,1833,8700,4480
-4865,9912,8038,8238,782,3095,8199,1127,4501,7280,2112,2487,3626,2790,9432,1475,6312,8277,4827,2218,5806,7132,8752,1468,7471,6386,739,8762,8323,8120,5169,9078,9058,3370,9560,7987,8585,8531,5347,9312,1058,4271,1159,5286,5404,6925,8606,9204,7361,2415,560,586,4002,2644,1927,2824,768,4409,2942,3345,1002,808,4941,6267,7979,5140,8643,7553,9438,7320,4938,2666,4609,2778,8158,6730,3748,3867,1866,7181
-171,3771,7134,8927,4778,2913,3326,2004,3089,7853,1378,1729,4777,2706,9578,1360,5693,3036,1851,7248,2403,2273,8536,6501,9216,613,9671,7131,7719,6425,773,717,8803,160,1114,7554,7197,753,4513,4322,8499,4533,2609,4226,8710,6627,644,9666,6260,4870,5744,7385,6542,6203,7703,6130,8944,5589,2262,6803,6381,7414,6888,5123,7320,9392,9061,6780,322,8975,7050,5089,1061,2260,3199,1150,1865,5386,9699,6501
-3744,8454,6885,8277,919,1923,4001,6864,7854,5519,2491,6057,8794,9645,1776,5714,9786,9281,7538,6916,3215,395,2501,9618,4835,8846,9708,2813,3303,1794,8309,7176,2206,1602,1838,236,4593,2245,8993,4017,10,8215,6921,5206,4023,5932,6997,7801,262,7640,3107,8275,4938,7822,2425,3223,3886,2105,8700,9526,2088,8662,8034,7004,5710,2124,7164,3574,6630,9980,4242,2901,9471,1491,2117,4562,1130,9086,4117,6698
-2810,2280,2331,1170,4554,4071,8387,1215,2274,9848,6738,1604,7281,8805,439,1298,8318,7834,9426,8603,6092,7944,1309,8828,303,3157,4638,4439,9175,1921,4695,7716,1494,1015,1772,5913,1127,1952,1950,8905,4064,9890,385,9357,7945,5035,7082,5369,4093,6546,5187,5637,2041,8946,1758,7111,6566,1027,1049,5148,7224,7248,296,6169,375,1656,7993,2816,3717,4279,4675,1609,3317,42,6201,3100,3144,163,9530,4531
-7096,6070,1009,4988,3538,5801,7149,3063,2324,2912,7911,7002,4338,7880,2481,7368,3516,2016,7556,2193,1388,3865,8125,4637,4096,8114,750,3144,1938,7002,9343,4095,1392,4220,3455,6969,9647,1321,9048,1996,1640,6626,1788,314,9578,6630,2813,6626,4981,9908,7024,4355,3201,3521,3864,3303,464,1923,595,9801,3391,8366,8084,9374,1041,8807,9085,1892,9431,8317,9016,9221,8574,9981,9240,5395,2009,6310,2854,9255
-8830,3145,2960,9615,8220,6061,3452,2918,6481,9278,2297,3385,6565,7066,7316,5682,107,7646,4466,68,1952,9603,8615,54,7191,791,6833,2560,693,9733,4168,570,9127,9537,1925,8287,5508,4297,8452,8795,6213,7994,2420,4208,524,5915,8602,8330,2651,8547,6156,1812,6271,7991,9407,9804,1553,6866,1128,2119,4691,9711,8315,5879,9935,6900,482,682,4126,1041,428,6247,3720,5882,7526,2582,4327,7725,3503,2631
-2738,9323,721,7434,1453,6294,2957,3786,5722,6019,8685,4386,3066,9057,6860,499,5315,3045,5194,7111,3137,9104,941,586,3066,755,4177,8819,7040,5309,3583,3897,4428,7788,4721,7249,6559,7324,825,7311,3760,6064,6070,9672,4882,584,1365,9739,9331,5783,2624,7889,1604,1303,1555,7125,8312,425,8936,3233,7724,1480,403,7440,1784,1754,4721,1569,652,3893,4574,5692,9730,4813,9844,8291,9199,7101,3391,8914
-6044,2928,9332,3328,8588,447,3830,1176,3523,2705,8365,6136,5442,9049,5526,8575,8869,9031,7280,706,2794,8814,5767,4241,7696,78,6570,556,5083,1426,4502,3336,9518,2292,1885,3740,3153,9348,9331,8051,2759,5407,9028,7840,9255,831,515,2612,9747,7435,8964,4971,2048,4900,5967,8271,1719,9670,2810,6777,1594,6367,6259,8316,3815,1689,6840,9437,4361,822,9619,3065,83,6344,7486,8657,8228,9635,6932,4864
-8478,4777,6334,4678,7476,4963,6735,3096,5860,1405,5127,7269,7793,4738,227,9168,2996,8928,765,733,1276,7677,6258,1528,9558,3329,302,8901,1422,8277,6340,645,9125,8869,5952,141,8141,1816,9635,4025,4184,3093,83,2344,2747,9352,7966,1206,1126,1826,218,7939,2957,2729,810,8752,5247,4174,4038,8884,7899,9567,301,5265,5752,7524,4381,1669,3106,8270,6228,6373,754,2547,4240,2313,5514,3022,1040,9738
-2265,8192,1763,1369,8469,8789,4836,52,1212,6690,5257,8918,6723,6319,378,4039,2421,8555,8184,9577,1432,7139,8078,5452,9628,7579,4161,7490,5159,8559,1011,81,478,5840,1964,1334,6875,8670,9900,739,1514,8692,522,9316,6955,1345,8132,2277,3193,9773,3923,4177,2183,1236,6747,6575,4874,6003,6409,8187,745,8776,9440,7543,9825,2582,7381,8147,7236,5185,7564,6125,218,7991,6394,391,7659,7456,5128,5294
-2132,8992,8160,5782,4420,3371,3798,5054,552,5631,7546,4716,1332,6486,7892,7441,4370,6231,4579,2121,8615,1145,9391,1524,1385,2400,9437,2454,7896,7467,2928,8400,3299,4025,7458,4703,7206,6358,792,6200,725,4275,4136,7390,5984,4502,7929,5085,8176,4600,119,3568,76,9363,6943,2248,9077,9731,6213,5817,6729,4190,3092,6910,759,2682,8380,1254,9604,3011,9291,5329,9453,9746,2739,6522,3765,5634,1113,5789
-5304,5499,564,2801,679,2653,1783,3608,7359,7797,3284,796,3222,437,7185,6135,8571,2778,7488,5746,678,6140,861,7750,803,9859,9918,2425,3734,2698,9005,4864,9818,6743,2475,132,9486,3825,5472,919,292,4411,7213,7699,6435,9019,6769,1388,802,2124,1345,8493,9487,8558,7061,8777,8833,2427,2238,5409,4957,8503,3171,7622,5779,6145,2417,5873,5563,5693,9574,9491,1937,7384,4563,6842,5432,2751,3406,7981
diff --git a/src/projecteuler/083.py b/src/projecteuler/083.py
deleted file mode 100644
index f1620e5..0000000
--- a/src/projecteuler/083.py
+++ /dev/null
@@ -1,76 +0,0 @@
-
-# uses Dijkstra's algorithm to find minimal path
-# (based on solution for problem 81)
-
-infinity = 999999
-
-matrix = []
-
-width = 80
-height = 80
-
-f = open('083.txt', 'r')
-for line in f:
- line.rstrip('\n')
- line_str = line.split(',')
- line_int = [ int(x) for x in line_str ]
- matrix.append(line_int)
-f.close()
-
-
-# initialize
-distance = [infinity] * (width*height)
-pre = [None] * (width*height)
-distance[0] = 0
-Q = range(width*height)
-
-def mindistance(Q):
- mind = infinity
- mini = -1
- for i in Q:
- if distance[i] < mind:
- mind = distance[i]
- mini = i
- return mini
-
-def neighbors(u):
- n = []
- row = u / width
- col = u % width
- if col < width-1:
- n.append(row*width + col + 1) # right neighbor
- if row < height-1:
- n.append((row+1)*width + col) # lower neighbor
- if row > 0:
- n.append((row-1)*width + col) # upper neighbor
- if col > 0:
- n.append(row*width + col - 1) # left neighbor
- return n
-
-def update(u, v):
- alt = distance[u] + matrix[v/width][v%width]
- if alt < distance[v]:
- distance[v] = alt
- pre[v] = u
-
-# main algorithm
-while len(Q) > 0:
- u = mindistance(Q)
- Q.remove(u)
- for v in neighbors(u):
- if v in Q:
- update(u, v)
-
-# search min distance
-u = width*height-1 # target node
-path = [ u ]
-while pre[u] != None:
- u = pre[u]
- path = [u] + path
-
-minsum = 0
-for n in path:
- minsum += matrix[n/width][n%width]
-
-print minsum
-
diff --git a/src/projecteuler/083.txt b/src/projecteuler/083.txt
deleted file mode 100644
index 1e9e6cd..0000000
--- a/src/projecteuler/083.txt
+++ /dev/null
@@ -1,80 +0,0 @@
-4445,2697,5115,718,2209,2212,654,4348,3079,6821,7668,3276,8874,4190,3785,2752,9473,7817,9137,496,7338,3434,7152,4355,4552,7917,7827,2460,2350,691,3514,5880,3145,7633,7199,3783,5066,7487,3285,1084,8985,760,872,8609,8051,1134,9536,5750,9716,9371,7619,5617,275,9721,2997,2698,1887,8825,6372,3014,2113,7122,7050,6775,5948,2758,1219,3539,348,7989,2735,9862,1263,8089,6401,9462,3168,2758,3748,5870
-1096,20,1318,7586,5167,2642,1443,5741,7621,7030,5526,4244,2348,4641,9827,2448,6918,5883,3737,300,7116,6531,567,5997,3971,6623,820,6148,3287,1874,7981,8424,7672,7575,6797,6717,1078,5008,4051,8795,5820,346,1851,6463,2117,6058,3407,8211,117,4822,1317,4377,4434,5925,8341,4800,1175,4173,690,8978,7470,1295,3799,8724,3509,9849,618,3320,7068,9633,2384,7175,544,6583,1908,9983,481,4187,9353,9377
-9607,7385,521,6084,1364,8983,7623,1585,6935,8551,2574,8267,4781,3834,2764,2084,2669,4656,9343,7709,2203,9328,8004,6192,5856,3555,2260,5118,6504,1839,9227,1259,9451,1388,7909,5733,6968,8519,9973,1663,5315,7571,3035,4325,4283,2304,6438,3815,9213,9806,9536,196,5542,6907,2475,1159,5820,9075,9470,2179,9248,1828,4592,9167,3713,4640,47,3637,309,7344,6955,346,378,9044,8635,7466,5036,9515,6385,9230
-7206,3114,7760,1094,6150,5182,7358,7387,4497,955,101,1478,7777,6966,7010,8417,6453,4955,3496,107,449,8271,131,2948,6185,784,5937,8001,6104,8282,4165,3642,710,2390,575,715,3089,6964,4217,192,5949,7006,715,3328,1152,66,8044,4319,1735,146,4818,5456,6451,4113,1063,4781,6799,602,1504,6245,6550,1417,1343,2363,3785,5448,4545,9371,5420,5068,4613,4882,4241,5043,7873,8042,8434,3939,9256,2187
-3620,8024,577,9997,7377,7682,1314,1158,6282,6310,1896,2509,5436,1732,9480,706,496,101,6232,7375,2207,2306,110,6772,3433,2878,8140,5933,8688,1399,2210,7332,6172,6403,7333,4044,2291,1790,2446,7390,8698,5723,3678,7104,1825,2040,140,3982,4905,4160,2200,5041,2512,1488,2268,1175,7588,8321,8078,7312,977,5257,8465,5068,3453,3096,1651,7906,253,9250,6021,8791,8109,6651,3412,345,4778,5152,4883,7505
-1074,5438,9008,2679,5397,5429,2652,3403,770,9188,4248,2493,4361,8327,9587,707,9525,5913,93,1899,328,2876,3604,673,8576,6908,7659,2544,3359,3883,5273,6587,3065,1749,3223,604,9925,6941,2823,8767,7039,3290,3214,1787,7904,3421,7137,9560,8451,2669,9219,6332,1576,5477,6755,8348,4164,4307,2984,4012,6629,1044,2874,6541,4942,903,1404,9125,5160,8836,4345,2581,460,8438,1538,5507,668,3352,2678,6942
-4295,1176,5596,1521,3061,9868,7037,7129,8933,6659,5947,5063,3653,9447,9245,2679,767,714,116,8558,163,3927,8779,158,5093,2447,5782,3967,1716,931,7772,8164,1117,9244,5783,7776,3846,8862,6014,2330,6947,1777,3112,6008,3491,1906,5952,314,4602,8994,5919,9214,3995,5026,7688,6809,5003,3128,2509,7477,110,8971,3982,8539,2980,4689,6343,5411,2992,5270,5247,9260,2269,7474,1042,7162,5206,1232,4556,4757
-510,3556,5377,1406,5721,4946,2635,7847,4251,8293,8281,6351,4912,287,2870,3380,3948,5322,3840,4738,9563,1906,6298,3234,8959,1562,6297,8835,7861,239,6618,1322,2553,2213,5053,5446,4402,6500,5182,8585,6900,5756,9661,903,5186,7687,5998,7997,8081,8955,4835,6069,2621,1581,732,9564,1082,1853,5442,1342,520,1737,3703,5321,4793,2776,1508,1647,9101,2499,6891,4336,7012,3329,3212,1442,9993,3988,4930,7706
-9444,3401,5891,9716,1228,7107,109,3563,2700,6161,5039,4992,2242,8541,7372,2067,1294,3058,1306,320,8881,5756,9326,411,8650,8824,5495,8282,8397,2000,1228,7817,2099,6473,3571,5994,4447,1299,5991,543,7874,2297,1651,101,2093,3463,9189,6872,6118,872,1008,1779,2805,9084,4048,2123,5877,55,3075,1737,9459,4535,6453,3644,108,5982,4437,5213,1340,6967,9943,5815,669,8074,1838,6979,9132,9315,715,5048
-3327,4030,7177,6336,9933,5296,2621,4785,2755,4832,2512,2118,2244,4407,2170,499,7532,9742,5051,7687,970,6924,3527,4694,5145,1306,2165,5940,2425,8910,3513,1909,6983,346,6377,4304,9330,7203,6605,3709,3346,970,369,9737,5811,4427,9939,3693,8436,5566,1977,3728,2399,3985,8303,2492,5366,9802,9193,7296,1033,5060,9144,2766,1151,7629,5169,5995,58,7619,7565,4208,1713,6279,3209,4908,9224,7409,1325,8540
-6882,1265,1775,3648,4690,959,5837,4520,5394,1378,9485,1360,4018,578,9174,2932,9890,3696,116,1723,1178,9355,7063,1594,1918,8574,7594,7942,1547,6166,7888,354,6932,4651,1010,7759,6905,661,7689,6092,9292,3845,9605,8443,443,8275,5163,7720,7265,6356,7779,1798,1754,5225,6661,1180,8024,5666,88,9153,1840,3508,1193,4445,2648,3538,6243,6375,8107,5902,5423,2520,1122,5015,6113,8859,9370,966,8673,2442
-7338,3423,4723,6533,848,8041,7921,8277,4094,5368,7252,8852,9166,2250,2801,6125,8093,5738,4038,9808,7359,9494,601,9116,4946,2702,5573,2921,9862,1462,1269,2410,4171,2709,7508,6241,7522,615,2407,8200,4189,5492,5649,7353,2590,5203,4274,710,7329,9063,956,8371,3722,4253,4785,1194,4828,4717,4548,940,983,2575,4511,2938,1827,2027,2700,1236,841,5760,1680,6260,2373,3851,1841,4968,1172,5179,7175,3509
-4420,1327,3560,2376,6260,2988,9537,4064,4829,8872,9598,3228,1792,7118,9962,9336,4368,9189,6857,1829,9863,6287,7303,7769,2707,8257,2391,2009,3975,4993,3068,9835,3427,341,8412,2134,4034,8511,6421,3041,9012,2983,7289,100,1355,7904,9186,6920,5856,2008,6545,8331,3655,5011,839,8041,9255,6524,3862,8788,62,7455,3513,5003,8413,3918,2076,7960,6108,3638,6999,3436,1441,4858,4181,1866,8731,7745,3744,1000
-356,8296,8325,1058,1277,4743,3850,2388,6079,6462,2815,5620,8495,5378,75,4324,3441,9870,1113,165,1544,1179,2834,562,6176,2313,6836,8839,2986,9454,5199,6888,1927,5866,8760,320,1792,8296,7898,6121,7241,5886,5814,2815,8336,1576,4314,3109,2572,6011,2086,9061,9403,3947,5487,9731,7281,3159,1819,1334,3181,5844,5114,9898,4634,2531,4412,6430,4262,8482,4546,4555,6804,2607,9421,686,8649,8860,7794,6672
-9870,152,1558,4963,8750,4754,6521,6256,8818,5208,5691,9659,8377,9725,5050,5343,2539,6101,1844,9700,7750,8114,5357,3001,8830,4438,199,9545,8496,43,2078,327,9397,106,6090,8181,8646,6414,7499,5450,4850,6273,5014,4131,7639,3913,6571,8534,9703,4391,7618,445,1320,5,1894,6771,7383,9191,4708,9706,6939,7937,8726,9382,5216,3685,2247,9029,8154,1738,9984,2626,9438,4167,6351,5060,29,1218,1239,4785
-192,5213,8297,8974,4032,6966,5717,1179,6523,4679,9513,1481,3041,5355,9303,9154,1389,8702,6589,7818,6336,3539,5538,3094,6646,6702,6266,2759,4608,4452,617,9406,8064,6379,444,5602,4950,1810,8391,1536,316,8714,1178,5182,5863,5110,5372,4954,1978,2971,5680,4863,2255,4630,5723,2168,538,1692,1319,7540,440,6430,6266,7712,7385,5702,620,641,3136,7350,1478,3155,2820,9109,6261,1122,4470,14,8493,2095
-1046,4301,6082,474,4974,7822,2102,5161,5172,6946,8074,9716,6586,9962,9749,5015,2217,995,5388,4402,7652,6399,6539,1349,8101,3677,1328,9612,7922,2879,231,5887,2655,508,4357,4964,3554,5930,6236,7384,4614,280,3093,9600,2110,7863,2631,6626,6620,68,1311,7198,7561,1768,5139,1431,221,230,2940,968,5283,6517,2146,1646,869,9402,7068,8645,7058,1765,9690,4152,2926,9504,2939,7504,6074,2944,6470,7859
-4659,736,4951,9344,1927,6271,8837,8711,3241,6579,7660,5499,5616,3743,5801,4682,9748,8796,779,1833,4549,8138,4026,775,4170,2432,4174,3741,7540,8017,2833,4027,396,811,2871,1150,9809,2719,9199,8504,1224,540,2051,3519,7982,7367,2761,308,3358,6505,2050,4836,5090,7864,805,2566,2409,6876,3361,8622,5572,5895,3280,441,7893,8105,1634,2929,274,3926,7786,6123,8233,9921,2674,5340,1445,203,4585,3837
-5759,338,7444,7968,7742,3755,1591,4839,1705,650,7061,2461,9230,9391,9373,2413,1213,431,7801,4994,2380,2703,6161,6878,8331,2538,6093,1275,5065,5062,2839,582,1014,8109,3525,1544,1569,8622,7944,2905,6120,1564,1839,5570,7579,1318,2677,5257,4418,5601,7935,7656,5192,1864,5886,6083,5580,6202,8869,1636,7907,4759,9082,5854,3185,7631,6854,5872,5632,5280,1431,2077,9717,7431,4256,8261,9680,4487,4752,4286
-1571,1428,8599,1230,7772,4221,8523,9049,4042,8726,7567,6736,9033,2104,4879,4967,6334,6716,3994,1269,8995,6539,3610,7667,6560,6065,874,848,4597,1711,7161,4811,6734,5723,6356,6026,9183,2586,5636,1092,7779,7923,8747,6887,7505,9909,1792,3233,4526,3176,1508,8043,720,5212,6046,4988,709,5277,8256,3642,1391,5803,1468,2145,3970,6301,7767,2359,8487,9771,8785,7520,856,1605,8972,2402,2386,991,1383,5963
-1822,4824,5957,6511,9868,4113,301,9353,6228,2881,2966,6956,9124,9574,9233,1601,7340,973,9396,540,4747,8590,9535,3650,7333,7583,4806,3593,2738,8157,5215,8472,2284,9473,3906,6982,5505,6053,7936,6074,7179,6688,1564,1103,6860,5839,2022,8490,910,7551,7805,881,7024,1855,9448,4790,1274,3672,2810,774,7623,4223,4850,6071,9975,4935,1915,9771,6690,3846,517,463,7624,4511,614,6394,3661,7409,1395,8127
-8738,3850,9555,3695,4383,2378,87,6256,6740,7682,9546,4255,6105,2000,1851,4073,8957,9022,6547,5189,2487,303,9602,7833,1628,4163,6678,3144,8589,7096,8913,5823,4890,7679,1212,9294,5884,2972,3012,3359,7794,7428,1579,4350,7246,4301,7779,7790,3294,9547,4367,3549,1958,8237,6758,3497,3250,3456,6318,1663,708,7714,6143,6890,3428,6853,9334,7992,591,6449,9786,1412,8500,722,5468,1371,108,3939,4199,2535
-7047,4323,1934,5163,4166,461,3544,2767,6554,203,6098,2265,9078,2075,4644,6641,8412,9183,487,101,7566,5622,1975,5726,2920,5374,7779,5631,3753,3725,2672,3621,4280,1162,5812,345,8173,9785,1525,955,5603,2215,2580,5261,2765,2990,5979,389,3907,2484,1232,5933,5871,3304,1138,1616,5114,9199,5072,7442,7245,6472,4760,6359,9053,7876,2564,9404,3043,9026,2261,3374,4460,7306,2326,966,828,3274,1712,3446
-3975,4565,8131,5800,4570,2306,8838,4392,9147,11,3911,7118,9645,4994,2028,6062,5431,2279,8752,2658,7836,994,7316,5336,7185,3289,1898,9689,2331,5737,3403,1124,2679,3241,7748,16,2724,5441,6640,9368,9081,5618,858,4969,17,2103,6035,8043,7475,2181,939,415,1617,8500,8253,2155,7843,7974,7859,1746,6336,3193,2617,8736,4079,6324,6645,8891,9396,5522,6103,1857,8979,3835,2475,1310,7422,610,8345,7615
-9248,5397,5686,2988,3446,4359,6634,9141,497,9176,6773,7448,1907,8454,916,1596,2241,1626,1384,2741,3649,5362,8791,7170,2903,2475,5325,6451,924,3328,522,90,4813,9737,9557,691,2388,1383,4021,1609,9206,4707,5200,7107,8104,4333,9860,5013,1224,6959,8527,1877,4545,7772,6268,621,4915,9349,5970,706,9583,3071,4127,780,8231,3017,9114,3836,7503,2383,1977,4870,8035,2379,9704,1037,3992,3642,1016,4303
-5093,138,4639,6609,1146,5565,95,7521,9077,2272,974,4388,2465,2650,722,4998,3567,3047,921,2736,7855,173,2065,4238,1048,5,6847,9548,8632,9194,5942,4777,7910,8971,6279,7253,2516,1555,1833,3184,9453,9053,6897,7808,8629,4877,1871,8055,4881,7639,1537,7701,2508,7564,5845,5023,2304,5396,3193,2955,1088,3801,6203,1748,3737,1276,13,4120,7715,8552,3047,2921,106,7508,304,1280,7140,2567,9135,5266
-6237,4607,7527,9047,522,7371,4883,2540,5867,6366,5301,1570,421,276,3361,527,6637,4861,2401,7522,5808,9371,5298,2045,5096,5447,7755,5115,7060,8529,4078,1943,1697,1764,5453,7085,960,2405,739,2100,5800,728,9737,5704,5693,1431,8979,6428,673,7540,6,7773,5857,6823,150,5869,8486,684,5816,9626,7451,5579,8260,3397,5322,6920,1879,2127,2884,5478,4977,9016,6165,6292,3062,5671,5968,78,4619,4763
-9905,7127,9390,5185,6923,3721,9164,9705,4341,1031,1046,5127,7376,6528,3248,4941,1178,7889,3364,4486,5358,9402,9158,8600,1025,874,1839,1783,309,9030,1843,845,8398,1433,7118,70,8071,2877,3904,8866,6722,4299,10,1929,5897,4188,600,1889,3325,2485,6473,4474,7444,6992,4846,6166,4441,2283,2629,4352,7775,1101,2214,9985,215,8270,9750,2740,8361,7103,5930,8664,9690,8302,9267,344,2077,1372,1880,9550
-5825,8517,7769,2405,8204,1060,3603,7025,478,8334,1997,3692,7433,9101,7294,7498,9415,5452,3850,3508,6857,9213,6807,4412,7310,854,5384,686,4978,892,8651,3241,2743,3801,3813,8588,6701,4416,6990,6490,3197,6838,6503,114,8343,5844,8646,8694,65,791,5979,2687,2621,2019,8097,1423,3644,9764,4921,3266,3662,5561,2476,8271,8138,6147,1168,3340,1998,9874,6572,9873,6659,5609,2711,3931,9567,4143,7833,8887
-6223,2099,2700,589,4716,8333,1362,5007,2753,2848,4441,8397,7192,8191,4916,9955,6076,3370,6396,6971,3156,248,3911,2488,4930,2458,7183,5455,170,6809,6417,3390,1956,7188,577,7526,2203,968,8164,479,8699,7915,507,6393,4632,1597,7534,3604,618,3280,6061,9793,9238,8347,568,9645,2070,5198,6482,5000,9212,6655,5961,7513,1323,3872,6170,3812,4146,2736,67,3151,5548,2781,9679,7564,5043,8587,1893,4531
-5826,3690,6724,2121,9308,6986,8106,6659,2142,1642,7170,2877,5757,6494,8026,6571,8387,9961,6043,9758,9607,6450,8631,8334,7359,5256,8523,2225,7487,1977,9555,8048,5763,2414,4948,4265,2427,8978,8088,8841,9208,9601,5810,9398,8866,9138,4176,5875,7212,3272,6759,5678,7649,4922,5422,1343,8197,3154,3600,687,1028,4579,2084,9467,4492,7262,7296,6538,7657,7134,2077,1505,7332,6890,8964,4879,7603,7400,5973,739
-1861,1613,4879,1884,7334,966,2000,7489,2123,4287,1472,3263,4726,9203,1040,4103,6075,6049,330,9253,4062,4268,1635,9960,577,1320,3195,9628,1030,4092,4979,6474,6393,2799,6967,8687,7724,7392,9927,2085,3200,6466,8702,265,7646,8665,7986,7266,4574,6587,612,2724,704,3191,8323,9523,3002,704,5064,3960,8209,2027,2758,8393,4875,4641,9584,6401,7883,7014,768,443,5490,7506,1852,2005,8850,5776,4487,4269
-4052,6687,4705,7260,6645,6715,3706,5504,8672,2853,1136,8187,8203,4016,871,1809,1366,4952,9294,5339,6872,2645,6083,7874,3056,5218,7485,8796,7401,3348,2103,426,8572,4163,9171,3176,948,7654,9344,3217,1650,5580,7971,2622,76,2874,880,2034,9929,1546,2659,5811,3754,7096,7436,9694,9960,7415,2164,953,2360,4194,2397,1047,2196,6827,575,784,2675,8821,6802,7972,5996,6699,2134,7577,2887,1412,4349,4380
-4629,2234,6240,8132,7592,3181,6389,1214,266,1910,2451,8784,2790,1127,6932,1447,8986,2492,5476,397,889,3027,7641,5083,5776,4022,185,3364,5701,2442,2840,4160,9525,4828,6602,2614,7447,3711,4505,7745,8034,6514,4907,2605,7753,6958,7270,6936,3006,8968,439,2326,4652,3085,3425,9863,5049,5361,8688,297,7580,8777,7916,6687,8683,7141,306,9569,2384,1500,3346,4601,7329,9040,6097,2727,6314,4501,4974,2829
-8316,4072,2025,6884,3027,1808,5714,7624,7880,8528,4205,8686,7587,3230,1139,7273,6163,6986,3914,9309,1464,9359,4474,7095,2212,7302,2583,9462,7532,6567,1606,4436,8981,5612,6796,4385,5076,2007,6072,3678,8331,1338,3299,8845,4783,8613,4071,1232,6028,2176,3990,2148,3748,103,9453,538,6745,9110,926,3125,473,5970,8728,7072,9062,1404,1317,5139,9862,6496,6062,3338,464,1600,2532,1088,8232,7739,8274,3873
-2341,523,7096,8397,8301,6541,9844,244,4993,2280,7689,4025,4196,5522,7904,6048,2623,9258,2149,9461,6448,8087,7245,1917,8340,7127,8466,5725,6996,3421,5313,512,9164,9837,9794,8369,4185,1488,7210,1524,1016,4620,9435,2478,7765,8035,697,6677,3724,6988,5853,7662,3895,9593,1185,4727,6025,5734,7665,3070,138,8469,6748,6459,561,7935,8646,2378,462,7755,3115,9690,8877,3946,2728,8793,244,6323,8666,4271
-6430,2406,8994,56,1267,3826,9443,7079,7579,5232,6691,3435,6718,5698,4144,7028,592,2627,217,734,6194,8156,9118,58,2640,8069,4127,3285,694,3197,3377,4143,4802,3324,8134,6953,7625,3598,3584,4289,7065,3434,2106,7132,5802,7920,9060,7531,3321,1725,1067,3751,444,5503,6785,7937,6365,4803,198,6266,8177,1470,6390,1606,2904,7555,9834,8667,2033,1723,5167,1666,8546,8152,473,4475,6451,7947,3062,3281
-2810,3042,7759,1741,2275,2609,7676,8640,4117,1958,7500,8048,1757,3954,9270,1971,4796,2912,660,5511,3553,1012,5757,4525,6084,7198,8352,5775,7726,8591,7710,9589,3122,4392,6856,5016,749,2285,3356,7482,9956,7348,2599,8944,495,3462,3578,551,4543,7207,7169,7796,1247,4278,6916,8176,3742,8385,2310,1345,8692,2667,4568,1770,8319,3585,4920,3890,4928,7343,5385,9772,7947,8786,2056,9266,3454,2807,877,2660
-6206,8252,5928,5837,4177,4333,207,7934,5581,9526,8906,1498,8411,2984,5198,5134,2464,8435,8514,8674,3876,599,5327,826,2152,4084,2433,9327,9697,4800,2728,3608,3849,3861,3498,9943,1407,3991,7191,9110,5666,8434,4704,6545,5944,2357,1163,4995,9619,6754,4200,9682,6654,4862,4744,5953,6632,1054,293,9439,8286,2255,696,8709,1533,1844,6441,430,1999,6063,9431,7018,8057,2920,6266,6799,356,3597,4024,6665
-3847,6356,8541,7225,2325,2946,5199,469,5450,7508,2197,9915,8284,7983,6341,3276,3321,16,1321,7608,5015,3362,8491,6968,6818,797,156,2575,706,9516,5344,5457,9210,5051,8099,1617,9951,7663,8253,9683,2670,1261,4710,1068,8753,4799,1228,2621,3275,6188,4699,1791,9518,8701,5932,4275,6011,9877,2933,4182,6059,2930,6687,6682,9771,654,9437,3169,8596,1827,5471,8909,2352,123,4394,3208,8756,5513,6917,2056
-5458,8173,3138,3290,4570,4892,3317,4251,9699,7973,1163,1935,5477,6648,9614,5655,9592,975,9118,2194,7322,8248,8413,3462,8560,1907,7810,6650,7355,2939,4973,6894,3933,3784,3200,2419,9234,4747,2208,2207,1945,2899,1407,6145,8023,3484,5688,7686,2737,3828,3704,9004,5190,9740,8643,8650,5358,4426,1522,1707,3613,9887,6956,2447,2762,833,1449,9489,2573,1080,4167,3456,6809,2466,227,7125,2759,6250,6472,8089
-3266,7025,9756,3914,1265,9116,7723,9788,6805,5493,2092,8688,6592,9173,4431,4028,6007,7131,4446,4815,3648,6701,759,3312,8355,4485,4187,5188,8746,7759,3528,2177,5243,8379,3838,7233,4607,9187,7216,2190,6967,2920,6082,7910,5354,3609,8958,6949,7731,494,8753,8707,1523,4426,3543,7085,647,6771,9847,646,5049,824,8417,5260,2730,5702,2513,9275,4279,2767,8684,1165,9903,4518,55,9682,8963,6005,2102,6523
-1998,8731,936,1479,5259,7064,4085,91,7745,7136,3773,3810,730,8255,2705,2653,9790,6807,2342,355,9344,2668,3690,2028,9679,8102,574,4318,6481,9175,5423,8062,2867,9657,7553,3442,3920,7430,3945,7639,3714,3392,2525,4995,4850,2867,7951,9667,486,9506,9888,781,8866,1702,3795,90,356,1483,4200,2131,6969,5931,486,6880,4404,1084,5169,4910,6567,8335,4686,5043,2614,3352,2667,4513,6472,7471,5720,1616
-8878,1613,1716,868,1906,2681,564,665,5995,2474,7496,3432,9491,9087,8850,8287,669,823,347,6194,2264,2592,7871,7616,8508,4827,760,2676,4660,4881,7572,3811,9032,939,4384,929,7525,8419,5556,9063,662,8887,7026,8534,3111,1454,2082,7598,5726,6687,9647,7608,73,3014,5063,670,5461,5631,3367,9796,8475,7908,5073,1565,5008,5295,4457,1274,4788,1728,338,600,8415,8535,9351,7750,6887,5845,1741,125
-3637,6489,9634,9464,9055,2413,7824,9517,7532,3577,7050,6186,6980,9365,9782,191,870,2497,8498,2218,2757,5420,6468,586,3320,9230,1034,1393,9886,5072,9391,1178,8464,8042,6869,2075,8275,3601,7715,9470,8786,6475,8373,2159,9237,2066,3264,5000,679,355,3069,4073,494,2308,5512,4334,9438,8786,8637,9774,1169,1949,6594,6072,4270,9158,7916,5752,6794,9391,6301,5842,3285,2141,3898,8027,4310,8821,7079,1307
-8497,6681,4732,7151,7060,5204,9030,7157,833,5014,8723,3207,9796,9286,4913,119,5118,7650,9335,809,3675,2597,5144,3945,5090,8384,187,4102,1260,2445,2792,4422,8389,9290,50,1765,1521,6921,8586,4368,1565,5727,7855,2003,4834,9897,5911,8630,5070,1330,7692,7557,7980,6028,5805,9090,8265,3019,3802,698,9149,5748,1965,9658,4417,5994,5584,8226,2937,272,5743,1278,5698,8736,2595,6475,5342,6596,1149,6920
-8188,8009,9546,6310,8772,2500,9846,6592,6872,3857,1307,8125,7042,1544,6159,2330,643,4604,7899,6848,371,8067,2062,3200,7295,1857,9505,6936,384,2193,2190,301,8535,5503,1462,7380,5114,4824,8833,1763,4974,8711,9262,6698,3999,2645,6937,7747,1128,2933,3556,7943,2885,3122,9105,5447,418,2899,5148,3699,9021,9501,597,4084,175,1621,1,1079,6067,5812,4326,9914,6633,5394,4233,6728,9084,1864,5863,1225
-9935,8793,9117,1825,9542,8246,8437,3331,9128,9675,6086,7075,319,1334,7932,3583,7167,4178,1726,7720,695,8277,7887,6359,5912,1719,2780,8529,1359,2013,4498,8072,1129,9998,1147,8804,9405,6255,1619,2165,7491,1,8882,7378,3337,503,5758,4109,3577,985,3200,7615,8058,5032,1080,6410,6873,5496,1466,2412,9885,5904,4406,3605,8770,4361,6205,9193,1537,9959,214,7260,9566,1685,100,4920,7138,9819,5637,976
-3466,9854,985,1078,7222,8888,5466,5379,3578,4540,6853,8690,3728,6351,7147,3134,6921,9692,857,3307,4998,2172,5783,3931,9417,2541,6299,13,787,2099,9131,9494,896,8600,1643,8419,7248,2660,2609,8579,91,6663,5506,7675,1947,6165,4286,1972,9645,3805,1663,1456,8853,5705,9889,7489,1107,383,4044,2969,3343,152,7805,4980,9929,5033,1737,9953,7197,9158,4071,1324,473,9676,3984,9680,3606,8160,7384,5432
-1005,4512,5186,3953,2164,3372,4097,3247,8697,3022,9896,4101,3871,6791,3219,2742,4630,6967,7829,5991,6134,1197,1414,8923,8787,1394,8852,5019,7768,5147,8004,8825,5062,9625,7988,1110,3992,7984,9966,6516,6251,8270,421,3723,1432,4830,6935,8095,9059,2214,6483,6846,3120,1587,6201,6691,9096,9627,6671,4002,3495,9939,7708,7465,5879,6959,6634,3241,3401,2355,9061,2611,7830,3941,2177,2146,5089,7079,519,6351
-7280,8586,4261,2831,7217,3141,9994,9940,5462,2189,4005,6942,9848,5350,8060,6665,7519,4324,7684,657,9453,9296,2944,6843,7499,7847,1728,9681,3906,6353,5529,2822,3355,3897,7724,4257,7489,8672,4356,3983,1948,6892,7415,4153,5893,4190,621,1736,4045,9532,7701,3671,1211,1622,3176,4524,9317,7800,5638,6644,6943,5463,3531,2821,1347,5958,3436,1438,2999,994,850,4131,2616,1549,3465,5946,690,9273,6954,7991
-9517,399,3249,2596,7736,2142,1322,968,7350,1614,468,3346,3265,7222,6086,1661,5317,2582,7959,4685,2807,2917,1037,5698,1529,3972,8716,2634,3301,3412,8621,743,8001,4734,888,7744,8092,3671,8941,1487,5658,7099,2781,99,1932,4443,4756,4652,9328,1581,7855,4312,5976,7255,6480,3996,2748,1973,9731,4530,2790,9417,7186,5303,3557,351,7182,9428,1342,9020,7599,1392,8304,2070,9138,7215,2008,9937,1106,7110
-7444,769,9688,632,1571,6820,8743,4338,337,3366,3073,1946,8219,104,4210,6986,249,5061,8693,7960,6546,1004,8857,5997,9352,4338,6105,5008,2556,6518,6694,4345,3727,7956,20,3954,8652,4424,9387,2035,8358,5962,5304,5194,8650,8282,1256,1103,2138,6679,1985,3653,2770,2433,4278,615,2863,1715,242,3790,2636,6998,3088,1671,2239,957,5411,4595,6282,2881,9974,2401,875,7574,2987,4587,3147,6766,9885,2965
-3287,3016,3619,6818,9073,6120,5423,557,2900,2015,8111,3873,1314,4189,1846,4399,7041,7583,2427,2864,3525,5002,2069,748,1948,6015,2684,438,770,8367,1663,7887,7759,1885,157,7770,4520,4878,3857,1137,3525,3050,6276,5569,7649,904,4533,7843,2199,5648,7628,9075,9441,3600,7231,2388,5640,9096,958,3058,584,5899,8150,1181,9616,1098,8162,6819,8171,1519,1140,7665,8801,2632,1299,9192,707,9955,2710,7314
-1772,2963,7578,3541,3095,1488,7026,2634,6015,4633,4370,2762,1650,2174,909,8158,2922,8467,4198,4280,9092,8856,8835,5457,2790,8574,9742,5054,9547,4156,7940,8126,9824,7340,8840,6574,3547,1477,3014,6798,7134,435,9484,9859,3031,4,1502,4133,1738,1807,4825,463,6343,9701,8506,9822,9555,8688,8168,3467,3234,6318,1787,5591,419,6593,7974,8486,9861,6381,6758,194,3061,4315,2863,4665,3789,2201,1492,4416
-126,8927,6608,5682,8986,6867,1715,6076,3159,788,3140,4744,830,9253,5812,5021,7616,8534,1546,9590,1101,9012,9821,8132,7857,4086,1069,7491,2988,1579,2442,4321,2149,7642,6108,250,6086,3167,24,9528,7663,2685,1220,9196,1397,5776,1577,1730,5481,977,6115,199,6326,2183,3767,5928,5586,7561,663,8649,9688,949,5913,9160,1870,5764,9887,4477,6703,1413,4995,5494,7131,2192,8969,7138,3997,8697,646,1028
-8074,1731,8245,624,4601,8706,155,8891,309,2552,8208,8452,2954,3124,3469,4246,3352,1105,4509,8677,9901,4416,8191,9283,5625,7120,2952,8881,7693,830,4580,8228,9459,8611,4499,1179,4988,1394,550,2336,6089,6872,269,7213,1848,917,6672,4890,656,1478,6536,3165,4743,4990,1176,6211,7207,5284,9730,4738,1549,4986,4942,8645,3698,9429,1439,2175,6549,3058,6513,1574,6988,8333,3406,5245,5431,7140,7085,6407
-7845,4694,2530,8249,290,5948,5509,1588,5940,4495,5866,5021,4626,3979,3296,7589,4854,1998,5627,3926,8346,6512,9608,1918,7070,4747,4182,2858,2766,4606,6269,4107,8982,8568,9053,4244,5604,102,2756,727,5887,2566,7922,44,5986,621,1202,374,6988,4130,3627,6744,9443,4568,1398,8679,397,3928,9159,367,2917,6127,5788,3304,8129,911,2669,1463,9749,264,4478,8940,1109,7309,2462,117,4692,7724,225,2312
-4164,3637,2000,941,8903,39,3443,7172,1031,3687,4901,8082,4945,4515,7204,9310,9349,9535,9940,218,1788,9245,2237,1541,5670,6538,6047,5553,9807,8101,1925,8714,445,8332,7309,6830,5786,5736,7306,2710,3034,1838,7969,6318,7912,2584,2080,7437,6705,2254,7428,820,782,9861,7596,3842,3631,8063,5240,6666,394,4565,7865,4895,9890,6028,6117,4724,9156,4473,4552,602,470,6191,4927,5387,884,3146,1978,3000
-4258,6880,1696,3582,5793,4923,2119,1155,9056,9698,6603,3768,5514,9927,9609,6166,6566,4536,4985,4934,8076,9062,6741,6163,7399,4562,2337,5600,2919,9012,8459,1308,6072,1225,9306,8818,5886,7243,7365,8792,6007,9256,6699,7171,4230,7002,8720,7839,4533,1671,478,7774,1607,2317,5437,4705,7886,4760,6760,7271,3081,2997,3088,7675,6208,3101,6821,6840,122,9633,4900,2067,8546,4549,2091,7188,5605,8599,6758,5229
-7854,5243,9155,3556,8812,7047,2202,1541,5993,4600,4760,713,434,7911,7426,7414,8729,322,803,7960,7563,4908,6285,6291,736,3389,9339,4132,8701,7534,5287,3646,592,3065,7582,2592,8755,6068,8597,1982,5782,1894,2900,6236,4039,6569,3037,5837,7698,700,7815,2491,7272,5878,3083,6778,6639,3589,5010,8313,2581,6617,5869,8402,6808,2951,2321,5195,497,2190,6187,1342,1316,4453,7740,4154,2959,1781,1482,8256
-7178,2046,4419,744,8312,5356,6855,8839,319,2962,5662,47,6307,8662,68,4813,567,2712,9931,1678,3101,8227,6533,4933,6656,92,5846,4780,6256,6361,4323,9985,1231,2175,7178,3034,9744,6155,9165,7787,5836,9318,7860,9644,8941,6480,9443,8188,5928,161,6979,2352,5628,6991,1198,8067,5867,6620,3778,8426,2994,3122,3124,6335,3918,8897,2655,9670,634,1088,1576,8935,7255,474,8166,7417,9547,2886,5560,3842
-6957,3111,26,7530,7143,1295,1744,6057,3009,1854,8098,5405,2234,4874,9447,2620,9303,27,7410,969,40,2966,5648,7596,8637,4238,3143,3679,7187,690,9980,7085,7714,9373,5632,7526,6707,3951,9734,4216,2146,3602,5371,6029,3039,4433,4855,4151,1449,3376,8009,7240,7027,4602,2947,9081,4045,8424,9352,8742,923,2705,4266,3232,2264,6761,363,2651,3383,7770,6730,7856,7340,9679,2158,610,4471,4608,910,6241
-4417,6756,1013,8797,658,8809,5032,8703,7541,846,3357,2920,9817,1745,9980,7593,4667,3087,779,3218,6233,5568,4296,2289,2654,7898,5021,9461,5593,8214,9173,4203,2271,7980,2983,5952,9992,8399,3468,1776,3188,9314,1720,6523,2933,621,8685,5483,8986,6163,3444,9539,4320,155,3992,2828,2150,6071,524,2895,5468,8063,1210,3348,9071,4862,483,9017,4097,6186,9815,3610,5048,1644,1003,9865,9332,2145,1944,2213
-9284,3803,4920,1927,6706,4344,7383,4786,9890,2010,5228,1224,3158,6967,8580,8990,8883,5213,76,8306,2031,4980,5639,9519,7184,5645,7769,3259,8077,9130,1317,3096,9624,3818,1770,695,2454,947,6029,3474,9938,3527,5696,4760,7724,7738,2848,6442,5767,6845,8323,4131,2859,7595,2500,4815,3660,9130,8580,7016,8231,4391,8369,3444,4069,4021,556,6154,627,2778,1496,4206,6356,8434,8491,3816,8231,3190,5575,1015
-3787,7572,1788,6803,5641,6844,1961,4811,8535,9914,9999,1450,8857,738,4662,8569,6679,2225,7839,8618,286,2648,5342,2294,3205,4546,176,8705,3741,6134,8324,8021,7004,5205,7032,6637,9442,5539,5584,4819,5874,5807,8589,6871,9016,983,1758,3786,1519,6241,185,8398,495,3370,9133,3051,4549,9674,7311,9738,3316,9383,2658,2776,9481,7558,619,3943,3324,6491,4933,153,9738,4623,912,3595,7771,7939,1219,4405
-2650,3883,4154,5809,315,7756,4430,1788,4451,1631,6461,7230,6017,5751,138,588,5282,2442,9110,9035,6349,2515,1570,6122,4192,4174,3530,1933,4186,4420,4609,5739,4135,2963,6308,1161,8809,8619,2796,3819,6971,8228,4188,1492,909,8048,2328,6772,8467,7671,9068,2226,7579,6422,7056,8042,3296,2272,3006,2196,7320,3238,3490,3102,37,1293,3212,4767,5041,8773,5794,4456,6174,7279,7054,2835,7053,9088,790,6640
-3101,1057,7057,3826,6077,1025,2955,1224,1114,6729,5902,4698,6239,7203,9423,1804,4417,6686,1426,6941,8071,1029,4985,9010,6122,6597,1622,1574,3513,1684,7086,5505,3244,411,9638,4150,907,9135,829,981,1707,5359,8781,9751,5,9131,3973,7159,1340,6955,7514,7993,6964,8198,1933,2797,877,3993,4453,8020,9349,8646,2779,8679,2961,3547,3374,3510,1129,3568,2241,2625,9138,5974,8206,7669,7678,1833,8700,4480
-4865,9912,8038,8238,782,3095,8199,1127,4501,7280,2112,2487,3626,2790,9432,1475,6312,8277,4827,2218,5806,7132,8752,1468,7471,6386,739,8762,8323,8120,5169,9078,9058,3370,9560,7987,8585,8531,5347,9312,1058,4271,1159,5286,5404,6925,8606,9204,7361,2415,560,586,4002,2644,1927,2824,768,4409,2942,3345,1002,808,4941,6267,7979,5140,8643,7553,9438,7320,4938,2666,4609,2778,8158,6730,3748,3867,1866,7181
-171,3771,7134,8927,4778,2913,3326,2004,3089,7853,1378,1729,4777,2706,9578,1360,5693,3036,1851,7248,2403,2273,8536,6501,9216,613,9671,7131,7719,6425,773,717,8803,160,1114,7554,7197,753,4513,4322,8499,4533,2609,4226,8710,6627,644,9666,6260,4870,5744,7385,6542,6203,7703,6130,8944,5589,2262,6803,6381,7414,6888,5123,7320,9392,9061,6780,322,8975,7050,5089,1061,2260,3199,1150,1865,5386,9699,6501
-3744,8454,6885,8277,919,1923,4001,6864,7854,5519,2491,6057,8794,9645,1776,5714,9786,9281,7538,6916,3215,395,2501,9618,4835,8846,9708,2813,3303,1794,8309,7176,2206,1602,1838,236,4593,2245,8993,4017,10,8215,6921,5206,4023,5932,6997,7801,262,7640,3107,8275,4938,7822,2425,3223,3886,2105,8700,9526,2088,8662,8034,7004,5710,2124,7164,3574,6630,9980,4242,2901,9471,1491,2117,4562,1130,9086,4117,6698
-2810,2280,2331,1170,4554,4071,8387,1215,2274,9848,6738,1604,7281,8805,439,1298,8318,7834,9426,8603,6092,7944,1309,8828,303,3157,4638,4439,9175,1921,4695,7716,1494,1015,1772,5913,1127,1952,1950,8905,4064,9890,385,9357,7945,5035,7082,5369,4093,6546,5187,5637,2041,8946,1758,7111,6566,1027,1049,5148,7224,7248,296,6169,375,1656,7993,2816,3717,4279,4675,1609,3317,42,6201,3100,3144,163,9530,4531
-7096,6070,1009,4988,3538,5801,7149,3063,2324,2912,7911,7002,4338,7880,2481,7368,3516,2016,7556,2193,1388,3865,8125,4637,4096,8114,750,3144,1938,7002,9343,4095,1392,4220,3455,6969,9647,1321,9048,1996,1640,6626,1788,314,9578,6630,2813,6626,4981,9908,7024,4355,3201,3521,3864,3303,464,1923,595,9801,3391,8366,8084,9374,1041,8807,9085,1892,9431,8317,9016,9221,8574,9981,9240,5395,2009,6310,2854,9255
-8830,3145,2960,9615,8220,6061,3452,2918,6481,9278,2297,3385,6565,7066,7316,5682,107,7646,4466,68,1952,9603,8615,54,7191,791,6833,2560,693,9733,4168,570,9127,9537,1925,8287,5508,4297,8452,8795,6213,7994,2420,4208,524,5915,8602,8330,2651,8547,6156,1812,6271,7991,9407,9804,1553,6866,1128,2119,4691,9711,8315,5879,9935,6900,482,682,4126,1041,428,6247,3720,5882,7526,2582,4327,7725,3503,2631
-2738,9323,721,7434,1453,6294,2957,3786,5722,6019,8685,4386,3066,9057,6860,499,5315,3045,5194,7111,3137,9104,941,586,3066,755,4177,8819,7040,5309,3583,3897,4428,7788,4721,7249,6559,7324,825,7311,3760,6064,6070,9672,4882,584,1365,9739,9331,5783,2624,7889,1604,1303,1555,7125,8312,425,8936,3233,7724,1480,403,7440,1784,1754,4721,1569,652,3893,4574,5692,9730,4813,9844,8291,9199,7101,3391,8914
-6044,2928,9332,3328,8588,447,3830,1176,3523,2705,8365,6136,5442,9049,5526,8575,8869,9031,7280,706,2794,8814,5767,4241,7696,78,6570,556,5083,1426,4502,3336,9518,2292,1885,3740,3153,9348,9331,8051,2759,5407,9028,7840,9255,831,515,2612,9747,7435,8964,4971,2048,4900,5967,8271,1719,9670,2810,6777,1594,6367,6259,8316,3815,1689,6840,9437,4361,822,9619,3065,83,6344,7486,8657,8228,9635,6932,4864
-8478,4777,6334,4678,7476,4963,6735,3096,5860,1405,5127,7269,7793,4738,227,9168,2996,8928,765,733,1276,7677,6258,1528,9558,3329,302,8901,1422,8277,6340,645,9125,8869,5952,141,8141,1816,9635,4025,4184,3093,83,2344,2747,9352,7966,1206,1126,1826,218,7939,2957,2729,810,8752,5247,4174,4038,8884,7899,9567,301,5265,5752,7524,4381,1669,3106,8270,6228,6373,754,2547,4240,2313,5514,3022,1040,9738
-2265,8192,1763,1369,8469,8789,4836,52,1212,6690,5257,8918,6723,6319,378,4039,2421,8555,8184,9577,1432,7139,8078,5452,9628,7579,4161,7490,5159,8559,1011,81,478,5840,1964,1334,6875,8670,9900,739,1514,8692,522,9316,6955,1345,8132,2277,3193,9773,3923,4177,2183,1236,6747,6575,4874,6003,6409,8187,745,8776,9440,7543,9825,2582,7381,8147,7236,5185,7564,6125,218,7991,6394,391,7659,7456,5128,5294
-2132,8992,8160,5782,4420,3371,3798,5054,552,5631,7546,4716,1332,6486,7892,7441,4370,6231,4579,2121,8615,1145,9391,1524,1385,2400,9437,2454,7896,7467,2928,8400,3299,4025,7458,4703,7206,6358,792,6200,725,4275,4136,7390,5984,4502,7929,5085,8176,4600,119,3568,76,9363,6943,2248,9077,9731,6213,5817,6729,4190,3092,6910,759,2682,8380,1254,9604,3011,9291,5329,9453,9746,2739,6522,3765,5634,1113,5789
-5304,5499,564,2801,679,2653,1783,3608,7359,7797,3284,796,3222,437,7185,6135,8571,2778,7488,5746,678,6140,861,7750,803,9859,9918,2425,3734,2698,9005,4864,9818,6743,2475,132,9486,3825,5472,919,292,4411,7213,7699,6435,9019,6769,1388,802,2124,1345,8493,9487,8558,7061,8777,8833,2427,2238,5409,4957,8503,3171,7622,5779,6145,2417,5873,5563,5693,9574,9491,1937,7384,4563,6842,5432,2751,3406,7981
diff --git a/src/projecteuler/087.c b/src/projecteuler/087.c
deleted file mode 100644
index e1b1ad8..0000000
--- a/src/projecteuler/087.c
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "common.h"
-#include <stdlib.h>
-#include <string.h>
-
-const unsigned long limit = 50000000;
-
-int main(void)
-{
- unsigned long* p = primes(8000);
- unsigned long count = p[0];
- unsigned long i2, i3, i4, counter;
- char* numbers = malloc(limit*sizeof(char));
- memset(numbers, 0, limit);
-
- for(i2=1; i2<=count; i2++)
- for(i3=1; i3<=count; i3++)
- for(i4=1; i4<=count; i4++)
- {
- unsigned long p4 = p[i4];
- unsigned long p3 = p[i3];
- unsigned long p2 = p[i2];
- unsigned long long result = (unsigned long long)p4*p4*p4*p4;
- if(result >= limit) break;
- result += (unsigned long long)p3*p3*p3;
- if(result >= limit) break;
- result += (unsigned long long)p2*p2;
- if(result >= limit) break;
-
- numbers[result] = 1;
- }
-
- counter = 0;
- for(i2=0; i2<limit; i2++)
- if(numbers[i2] == 1)
- counter++;
-
- printf("%li\n", counter);
-
- free(p);
- return 0;
-}
-
diff --git a/src/projecteuler/089.py b/src/projecteuler/089.py
deleted file mode 100644
index f8d36be..0000000
--- a/src/projecteuler/089.py
+++ /dev/null
@@ -1,97 +0,0 @@
-
-def value(x):
- if x == 'I':
- return 1
- elif x == 'V':
- return 5
- elif x == 'X':
- return 10
- elif x == 'L':
- return 50
- elif x == 'C':
- return 100
- elif x == 'D':
- return 500
- elif x == 'M':
- return 1000
- else:
- print "Decoding error: " + x
- return None
-
-
-def decode_roman(n):
- result = 0
- for i in xrange(len(n)-1): # search for subtractive pairs
- cur = value(n[i])
- nxt = value(n[i+1])
- if cur < nxt:
- result -= cur
- else:
- result += cur
-
- result += value(n[-1])
- return result
-
-
-def minimal_roman(n):
- result = ""
- while n > 0:
- if n - 1000 >= 0:
- n -= 1000
- result += "M"
- elif n - 900 >= 0:
- n -= 900
- result += "CM"
- elif n - 500 >= 0:
- n -= 500
- result += "D"
- elif n - 400 >= 0:
- n -= 400
- result += "CD"
- elif n - 100 >= 0:
- n -= 100
- result += "C"
- elif n - 90 >= 0:
- n -= 90
- result += "XC"
- elif n - 50 >= 0:
- n -= 50
- result += "L"
- elif n - 40 >= 0:
- n -= 40
- result += "XL"
- elif n - 10 >= 0:
- n -= 10
- result += "X"
- elif n - 9 >= 0:
- n -= 9
- result += "IX"
- elif n - 5 >= 0:
- n -= 5
- result += "V"
- elif n - 4 >= 0:
- n -= 4
- result += "IV"
- elif n - 1 >= 0:
- n -= 1
- result += "I"
- return result
-
-
-numbers = []
-
-f = open('089.txt', 'r')
-for line in f:
- line = line.rstrip('\r\n')
- numbers.append(line)
-f.close()
-
-saved = 0
-
-for number in numbers:
- n = decode_roman(number)
- m = minimal_roman(n)
- saved += len(number) - len(m)
-
-print saved
-
diff --git a/src/projecteuler/089.txt b/src/projecteuler/089.txt
deleted file mode 100644
index 721ab99..0000000
--- a/src/projecteuler/089.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-MMMMDCLXXII
-MMDCCCLXXXIII
-MMMDLXVIIII
-MMMMDXCV
-DCCCLXXII
-MMCCCVI
-MMMCDLXXXVII
-MMMMCCXXI
-MMMCCXX
-MMMMDCCCLXXIII
-MMMCCXXXVII
-MMCCCLXXXXIX
-MDCCCXXIIII
-MMCXCVI
-CCXCVIII
-MMMCCCXXXII
-MDCCXXX
-MMMDCCCL
-MMMMCCLXXXVI
-MMDCCCXCVI
-MMMDCII
-MMMCCXII
-MMMMDCCCCI
-MMDCCCXCII
-MDCXX
-CMLXXXVII
-MMMXXI
-MMMMCCCXIV
-MLXXII
-MCCLXXVIIII
-MMMMCCXXXXI
-MMDCCCLXXII
-MMMMXXXI
-MMMDCCLXXX
-MMDCCCLXXIX
-MMMMLXXXV
-MCXXI
-MDCCCXXXVII
-MMCCCLXVII
-MCDXXXV
-CCXXXIII
-CMXX
-MMMCLXIV
-MCCCLXXXVI
-DCCCXCVIII
-MMMDCCCCXXXIV
-CDXVIIII
-MMCCXXXV
-MDCCCXXXII
-MMMMD
-MMDCCLXIX
-MMMMCCCLXXXXVI
-MMDCCXLII
-MMMDCCCVIIII
-DCCLXXXIIII
-MDCCCCXXXII
-MMCXXVII
-DCCCXXX
-CCLXIX
-MMMXI
-MMMMCMLXXXXVIII
-MMMMDLXXXVII
-MMMMDCCCLX
-MMCCLIV
-CMIX
-MMDCCCLXXXIIII
-CLXXXII
-MMCCCCXXXXV
-MMMMDLXXXVIIII
-MMMDCCCXXI
-MMDCCCCLXXVI
-MCCCCLXX
-MMCDLVIIII
-MMMDCCCLIX
-MMMMCCCCXIX
-MMMDCCCLXXV
-XXXI
-CDLXXXIII
-MMMCXV
-MMDCCLXIII
-MMDXXX
-MMMMCCCLVII
-MMMDCI
-MMMMCDLXXXIIII
-MMMMCCCXVI
-CCCLXXXVIII
-MMMMCML
-MMMMXXIV
-MMMCCCCXXX
-DCCX
-MMMCCLX
-MMDXXXIII
-CCCLXIII
-MMDCCXIII
-MMMCCCXLIV
-CLXXXXI
-CXVI
-MMMMCXXXIII
-CLXX
-DCCCXVIII
-MLXVII
-DLXXXX
-MMDXXI
-MMMMDLXXXXVIII
-MXXII
-LXI
-DCCCCXLIII
-MMMMDV
-MMMMXXXIV
-MDCCCLVIII
-MMMCCLXXII
-MMMMDCCXXXVI
-MMMMLXXXIX
-MDCCCLXXXI
-MMMMDCCCXV
-MMMMCCCCXI
-MMMMCCCLIII
-MDCCCLXXI
-MMCCCCXI
-MLXV
-MMCDLXII
-MMMMDXXXXII
-MMMMDCCCXL
-MMMMCMLVI
-CCLXXXIV
-MMMDCCLXXXVI
-MMCLII
-MMMCCCCXV
-MMLXXXIII
-MMMV
-MMMV
-DCCLXII
-MMDCCCCXVI
-MMDCXLVIII
-CCLIIII
-CCCXXV
-MMDCCLXXXVIIII
-MMMMDCLXXVIII
-MMMMDCCCXCI
-MMMMCCCXX
-MMCCXLV
-MMMDCCCLXIX
-MMCCLXIIII
-MMMDCCCXLIX
-MMMMCCCLXIX
-CMLXXXXI
-MCMLXXXIX
-MMCDLXI
-MMDCLXXVIII
-MMMMDCCLXI
-MCDXXV
-DL
-CCCLXXII
-MXVIIII
-MCCCCLXVIII
-CIII
-MMMDCCLXXIIII
-MMMDVIII
-MMMMCCCLXXXXVII
-MMDXXVII
-MMDCCLXXXXV
-MMMMCXLVI
-MMMDCCLXXXII
-MMMDXXXVI
-MCXXII
-CLI
-DCLXXXIX
-MMMCLI
-MDCLXIII
-MMMMDCCXCVII
-MMCCCLXXXV
-MMMDCXXVIII
-MMMCDLX
-MMMCMLII
-MMMIV
-MMMMDCCCLVIII
-MMMDLXXXVIII
-MCXXIV
-MMMMLXXVI
-CLXXIX
-MMMCCCCXXVIIII
-DCCLXXXV
-MMMDCCCVI
-LI
-CLXXXVI
-MMMMCCCLXXVI
-MCCCLXVI
-CCXXXIX
-MMDXXXXI
-MMDCCCXLI
-DCCCLXXXVIII
-MMMMDCCCIV
-MDCCCCXV
-MMCMVI
-MMMMCMLXXXXV
-MMDCCLVI
-MMMMCCXLVIII
-DCCCCIIII
-MMCCCCIII
-MMMDCCLXXXVIIII
-MDCCCLXXXXV
-DVII
-MMMV
-DCXXV
-MMDCCCXCV
-DCVIII
-MMCDLXVI
-MCXXVIII
-MDCCXCVIII
-MMDCLX
-MMMDCCLXIV
-MMCDLXXVII
-MMDLXXXIIII
-MMMMCCCXXII
-MMMDCCCXLIIII
-DCCCCLXVII
-MMMCLXXXXIII
-MCCXV
-MMMMDCXI
-MMMMDCLXXXXV
-MMMCCCLII
-MMCMIX
-MMDCCXXV
-MMDLXXXVI
-MMMMDCXXVIIII
-DCCCCXXXVIIII
-MMCCXXXIIII
-MMDCCLXXVIII
-MDCCLXVIIII
-MMCCLXXXV
-MMMMDCCCLXXXVIII
-MMCMXCI
-MDXLII
-MMMMDCCXIV
-MMMMLI
-DXXXXIII
-MMDCCXI
-MMMMCCLXXXIII
-MMMDCCCLXXIII
-MDCLVII
-MMCD
-MCCCXXVII
-MMMMDCCIIII
-MMMDCCXLVI
-MMMCLXXXVII
-MMMCCVIIII
-MCCCCLXXIX
-DL
-DCCCLXXVI
-MMDXCI
-MMMMDCCCCXXXVI
-MMCII
-MMMDCCCXXXXV
-MMMCDXLV
-MMDCXXXXIV
-MMD
-MDCCCLXXXX
-MMDCXLIII
-MMCCXXXII
-MMDCXXXXVIIII
-DCCCLXXI
-MDXCVIIII
-MMMMCCLXXVIII
-MDCLVIIII
-MMMCCCLXXXIX
-MDCLXXXV
-MDLVIII
-MMMMCCVII
-MMMMDCXIV
-MMMCCCLXIIII
-MMIIII
-MMMMCCCLXXIII
-CCIII
-MMMCCLV
-MMMDXIII
-MMMCCCXC
-MMMDCCCXXI
-MMMMCCCCXXXII
-CCCLVI
-MMMCCCLXXXVI
-MXVIIII
-MMMCCCCXIIII
-CLXVII
-MMMCCLXX
-CCCCLXIV
-MMXXXXII
-MMMMCCLXXXX
-MXL
-CCXVI
-CCCCLVIIII
-MMCCCII
-MCCCLVIII
-MMMMCCCX
-MCDLXXXXIV
-MDCCCXIII
-MMDCCCXL
-MMMMCCCXXIII
-DXXXIV
-CVI
-MMMMDCLXXX
-DCCCVII
-MMCMLXIIII
-MMMDCCCXXXIII
-DCCC
-MDIII
-MMCCCLXVI
-MMMCCCCLXXI
-MMDCCCCXVIII
-CCXXXVII
-CCCXXV
-MDCCCXII
-MMMCMV
-MMMMCMXV
-MMMMDCXCI
-DXXI
-MMCCXLVIIII
-MMMMCMLII
-MDLXXX
-MMDCLXVI
-CXXI
-MMMDCCCLIIII
-MMMCXXI
-MCCIII
-MMDCXXXXI
-CCXCII
-MMMMDXXXV
-MMMCCCLXV
-MMMMDLXV
-MMMCCCCXXXII
-MMMCCCVIII
-DCCCCLXXXXII
-MMCLXIV
-MMMMCXI
-MLXXXXVII
-MMMCDXXXVIII
-MDXXII
-MLV
-MMMMDLXVI
-MMMCXII
-XXXIII
-MMMMDCCCXXVI
-MMMLXVIIII
-MMMLX
-MMMCDLXVII
-MDCCCLVII
-MMCXXXVII
-MDCCCCXXX
-MMDCCCLXIII
-MMMMDCXLIX
-MMMMCMXLVIII
-DCCCLXXVIIII
-MDCCCLIII
-MMMCMLXI
-MMMMCCLXI
-MMDCCCLIII
-MMMDCCCVI
-MMDXXXXIX
-MMCLXXXXV
-MMDXXX
-MMMXIII
-DCLXXIX
-DCCLXII
-MMMMDCCLXVIII
-MDCCXXXXIII
-CCXXXII
-MMMMDCXXV
-MMMCCCXXVIII
-MDCVIII
-MMMCLXXXXIIII
-CLXXXI
-MDCCCCXXXIII
-MMMMDCXXX
-MMMDCXXIV
-MMMCCXXXVII
-MCCCXXXXIIII
-CXVIII
-MMDCCCCIV
-MMMMCDLXXV
-MMMDLXIV
-MDXCIII
-MCCLXXXI
-MMMDCCCXXIV
-MCXLIII
-MMMDCCCI
-MCCLXXX
-CCXV
-MMDCCLXXI
-MMDLXXXIII
-MMMMDCXVII
-MMMCMLXV
-MCLXVIII
-MMMMCCLXXVI
-MMMDCCLXVIIII
-MMMMDCCCIX
-DLXXXXIX
-DCCCXXII
-MMMMIII
-MMMMCCCLXXVI
-DCCCXCIII
-DXXXI
-MXXXIIII
-CCXII
-MMMDCCLXXXIIII
-MMMCXX
-MMMCMXXVII
-DCCCXXXX
-MMCDXXXVIIII
-MMMMDCCXVIII
-LV
-MMMDCCCCVI
-MCCCII
-MMCMLXVIIII
-MDCCXI
-MMMMDLXVII
-MMCCCCLXI
-MMDCCV
-MMMCCCXXXIIII
-MMMMDI
-MMMDCCCXCV
-MMDCCLXXXXI
-MMMDXXVI
-MMMDCCCLVI
-MMDCXXX
-MCCCVII
-MMMMCCCLXII
-MMMMXXV
-MMCMXXV
-MMLVI
-MMDXXX
-MMMMCVII
-MDC
-MCCIII
-MMMMDCC
-MMCCLXXV
-MMDCCCXXXXVI
-MMMMCCCLXV
-CDXIIII
-MLXIIII
-CCV
-MMMCMXXXI
-CCCCLXVI
-MDXXXII
-MMMMCCCLVIII
-MMV
-MMMCLII
-MCMLI
-MMDCCXX
-MMMMCCCCXXXVI
-MCCLXXXI
-MMMCMVI
-DCCXXX
-MMMMCCCLXV
-DCCCXI
-MMMMDCCCXIV
-CCCXXI
-MMDLXXV
-CCCCLXXXX
-MCCCLXXXXII
-MMDCIX
-DCCXLIIII
-DXIV
-MMMMCLII
-CDLXI
-MMMCXXVII
-MMMMDCCCCLXIII
-MMMDCLIIII
-MCCCCXXXXII
-MMCCCLX
-CCCCLIII
-MDCCLXXVI
-MCMXXIII
-MMMMDLXXVIII
-MMDCCCCLX
-MMMCCCLXXXX
-MMMCDXXVI
-MMMDLVIII
-CCCLXI
-MMMMDCXXII
-MMDCCCXXI
-MMDCCXIII
-MMMMCLXXXVI
-MDCCCCXXVI
-MDV
-MMDCCCCLXXVI
-MMMMCCXXXVII
-MMMDCCLXXVIIII
-MMMCCCCLXVII
-DCCXLI
-MMCLXXXVIII
-MCCXXXVI
-MMDCXLVIII
-MMMMCXXXII
-MMMMDCCLXVI
-MMMMCMLI
-MMMMCLXV
-MMMMDCCCXCIV
-MCCLXXVII
-LXXVIIII
-DCCLII
-MMMCCCXCVI
-MMMCLV
-MMDCCCXXXXVIII
-DCCCXV
-MXC
-MMDCCLXXXXVII
-MMMMCML
-MMDCCCLXXVIII
-DXXI
-MCCCXLI
-DCLXXXXI
-MMCCCLXXXXVIII
-MDCCCCLXXVIII
-MMMMDXXV
-MMMDCXXXVI
-MMMCMXCVII
-MMXVIIII
-MMMDCCLXXIV
-MMMCXXV
-DXXXVIII
-MMMMCLXVI
-MDXII
-MMCCCLXX
-CCLXXI
-DXIV
-MMMCLIII
-DLII
-MMMCCCXLIX
-MMCCCCXXVI
-MMDCXLIII
-MXXXXII
-CCCLXXXV
-MDCLXXVI
-MDCXII
-MMMCCCLXXXIII
-MMDCCCCLXXXII
-MMMMCCCLXXXV
-MMDCXXI
-DCCCXXX
-MMMDCCCCLII
-MMMDCCXXII
-MMMMCDXCVIII
-MMMCCLXVIIII
-MMXXV
-MMMMCDXIX
-MMMMCCCX
-MMMCCCCLXVI
-MMMMDCLXXVIIII
-MMMMDCXXXXIV
-MMMCMXII
-MMMMXXXIII
-MMMMDLXXXII
-DCCCLIV
-MDXVIIII
-MMMCLXXXXV
-CCCCXX
-MMDIX
-MMCMLXXXVIII
-DCCXLIII
-DCCLX
-D
-MCCCVII
-MMMMCCCLXXXIII
-MDCCCLXXIIII
-MMMDCCCCLXXXVII
-MMMMCCCVII
-MMMDCCLXXXXVI
-CDXXXIV
-MCCLXVIII
-MMMMDLX
-MMMMDXII
-MMMMCCCCLIIII
-MCMLXXXXIII
-MMMMDCCCIII
-MMDCLXXXIII
-MDCCCXXXXIV
-XXXXVII
-MMMDCCCXXXII
-MMMDCCCXLII
-MCXXXV
-MDCXXVIIII
-MMMCXXXXIIII
-MMMMCDXVII
-MMMDXXIII
-MMMMCCCCLXI
-DCLXXXXVIIII
-LXXXXI
-CXXXIII
-MCDX
-MCCLVII
-MDCXXXXII
-MMMCXXIV
-MMMMLXXXX
-MMDCCCCXLV
-MLXXX
-MMDCCCCLX
-MCDLIII
-MMMCCCLXVII
-MMMMCCCLXXIV
-MMMDCVIII
-DCCCCXXIII
-MMXCI
-MMDCCIV
-MMMMDCCCXXXIV
-CCCLXXI
-MCCLXXXII
-MCMIII
-CCXXXI
-DCCXXXVIII
-MMMMDCCXLVIIII
-MMMMCMXXXV
-DCCCLXXV
-DCCXCI
-MMMMDVII
-MMMMDCCCLXVIIII
-CCCXCV
-MMMMDCCXX
-MCCCCII
-MMMCCCXC
-MMMCCCII
-MMDCCLXXVII
-MMDCLIIII
-CCXLIII
-MMMDCXVIII
-MMMCCCIX
-MCXV
-MMCCXXV
-MLXXIIII
-MDCCXXVI
-MMMCCCXX
-MMDLXX
-MMCCCCVI
-MMDCCXX
-MMMMDCCCCXCV
-MDCCCXXXII
-MMMMDCCCCXXXX
-XCIV
-MMCCCCLX
-MMXVII
-MLXXI
-MMMDXXVIII
-MDCCCCII
-MMMCMLVII
-MMCLXXXXVIII
-MDCCCCLV
-MCCCCLXXIIII
-MCCCLII
-MCDXLVI
-MMMMDXVIII
-DCCLXXXIX
-MMMDCCLXIV
-MDCCCCXLIII
-CLXXXXV
-MMMMCCXXXVI
-MMMDCCCXXI
-MMMMCDLXXVII
-MCDLIII
-MMCCXLVI
-DCCCLV
-MCDLXX
-DCLXXVIII
-MMDCXXXIX
-MMMMDCLX
-MMDCCLI
-MMCXXXV
-MMMCCXII
-MMMMCMLXII
-MMMMCCV
-MCCCCLXIX
-MMMMCCIII
-CLXVII
-MCCCLXXXXIIII
-MMMMDCVIII
-MMDCCCLXI
-MMLXXIX
-CMLXIX
-MMDCCCXLVIIII
-DCLXII
-MMMCCCXLVII
-MDCCCXXXV
-MMMMDCCXCVI
-DCXXX
-XXVI
-MMLXIX
-MMCXI
-DCXXXVII
-MMMMCCCXXXXVIII
-MMMMDCLXI
-MMMMDCLXXIIII
-MMMMVIII
-MMMMDCCCLXII
-MDCXCI
-MMCCCXXIIII
-CCCCXXXXV
-MMDCCCXXI
-MCVI
-MMDCCLXVIII
-MMMMCXL
-MLXVIII
-CMXXVII
-CCCLV
-MDCCLXXXIX
-MMMCCCCLXV
-MMDCCLXII
-MDLXVI
-MMMCCCXVIII
-MMMMCCLXXXI
-MMCXXVII
-MMDCCCLXVIII
-MMMCXCII
-MMMMDCLVIII
-MMMMDCCCXXXXII
-MMDCCCCLXXXXVI
-MDCCXL
-MDCCLVII
-MMMMDCCCLXXXVI
-DCCXXXIII
-MMMMDCCCCLXXXV
-MMCCXXXXVIII
-MMMCCLXXVIII
-MMMDCLXXVIII
-DCCCI
-MMMMLXXXXVIIII
-MMMCCCCLXXII
-MMCLXXXVII
-CCLXVI
-MCDXLIII
-MMCXXVIII
-MDXIV
-CCCXCVIII
-CLXXVIII
-MMCXXXXVIIII
-MMMDCLXXXIV
-CMLVIII
-MCDLIX
-MMMMDCCCXXXII
-MMMMDCXXXIIII
-MDCXXI
-MMMDCXLV
-MCLXXVIII
-MCDXXII
-IV
-MCDLXXXXIII
-MMMMDCCLXV
-CCLI
-MMMMDCCCXXXVIII
-DCLXII
-MCCCLXVII
-MMMMDCCCXXXVI
-MMDCCXLI
-MLXI
-MMMCDLXVIII
-MCCCCXCIII
-XXXIII
-MMMDCLXIII
-MMMMDCL
-DCCCXXXXIIII
-MMDLVII
-DXXXVII
-MCCCCXXIIII
-MCVII
-MMMMDCCXL
-MMMMCXXXXIIII
-MCCCCXXIV
-MMCLXVIII
-MMXCIII
-MDCCLXXX
-MCCCLIIII
-MMDCLXXI
-MXI
-MCMLIV
-MMMCCIIII
-DCCLXXXVIIII
-MDCLIV
-MMMDCXIX
-CMLXXXI
-DCCLXXXVII
-XXV
-MMMXXXVI
-MDVIIII
-CLXIII
-MMMCDLVIIII
-MMCCCCVII
-MMMLXX
-MXXXXII
-MMMMCCCLXVIII
-MMDCCCXXVIII
-MMMMDCXXXXI
-MMMMDCCCXXXXV
-MMMXV
-MMMMCCXVIIII
-MMDCCXIIII
-MMMXXVII
-MDCCLVIIII
-MMCXXIIII
-MCCCLXXIV
-DCLVIII
-MMMLVII
-MMMCXLV
-MMXCVII
-MMMCCCLXXXVII
-MMMMCCXXII
-DXII
-MMMDLV
-MCCCLXXVIII
-MMMCLIIII
-MMMMCLXXXX
-MMMCLXXXIIII
-MDCXXIII
-MMMMCCXVI
-MMMMDLXXXIII
-MMMDXXXXIII
-MMMMCCCCLV
-MMMDLXXXI
-MMMCCLXXVI
-MMMMXX
-MMMMDLVI
-MCCCCLXXX
-MMMXXII
-MMXXII
-MMDCCCCXXXI
-MMMDXXV
-MMMDCLXXXVIIII
-MMMDLXXXXVII
-MDLXIIII
-CMXC
-MMMXXXVIII
-MDLXXXVIII
-MCCCLXXVI
-MMCDLIX
-MMDCCCXVIII
-MDCCCXXXXVI
-MMMMCMIV
-MMMMDCIIII
-MMCCXXXV
-XXXXVI
-MMMMCCXVII
-MMCCXXIV
-MCMLVIIII
-MLXXXIX
-MMMMLXXXIX
-CLXXXXIX
-MMMDCCCCLVIII
-MMMMCCLXXIII
-MCCCC
-DCCCLIX
-MMMCCCLXXXII
-MMMCCLXVIIII
-MCLXXXV
-CDLXXXVII
-DCVI
-MMX
-MMCCXIII
-MMMMDCXX
-MMMMXXVIII
-DCCCLXII
-MMMMCCCXLIII
-MMMMCLXV
-DXCI
-MMMMCLXXX
-MMMDCCXXXXI
-MMMMXXXXVI
-DCLX
-MMMCCCXI
-MCCLXXX
-MMCDLXXII
-DCCLXXI
-MMMCCCXXXVI
-MCCCCLXXXVIIII
-CDLVIII
-DCCLVI
-MMMMDCXXXVIII
-MMCCCLXXXIII
-MMMMDCCLXXV
-MMMXXXVI
-CCCLXXXXIX
-CV
-CCCCXIII
-CCCCXVI
-MDCCCLXXXIIII
-MMDCCLXXXII
-MMMMCCCCLXXXI
-MXXV
-MMCCCLXXVIIII
-MMMCCXII
-MMMMCCXXXIII
-MMCCCLXXXVI
-MMMDCCCLVIIII
-MCCXXXVII
-MDCLXXV
-XXXV
-MMDLI
-MMMCCXXX
-MMMMCXXXXV
-CCCCLIX
-MMMMDCCCLXXIII
-MMCCCXVII
-DCCCXVI
-MMMCCCXXXXV
-MDCCCCXCV
-CLXXXI
-MMMMDCCLXX
-MMMDCCCIII
-MMCLXXVII
-MMMDCCXXIX
-MMDCCCXCIIII
-MMMCDXXIIII
-MMMMXXVIII
-MMMMDCCCCLXVIII
-MDCCCXX
-MMMMCDXXI
-MMMMDLXXXIX
-CCXVI
-MDVIII
-MMCCLXXI
-MMMDCCCLXXI
-MMMCCCLXXVI
-MMCCLXI
-MMMMDCCCXXXIV
-DLXXXVI
-MMMMDXXXII
-MMMXXIIII
-MMMMCDIV
-MMMMCCCXLVIII
-MMMMCXXXVIII
-MMMCCCLXVI
-MDCCXVIII
-MMCXX
-CCCLIX
-MMMMDCCLXXII
-MDCCCLXXV
-MMMMDCCCXXIV
-DCCCXXXXVIII
-MMMDCCCCXXXVIIII
-MMMMCCXXXV
-MDCLXXXIII
-MMCCLXXXIV
-MCLXXXXIIII
-DXXXXIII
-MCCCXXXXVIII
-MMCLXXIX
-MMMMCCLXIV
-MXXII
-MMMCXIX
-MDCXXXVII
-MMDCCVI
-MCLXXXXVIII
-MMMCXVI
-MCCCLX
-MMMCDX
-CCLXVIIII
-MMMCCLX
-MCXXVIII
-LXXXII
-MCCCCLXXXI
-MMMI
-MMMCCCLXIV
-MMMCCCXXVIIII
-CXXXVIII
-MMCCCXX
-MMMCCXXVIIII
-MCCLXVI
-MMMCCCCXXXXVI
-MMDCCXCIX
-MCMLXXI
-MMCCLXVIII
-CDLXXXXIII
-MMMMDCCXXII
-MMMMDCCLXXXVII
-MMMDCCLIV
-MMCCLXIII
-MDXXXVII
-DCCXXXIIII
-MCII
-MMMDCCCLXXI
-MMMLXXIII
-MDCCCLIII
-MMXXXVIII
-MDCCXVIIII
-MDCCCCXXXVII
-MMCCCXVI
-MCMXXII
-MMMCCCLVIII
-MMMMDCCCXX
-MCXXIII
-MMMDLXI
-MMMMDXXII
-MDCCCX
-MMDXCVIIII
-MMMDCCCCVIII
-MMMMDCCCCXXXXVI
-MMDCCCXXXV
-MMCXCIV
-MCMLXXXXIII
-MMMCCCLXXVI
-MMMMDCLXXXV
-CMLXIX
-DCXCII
-MMXXVIII
-MMMMCCCXXX
-XXXXVIIII \ No newline at end of file
diff --git a/src/projecteuler/092.c b/src/projecteuler/092.c
deleted file mode 100644
index 8616cf8..0000000
--- a/src/projecteuler/092.c
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-const int limit = 10000000;
-
-const int squares[10] = { 0, 1, 4, 9, 16, 25, 36, 49, 64, 81 };
-
-int next_chain(int number)
-{
- int sum = 0;
- int digit;
- while(number > 0)
- {
- digit = number % 10;
- number = number / 10;
- sum += squares[digit];
- }
- return sum;
-}
-
-int main()
-{
- int* numbers = calloc(limit, sizeof(int));
- int i, count;
-
- for(i=0; i<limit; i++)
- numbers[i] = next_chain(i);
-
- count = 0;
-
- for(i=1; i<limit; i++)
- {
- int next = numbers[i];
- while(next != 1 && next != 89)
- next = numbers[next];
-
- numbers[i] = next;
- if(next == 89)
- count++;
- }
-
- printf("%d\n", count);
-
- return 0;
-}
-
diff --git a/src/projecteuler/096.pl b/src/projecteuler/096.pl
deleted file mode 100644
index 2658358..0000000
--- a/src/projecteuler/096.pl
+++ /dev/null
@@ -1,173 +0,0 @@
-#!/usr/bin//perl
-
-use strict;
-use warnings;
-use List::Util qw(any);
-
-sub remove_numbers {
- my $numbers = shift;
- my $to_rem = shift;
-
- foreach my $n (keys %$to_rem) {
- delete $numbers->{$n};
- }
-}
-
-sub numbers_in_row {
- my $field = shift;
- my $row = shift;
- my $numbers = {};
-
- for(my $i=0; $i<9; $i++) {
- my $number = $field->[9*$row + $i];
- $numbers->{$number} = 1 if $number;
- }
-
- return $numbers;
-}
-
-sub numbers_in_col {
- my $field = shift;
- my $col = shift;
- my $numbers = {};
-
- for(my $i=0; $i<9; $i++) {
- my $number = $field->[9*$i + $col];
- $numbers->{$number} = 1 if $number;
- }
-
- return $numbers;
-}
-
-sub numbers_in_block {
- my $field = shift;
- my $block = shift;
- my $numbers = {};
-
- my $blk_row = int($block / 3);
- my $blk_col = $block % 3;
-
- for(my $row=0; $row<3; $row++) {
- for (my $col=0; $col<3; $col++) {
- my $number = $field->[9*(3*$blk_row + $row) + (3*$blk_col + $col)];
- $numbers->{$number} = 1 if $number;
- }
- }
-
- return $numbers;
-}
-
-sub collect_numbers {
- my $field = shift;
-
- my $row_n = [];
- my $col_n = [];
- my $blk_n = [];
-
- for(my $i=0; $i<9; $i++) {
- $row_n->[$i] = numbers_in_row($field, $i);
- }
- for(my $i=0; $i<9; $i++) {
- $col_n->[$i] = numbers_in_col($field, $i);
- }
- for(my $i=0; $i<9; $i++) {
- $blk_n->[$i] = numbers_in_block($field, $i);
- }
-
- return ($row_n, $col_n, $blk_n);
-}
-
-sub print_field {
- my $field = shift || return;
-
- for(my $i=0; $i<9; $i++) {
- for(my $j=0; $j<9; $j++) {
- print $field->[9*$i + $j] . " ";
- }
- print "\n";
- }
- print "\n";
-}
-
-sub find_candidates {
- my $field = shift;
- my ($row_n, $col_n, $blk_n) = collect_numbers($field);
-
-restart:
- my $candidates = {};
- for(my $row=0; $row<9; $row++) {
- for(my $col=0; $col<9; $col++) {
- next if $field->[9*$row + $col];
-
- my $blk = 3*int($row / 3) + int($col / 3);
- my %numbers = map { $_ => 1 } 1..9;
- remove_numbers(\%numbers, $row_n->[$row]);
- remove_numbers(\%numbers, $col_n->[$col]);
- remove_numbers(\%numbers, $blk_n->[$blk]);
-
- if (scalar keys %numbers == 1) {
- # there is only one possibility -> restart search with updated field
- my $n = (keys %numbers)[0];
- $field->[9*$row + $col] = $n;
- $row_n->[$row]->{$n} = 1;
- $col_n->[$col]->{$n} = 1;
- $blk_n->[$blk]->{$n} = 1;
- goto restart;
- } elsif (scalar keys %numbers > 1) {
- $candidates->{9*$row + $col} = [ sort keys %numbers ];
- } else {
- # no candidate possible on this position
- return;
- }
- }
- }
- return $candidates;
-}
-
-sub solve {
- my @field = @_;
-
- my $candidates = find_candidates(\@field) || return;
-
- if (scalar keys %$candidates == 0) {
- return \@field;
- }
-
- my @field_copy = @field;
-
- # iterate remaining positions with multiple possibilities
- foreach my $pos (sort { scalar @{$candidates->{$a}} <=> scalar @{$candidates->{$b}} } keys %$candidates) {
- @field = @field_copy;
- foreach my $cand (@{$candidates->{$pos}}) {
- @field[$pos] = $cand;
- my $solved_field = solve(@field);
- return $solved_field if $solved_field;
- }
- return;
- }
-}
-
-sub main {
- my $content;
- open FILE, "<096.txt" or die "Can't open file: $!\n";
- while(<FILE>) {
- $content .= $_;
- }
- close FILE;
-
- my @sudokus = split('\n?Grid [0-9]+\n', $content);
- shift @sudokus; # remove empty first element
-
- my $sum = 0;
-
- foreach my $sudoku (@sudokus) {
- my @field = split("\n?", $sudoku);
- my $solution = solve(@field);
- $sum += 100*$solution->[0] + 10*$solution->[1] + 1*$solution->[2] . "\n";
- }
-
- print $sum . "\n";
-}
-
-main();
-
diff --git a/src/projecteuler/096.txt b/src/projecteuler/096.txt
deleted file mode 100644
index be23f6a..0000000
--- a/src/projecteuler/096.txt
+++ /dev/null
@@ -1,500 +0,0 @@
-Grid 01
-003020600
-900305001
-001806400
-008102900
-700000008
-006708200
-002609500
-800203009
-005010300
-Grid 02
-200080300
-060070084
-030500209
-000105408
-000000000
-402706000
-301007040
-720040060
-004010003
-Grid 03
-000000907
-000420180
-000705026
-100904000
-050000040
-000507009
-920108000
-034059000
-507000000
-Grid 04
-030050040
-008010500
-460000012
-070502080
-000603000
-040109030
-250000098
-001020600
-080060020
-Grid 05
-020810740
-700003100
-090002805
-009040087
-400208003
-160030200
-302700060
-005600008
-076051090
-Grid 06
-100920000
-524010000
-000000070
-050008102
-000000000
-402700090
-060000000
-000030945
-000071006
-Grid 07
-043080250
-600000000
-000001094
-900004070
-000608000
-010200003
-820500000
-000000005
-034090710
-Grid 08
-480006902
-002008001
-900370060
-840010200
-003704100
-001060049
-020085007
-700900600
-609200018
-Grid 09
-000900002
-050123400
-030000160
-908000000
-070000090
-000000205
-091000050
-007439020
-400007000
-Grid 10
-001900003
-900700160
-030005007
-050000009
-004302600
-200000070
-600100030
-042007006
-500006800
-Grid 11
-000125400
-008400000
-420800000
-030000095
-060902010
-510000060
-000003049
-000007200
-001298000
-Grid 12
-062340750
-100005600
-570000040
-000094800
-400000006
-005830000
-030000091
-006400007
-059083260
-Grid 13
-300000000
-005009000
-200504000
-020000700
-160000058
-704310600
-000890100
-000067080
-000005437
-Grid 14
-630000000
-000500008
-005674000
-000020000
-003401020
-000000345
-000007004
-080300902
-947100080
-Grid 15
-000020040
-008035000
-000070602
-031046970
-200000000
-000501203
-049000730
-000000010
-800004000
-Grid 16
-361025900
-080960010
-400000057
-008000471
-000603000
-259000800
-740000005
-020018060
-005470329
-Grid 17
-050807020
-600010090
-702540006
-070020301
-504000908
-103080070
-900076205
-060090003
-080103040
-Grid 18
-080005000
-000003457
-000070809
-060400903
-007010500
-408007020
-901020000
-842300000
-000100080
-Grid 19
-003502900
-000040000
-106000305
-900251008
-070408030
-800763001
-308000104
-000020000
-005104800
-Grid 20
-000000000
-009805100
-051907420
-290401065
-000000000
-140508093
-026709580
-005103600
-000000000
-Grid 21
-020030090
-000907000
-900208005
-004806500
-607000208
-003102900
-800605007
-000309000
-030020050
-Grid 22
-005000006
-070009020
-000500107
-804150000
-000803000
-000092805
-907006000
-030400010
-200000600
-Grid 23
-040000050
-001943600
-009000300
-600050002
-103000506
-800020007
-005000200
-002436700
-030000040
-Grid 24
-004000000
-000030002
-390700080
-400009001
-209801307
-600200008
-010008053
-900040000
-000000800
-Grid 25
-360020089
-000361000
-000000000
-803000602
-400603007
-607000108
-000000000
-000418000
-970030014
-Grid 26
-500400060
-009000800
-640020000
-000001008
-208000501
-700500000
-000090084
-003000600
-060003002
-Grid 27
-007256400
-400000005
-010030060
-000508000
-008060200
-000107000
-030070090
-200000004
-006312700
-Grid 28
-000000000
-079050180
-800000007
-007306800
-450708096
-003502700
-700000005
-016030420
-000000000
-Grid 29
-030000080
-009000500
-007509200
-700105008
-020090030
-900402001
-004207100
-002000800
-070000090
-Grid 30
-200170603
-050000100
-000006079
-000040700
-000801000
-009050000
-310400000
-005000060
-906037002
-Grid 31
-000000080
-800701040
-040020030
-374000900
-000030000
-005000321
-010060050
-050802006
-080000000
-Grid 32
-000000085
-000210009
-960080100
-500800016
-000000000
-890006007
-009070052
-300054000
-480000000
-Grid 33
-608070502
-050608070
-002000300
-500090006
-040302050
-800050003
-005000200
-010704090
-409060701
-Grid 34
-050010040
-107000602
-000905000
-208030501
-040070020
-901080406
-000401000
-304000709
-020060010
-Grid 35
-053000790
-009753400
-100000002
-090080010
-000907000
-080030070
-500000003
-007641200
-061000940
-Grid 36
-006080300
-049070250
-000405000
-600317004
-007000800
-100826009
-000702000
-075040190
-003090600
-Grid 37
-005080700
-700204005
-320000084
-060105040
-008000500
-070803010
-450000091
-600508007
-003010600
-Grid 38
-000900800
-128006400
-070800060
-800430007
-500000009
-600079008
-090004010
-003600284
-001007000
-Grid 39
-000080000
-270000054
-095000810
-009806400
-020403060
-006905100
-017000620
-460000038
-000090000
-Grid 40
-000602000
-400050001
-085010620
-038206710
-000000000
-019407350
-026040530
-900020007
-000809000
-Grid 41
-000900002
-050123400
-030000160
-908000000
-070000090
-000000205
-091000050
-007439020
-400007000
-Grid 42
-380000000
-000400785
-009020300
-060090000
-800302009
-000040070
-001070500
-495006000
-000000092
-Grid 43
-000158000
-002060800
-030000040
-027030510
-000000000
-046080790
-050000080
-004070100
-000325000
-Grid 44
-010500200
-900001000
-002008030
-500030007
-008000500
-600080004
-040100700
-000700006
-003004050
-Grid 45
-080000040
-000469000
-400000007
-005904600
-070608030
-008502100
-900000005
-000781000
-060000010
-Grid 46
-904200007
-010000000
-000706500
-000800090
-020904060
-040002000
-001607000
-000000030
-300005702
-Grid 47
-000700800
-006000031
-040002000
-024070000
-010030080
-000060290
-000800070
-860000500
-002006000
-Grid 48
-001007090
-590080001
-030000080
-000005800
-050060020
-004100000
-080000030
-100020079
-020700400
-Grid 49
-000003017
-015009008
-060000000
-100007000
-009000200
-000500004
-000000020
-500600340
-340200000
-Grid 50
-300200000
-000107000
-706030500
-070009080
-900020004
-010800050
-009040301
-000702000
-000008006 \ No newline at end of file
diff --git a/src/projecteuler/097.py b/src/projecteuler/097.py
deleted file mode 100644
index ec263b0..0000000
--- a/src/projecteuler/097.py
+++ /dev/null
@@ -1 +0,0 @@
-print (28433*(1<<7830457)+1) % 10**10
diff --git a/src/projecteuler/098.py b/src/projecteuler/098.py
deleted file mode 100644
index 452e15e..0000000
--- a/src/projecteuler/098.py
+++ /dev/null
@@ -1,77 +0,0 @@
-from math import sqrt, ceil
-
-# is x anagram of y?
-def anagram(x, y):
- x2 = [c for c in x]
- y2 = [c for c in y]
- x2.sort()
- y2.sort()
- return x2 == y2
-
-
-# returns replacement list
-def replacement(word, number):
- digits = [False] * 10
- for char in word[::-1]:
- digit = number % 10
- number /= 10
-
- if char in digits and digits[digit] != char:
- return None
-
- if digits[digit] == False:
- digits[digit] = char
- elif digits[digit] != char:
- return None
- return digits
-
-
-# find numbers matching the specified word in descending order
-def match(word, numbers):
- result = []
- for n in numbers:
- digits = replacement(word, n)
- if digits != None:
- result.append(n)
-
- result.sort(reverse=True)
- return result
-
-
-f = open('098.txt', 'r')
-words = f.read()
-f.close()
-
-maxlen = 14
-
-words = set([ w.strip('"') for w in words.split(',') ])
-squares = [ [ x*x for x in xrange(int(ceil(sqrt(10**n)))-1, int(ceil(sqrt(10**(n-1))))-1, -1) ] for n in xrange(1, maxlen+1) ]
-
-maxsquare = 0
-
-for l in xrange(1, maxlen+1):
- cur = [ w for w in words if len(w) == l ]
-
- for word1 in cur:
- for word2 in cur:
- if word1 == word2 or word1 == word2[::-1] or not anagram(word1, word2):
- continue
-
- m1 = match(word1, squares[l-1])
- m2 = match(word2, squares[l-1])
-
- # compare result lists
- for n1 in m1:
- found = False
- for n2 in m2:
- if replacement(word1, n1) == replacement(word2, n2):
- #print word1, word2, n1, n2
- if n1 > maxsquare:
- maxsquare = n1
- found = True
- break
- if found:
- break
-
-print maxsquare
-
diff --git a/src/projecteuler/098.txt b/src/projecteuler/098.txt
deleted file mode 100644
index 7177624..0000000
--- a/src/projecteuler/098.txt
+++ /dev/null
@@ -1 +0,0 @@
-"A","ABILITY","ABLE","ABOUT","ABOVE","ABSENCE","ABSOLUTELY","ACADEMIC","ACCEPT","ACCESS","ACCIDENT","ACCOMPANY","ACCORDING","ACCOUNT","ACHIEVE","ACHIEVEMENT","ACID","ACQUIRE","ACROSS","ACT","ACTION","ACTIVE","ACTIVITY","ACTUAL","ACTUALLY","ADD","ADDITION","ADDITIONAL","ADDRESS","ADMINISTRATION","ADMIT","ADOPT","ADULT","ADVANCE","ADVANTAGE","ADVICE","ADVISE","AFFAIR","AFFECT","AFFORD","AFRAID","AFTER","AFTERNOON","AFTERWARDS","AGAIN","AGAINST","AGE","AGENCY","AGENT","AGO","AGREE","AGREEMENT","AHEAD","AID","AIM","AIR","AIRCRAFT","ALL","ALLOW","ALMOST","ALONE","ALONG","ALREADY","ALRIGHT","ALSO","ALTERNATIVE","ALTHOUGH","ALWAYS","AMONG","AMONGST","AMOUNT","AN","ANALYSIS","ANCIENT","AND","ANIMAL","ANNOUNCE","ANNUAL","ANOTHER","ANSWER","ANY","ANYBODY","ANYONE","ANYTHING","ANYWAY","APART","APPARENT","APPARENTLY","APPEAL","APPEAR","APPEARANCE","APPLICATION","APPLY","APPOINT","APPOINTMENT","APPROACH","APPROPRIATE","APPROVE","AREA","ARGUE","ARGUMENT","ARISE","ARM","ARMY","AROUND","ARRANGE","ARRANGEMENT","ARRIVE","ART","ARTICLE","ARTIST","AS","ASK","ASPECT","ASSEMBLY","ASSESS","ASSESSMENT","ASSET","ASSOCIATE","ASSOCIATION","ASSUME","ASSUMPTION","AT","ATMOSPHERE","ATTACH","ATTACK","ATTEMPT","ATTEND","ATTENTION","ATTITUDE","ATTRACT","ATTRACTIVE","AUDIENCE","AUTHOR","AUTHORITY","AVAILABLE","AVERAGE","AVOID","AWARD","AWARE","AWAY","AYE","BABY","BACK","BACKGROUND","BAD","BAG","BALANCE","BALL","BAND","BANK","BAR","BASE","BASIC","BASIS","BATTLE","BE","BEAR","BEAT","BEAUTIFUL","BECAUSE","BECOME","BED","BEDROOM","BEFORE","BEGIN","BEGINNING","BEHAVIOUR","BEHIND","BELIEF","BELIEVE","BELONG","BELOW","BENEATH","BENEFIT","BESIDE","BEST","BETTER","BETWEEN","BEYOND","BIG","BILL","BIND","BIRD","BIRTH","BIT","BLACK","BLOCK","BLOOD","BLOODY","BLOW","BLUE","BOARD","BOAT","BODY","BONE","BOOK","BORDER","BOTH","BOTTLE","BOTTOM","BOX","BOY","BRAIN","BRANCH","BREAK","BREATH","BRIDGE","BRIEF","BRIGHT","BRING","BROAD","BROTHER","BUDGET","BUILD","BUILDING","BURN","BUS","BUSINESS","BUSY","BUT","BUY","BY","CABINET","CALL","CAMPAIGN","CAN","CANDIDATE","CAPABLE","CAPACITY","CAPITAL","CAR","CARD","CARE","CAREER","CAREFUL","CAREFULLY","CARRY","CASE","CASH","CAT","CATCH","CATEGORY","CAUSE","CELL","CENTRAL","CENTRE","CENTURY","CERTAIN","CERTAINLY","CHAIN","CHAIR","CHAIRMAN","CHALLENGE","CHANCE","CHANGE","CHANNEL","CHAPTER","CHARACTER","CHARACTERISTIC","CHARGE","CHEAP","CHECK","CHEMICAL","CHIEF","CHILD","CHOICE","CHOOSE","CHURCH","CIRCLE","CIRCUMSTANCE","CITIZEN","CITY","CIVIL","CLAIM","CLASS","CLEAN","CLEAR","CLEARLY","CLIENT","CLIMB","CLOSE","CLOSELY","CLOTHES","CLUB","COAL","CODE","COFFEE","COLD","COLLEAGUE","COLLECT","COLLECTION","COLLEGE","COLOUR","COMBINATION","COMBINE","COME","COMMENT","COMMERCIAL","COMMISSION","COMMIT","COMMITMENT","COMMITTEE","COMMON","COMMUNICATION","COMMUNITY","COMPANY","COMPARE","COMPARISON","COMPETITION","COMPLETE","COMPLETELY","COMPLEX","COMPONENT","COMPUTER","CONCENTRATE","CONCENTRATION","CONCEPT","CONCERN","CONCERNED","CONCLUDE","CONCLUSION","CONDITION","CONDUCT","CONFERENCE","CONFIDENCE","CONFIRM","CONFLICT","CONGRESS","CONNECT","CONNECTION","CONSEQUENCE","CONSERVATIVE","CONSIDER","CONSIDERABLE","CONSIDERATION","CONSIST","CONSTANT","CONSTRUCTION","CONSUMER","CONTACT","CONTAIN","CONTENT","CONTEXT","CONTINUE","CONTRACT","CONTRAST","CONTRIBUTE","CONTRIBUTION","CONTROL","CONVENTION","CONVERSATION","COPY","CORNER","CORPORATE","CORRECT","COS","COST","COULD","COUNCIL","COUNT","COUNTRY","COUNTY","COUPLE","COURSE","COURT","COVER","CREATE","CREATION","CREDIT","CRIME","CRIMINAL","CRISIS","CRITERION","CRITICAL","CRITICISM","CROSS","CROWD","CRY","CULTURAL","CULTURE","CUP","CURRENT","CURRENTLY","CURRICULUM","CUSTOMER","CUT","DAMAGE","DANGER","DANGEROUS","DARK","DATA","DATE","DAUGHTER","DAY","DEAD","DEAL","DEATH","DEBATE","DEBT","DECADE","DECIDE","DECISION","DECLARE","DEEP","DEFENCE","DEFENDANT","DEFINE","DEFINITION","DEGREE","DELIVER","DEMAND","DEMOCRATIC","DEMONSTRATE","DENY","DEPARTMENT","DEPEND","DEPUTY","DERIVE","DESCRIBE","DESCRIPTION","DESIGN","DESIRE","DESK","DESPITE","DESTROY","DETAIL","DETAILED","DETERMINE","DEVELOP","DEVELOPMENT","DEVICE","DIE","DIFFERENCE","DIFFERENT","DIFFICULT","DIFFICULTY","DINNER","DIRECT","DIRECTION","DIRECTLY","DIRECTOR","DISAPPEAR","DISCIPLINE","DISCOVER","DISCUSS","DISCUSSION","DISEASE","DISPLAY","DISTANCE","DISTINCTION","DISTRIBUTION","DISTRICT","DIVIDE","DIVISION","DO","DOCTOR","DOCUMENT","DOG","DOMESTIC","DOOR","DOUBLE","DOUBT","DOWN","DRAW","DRAWING","DREAM","DRESS","DRINK","DRIVE","DRIVER","DROP","DRUG","DRY","DUE","DURING","DUTY","EACH","EAR","EARLY","EARN","EARTH","EASILY","EAST","EASY","EAT","ECONOMIC","ECONOMY","EDGE","EDITOR","EDUCATION","EDUCATIONAL","EFFECT","EFFECTIVE","EFFECTIVELY","EFFORT","EGG","EITHER","ELDERLY","ELECTION","ELEMENT","ELSE","ELSEWHERE","EMERGE","EMPHASIS","EMPLOY","EMPLOYEE","EMPLOYER","EMPLOYMENT","EMPTY","ENABLE","ENCOURAGE","END","ENEMY","ENERGY","ENGINE","ENGINEERING","ENJOY","ENOUGH","ENSURE","ENTER","ENTERPRISE","ENTIRE","ENTIRELY","ENTITLE","ENTRY","ENVIRONMENT","ENVIRONMENTAL","EQUAL","EQUALLY","EQUIPMENT","ERROR","ESCAPE","ESPECIALLY","ESSENTIAL","ESTABLISH","ESTABLISHMENT","ESTATE","ESTIMATE","EVEN","EVENING","EVENT","EVENTUALLY","EVER","EVERY","EVERYBODY","EVERYONE","EVERYTHING","EVIDENCE","EXACTLY","EXAMINATION","EXAMINE","EXAMPLE","EXCELLENT","EXCEPT","EXCHANGE","EXECUTIVE","EXERCISE","EXHIBITION","EXIST","EXISTENCE","EXISTING","EXPECT","EXPECTATION","EXPENDITURE","EXPENSE","EXPENSIVE","EXPERIENCE","EXPERIMENT","EXPERT","EXPLAIN","EXPLANATION","EXPLORE","EXPRESS","EXPRESSION","EXTEND","EXTENT","EXTERNAL","EXTRA","EXTREMELY","EYE","FACE","FACILITY","FACT","FACTOR","FACTORY","FAIL","FAILURE","FAIR","FAIRLY","FAITH","FALL","FAMILIAR","FAMILY","FAMOUS","FAR","FARM","FARMER","FASHION","FAST","FATHER","FAVOUR","FEAR","FEATURE","FEE","FEEL","FEELING","FEMALE","FEW","FIELD","FIGHT","FIGURE","FILE","FILL","FILM","FINAL","FINALLY","FINANCE","FINANCIAL","FIND","FINDING","FINE","FINGER","FINISH","FIRE","FIRM","FIRST","FISH","FIT","FIX","FLAT","FLIGHT","FLOOR","FLOW","FLOWER","FLY","FOCUS","FOLLOW","FOLLOWING","FOOD","FOOT","FOOTBALL","FOR","FORCE","FOREIGN","FOREST","FORGET","FORM","FORMAL","FORMER","FORWARD","FOUNDATION","FREE","FREEDOM","FREQUENTLY","FRESH","FRIEND","FROM","FRONT","FRUIT","FUEL","FULL","FULLY","FUNCTION","FUND","FUNNY","FURTHER","FUTURE","GAIN","GAME","GARDEN","GAS","GATE","GATHER","GENERAL","GENERALLY","GENERATE","GENERATION","GENTLEMAN","GET","GIRL","GIVE","GLASS","GO","GOAL","GOD","GOLD","GOOD","GOVERNMENT","GRANT","GREAT","GREEN","GREY","GROUND","GROUP","GROW","GROWING","GROWTH","GUEST","GUIDE","GUN","HAIR","HALF","HALL","HAND","HANDLE","HANG","HAPPEN","HAPPY","HARD","HARDLY","HATE","HAVE","HE","HEAD","HEALTH","HEAR","HEART","HEAT","HEAVY","HELL","HELP","HENCE","HER","HERE","HERSELF","HIDE","HIGH","HIGHLY","HILL","HIM","HIMSELF","HIS","HISTORICAL","HISTORY","HIT","HOLD","HOLE","HOLIDAY","HOME","HOPE","HORSE","HOSPITAL","HOT","HOTEL","HOUR","HOUSE","HOUSEHOLD","HOUSING","HOW","HOWEVER","HUGE","HUMAN","HURT","HUSBAND","I","IDEA","IDENTIFY","IF","IGNORE","ILLUSTRATE","IMAGE","IMAGINE","IMMEDIATE","IMMEDIATELY","IMPACT","IMPLICATION","IMPLY","IMPORTANCE","IMPORTANT","IMPOSE","IMPOSSIBLE","IMPRESSION","IMPROVE","IMPROVEMENT","IN","INCIDENT","INCLUDE","INCLUDING","INCOME","INCREASE","INCREASED","INCREASINGLY","INDEED","INDEPENDENT","INDEX","INDICATE","INDIVIDUAL","INDUSTRIAL","INDUSTRY","INFLUENCE","INFORM","INFORMATION","INITIAL","INITIATIVE","INJURY","INSIDE","INSIST","INSTANCE","INSTEAD","INSTITUTE","INSTITUTION","INSTRUCTION","INSTRUMENT","INSURANCE","INTEND","INTENTION","INTEREST","INTERESTED","INTERESTING","INTERNAL","INTERNATIONAL","INTERPRETATION","INTERVIEW","INTO","INTRODUCE","INTRODUCTION","INVESTIGATE","INVESTIGATION","INVESTMENT","INVITE","INVOLVE","IRON","IS","ISLAND","ISSUE","IT","ITEM","ITS","ITSELF","JOB","JOIN","JOINT","JOURNEY","JUDGE","JUMP","JUST","JUSTICE","KEEP","KEY","KID","KILL","KIND","KING","KITCHEN","KNEE","KNOW","KNOWLEDGE","LABOUR","LACK","LADY","LAND","LANGUAGE","LARGE","LARGELY","LAST","LATE","LATER","LATTER","LAUGH","LAUNCH","LAW","LAWYER","LAY","LEAD","LEADER","LEADERSHIP","LEADING","LEAF","LEAGUE","LEAN","LEARN","LEAST","LEAVE","LEFT","LEG","LEGAL","LEGISLATION","LENGTH","LESS","LET","LETTER","LEVEL","LIABILITY","LIBERAL","LIBRARY","LIE","LIFE","LIFT","LIGHT","LIKE","LIKELY","LIMIT","LIMITED","LINE","LINK","LIP","LIST","LISTEN","LITERATURE","LITTLE","LIVE","LIVING","LOAN","LOCAL","LOCATION","LONG","LOOK","LORD","LOSE","LOSS","LOT","LOVE","LOVELY","LOW","LUNCH","MACHINE","MAGAZINE","MAIN","MAINLY","MAINTAIN","MAJOR","MAJORITY","MAKE","MALE","MAN","MANAGE","MANAGEMENT","MANAGER","MANNER","MANY","MAP","MARK","MARKET","MARRIAGE","MARRIED","MARRY","MASS","MASTER","MATCH","MATERIAL","MATTER","MAY","MAYBE","ME","MEAL","MEAN","MEANING","MEANS","MEANWHILE","MEASURE","MECHANISM","MEDIA","MEDICAL","MEET","MEETING","MEMBER","MEMBERSHIP","MEMORY","MENTAL","MENTION","MERELY","MESSAGE","METAL","METHOD","MIDDLE","MIGHT","MILE","MILITARY","MILK","MIND","MINE","MINISTER","MINISTRY","MINUTE","MISS","MISTAKE","MODEL","MODERN","MODULE","MOMENT","MONEY","MONTH","MORE","MORNING","MOST","MOTHER","MOTION","MOTOR","MOUNTAIN","MOUTH","MOVE","MOVEMENT","MUCH","MURDER","MUSEUM","MUSIC","MUST","MY","MYSELF","NAME","NARROW","NATION","NATIONAL","NATURAL","NATURE","NEAR","NEARLY","NECESSARILY","NECESSARY","NECK","NEED","NEGOTIATION","NEIGHBOUR","NEITHER","NETWORK","NEVER","NEVERTHELESS","NEW","NEWS","NEWSPAPER","NEXT","NICE","NIGHT","NO","NOBODY","NOD","NOISE","NONE","NOR","NORMAL","NORMALLY","NORTH","NORTHERN","NOSE","NOT","NOTE","NOTHING","NOTICE","NOTION","NOW","NUCLEAR","NUMBER","NURSE","OBJECT","OBJECTIVE","OBSERVATION","OBSERVE","OBTAIN","OBVIOUS","OBVIOUSLY","OCCASION","OCCUR","ODD","OF","OFF","OFFENCE","OFFER","OFFICE","OFFICER","OFFICIAL","OFTEN","OIL","OKAY","OLD","ON","ONCE","ONE","ONLY","ONTO","OPEN","OPERATE","OPERATION","OPINION","OPPORTUNITY","OPPOSITION","OPTION","OR","ORDER","ORDINARY","ORGANISATION","ORGANISE","ORGANIZATION","ORIGIN","ORIGINAL","OTHER","OTHERWISE","OUGHT","OUR","OURSELVES","OUT","OUTCOME","OUTPUT","OUTSIDE","OVER","OVERALL","OWN","OWNER","PACKAGE","PAGE","PAIN","PAINT","PAINTING","PAIR","PANEL","PAPER","PARENT","PARK","PARLIAMENT","PART","PARTICULAR","PARTICULARLY","PARTLY","PARTNER","PARTY","PASS","PASSAGE","PAST","PATH","PATIENT","PATTERN","PAY","PAYMENT","PEACE","PENSION","PEOPLE","PER","PERCENT","PERFECT","PERFORM","PERFORMANCE","PERHAPS","PERIOD","PERMANENT","PERSON","PERSONAL","PERSUADE","PHASE","PHONE","PHOTOGRAPH","PHYSICAL","PICK","PICTURE","PIECE","PLACE","PLAN","PLANNING","PLANT","PLASTIC","PLATE","PLAY","PLAYER","PLEASE","PLEASURE","PLENTY","PLUS","POCKET","POINT","POLICE","POLICY","POLITICAL","POLITICS","POOL","POOR","POPULAR","POPULATION","POSITION","POSITIVE","POSSIBILITY","POSSIBLE","POSSIBLY","POST","POTENTIAL","POUND","POWER","POWERFUL","PRACTICAL","PRACTICE","PREFER","PREPARE","PRESENCE","PRESENT","PRESIDENT","PRESS","PRESSURE","PRETTY","PREVENT","PREVIOUS","PREVIOUSLY","PRICE","PRIMARY","PRIME","PRINCIPLE","PRIORITY","PRISON","PRISONER","PRIVATE","PROBABLY","PROBLEM","PROCEDURE","PROCESS","PRODUCE","PRODUCT","PRODUCTION","PROFESSIONAL","PROFIT","PROGRAM","PROGRAMME","PROGRESS","PROJECT","PROMISE","PROMOTE","PROPER","PROPERLY","PROPERTY","PROPORTION","PROPOSE","PROPOSAL","PROSPECT","PROTECT","PROTECTION","PROVE","PROVIDE","PROVIDED","PROVISION","PUB","PUBLIC","PUBLICATION","PUBLISH","PULL","PUPIL","PURPOSE","PUSH","PUT","QUALITY","QUARTER","QUESTION","QUICK","QUICKLY","QUIET","QUITE","RACE","RADIO","RAILWAY","RAIN","RAISE","RANGE","RAPIDLY","RARE","RATE","RATHER","REACH","REACTION","READ","READER","READING","READY","REAL","REALISE","REALITY","REALIZE","REALLY","REASON","REASONABLE","RECALL","RECEIVE","RECENT","RECENTLY","RECOGNISE","RECOGNITION","RECOGNIZE","RECOMMEND","RECORD","RECOVER","RED","REDUCE","REDUCTION","REFER","REFERENCE","REFLECT","REFORM","REFUSE","REGARD","REGION","REGIONAL","REGULAR","REGULATION","REJECT","RELATE","RELATION","RELATIONSHIP","RELATIVE","RELATIVELY","RELEASE","RELEVANT","RELIEF","RELIGION","RELIGIOUS","RELY","REMAIN","REMEMBER","REMIND","REMOVE","REPEAT","REPLACE","REPLY","REPORT","REPRESENT","REPRESENTATION","REPRESENTATIVE","REQUEST","REQUIRE","REQUIREMENT","RESEARCH","RESOURCE","RESPECT","RESPOND","RESPONSE","RESPONSIBILITY","RESPONSIBLE","REST","RESTAURANT","RESULT","RETAIN","RETURN","REVEAL","REVENUE","REVIEW","REVOLUTION","RICH","RIDE","RIGHT","RING","RISE","RISK","RIVER","ROAD","ROCK","ROLE","ROLL","ROOF","ROOM","ROUND","ROUTE","ROW","ROYAL","RULE","RUN","RURAL","SAFE","SAFETY","SALE","SAME","SAMPLE","SATISFY","SAVE","SAY","SCALE","SCENE","SCHEME","SCHOOL","SCIENCE","SCIENTIFIC","SCIENTIST","SCORE","SCREEN","SEA","SEARCH","SEASON","SEAT","SECOND","SECONDARY","SECRETARY","SECTION","SECTOR","SECURE","SECURITY","SEE","SEEK","SEEM","SELECT","SELECTION","SELL","SEND","SENIOR","SENSE","SENTENCE","SEPARATE","SEQUENCE","SERIES","SERIOUS","SERIOUSLY","SERVANT","SERVE","SERVICE","SESSION","SET","SETTLE","SETTLEMENT","SEVERAL","SEVERE","SEX","SEXUAL","SHAKE","SHALL","SHAPE","SHARE","SHE","SHEET","SHIP","SHOE","SHOOT","SHOP","SHORT","SHOT","SHOULD","SHOULDER","SHOUT","SHOW","SHUT","SIDE","SIGHT","SIGN","SIGNAL","SIGNIFICANCE","SIGNIFICANT","SILENCE","SIMILAR","SIMPLE","SIMPLY","SINCE","SING","SINGLE","SIR","SISTER","SIT","SITE","SITUATION","SIZE","SKILL","SKIN","SKY","SLEEP","SLIGHTLY","SLIP","SLOW","SLOWLY","SMALL","SMILE","SO","SOCIAL","SOCIETY","SOFT","SOFTWARE","SOIL","SOLDIER","SOLICITOR","SOLUTION","SOME","SOMEBODY","SOMEONE","SOMETHING","SOMETIMES","SOMEWHAT","SOMEWHERE","SON","SONG","SOON","SORRY","SORT","SOUND","SOURCE","SOUTH","SOUTHERN","SPACE","SPEAK","SPEAKER","SPECIAL","SPECIES","SPECIFIC","SPEECH","SPEED","SPEND","SPIRIT","SPORT","SPOT","SPREAD","SPRING","STAFF","STAGE","STAND","STANDARD","STAR","START","STATE","STATEMENT","STATION","STATUS","STAY","STEAL","STEP","STICK","STILL","STOCK","STONE","STOP","STORE","STORY","STRAIGHT","STRANGE","STRATEGY","STREET","STRENGTH","STRIKE","STRONG","STRONGLY","STRUCTURE","STUDENT","STUDIO","STUDY","STUFF","STYLE","SUBJECT","SUBSTANTIAL","SUCCEED","SUCCESS","SUCCESSFUL","SUCH","SUDDENLY","SUFFER","SUFFICIENT","SUGGEST","SUGGESTION","SUITABLE","SUM","SUMMER","SUN","SUPPLY","SUPPORT","SUPPOSE","SURE","SURELY","SURFACE","SURPRISE","SURROUND","SURVEY","SURVIVE","SWITCH","SYSTEM","TABLE","TAKE","TALK","TALL","TAPE","TARGET","TASK","TAX","TEA","TEACH","TEACHER","TEACHING","TEAM","TEAR","TECHNICAL","TECHNIQUE","TECHNOLOGY","TELEPHONE","TELEVISION","TELL","TEMPERATURE","TEND","TERM","TERMS","TERRIBLE","TEST","TEXT","THAN","THANK","THANKS","THAT","THE","THEATRE","THEIR","THEM","THEME","THEMSELVES","THEN","THEORY","THERE","THEREFORE","THESE","THEY","THIN","THING","THINK","THIS","THOSE","THOUGH","THOUGHT","THREAT","THREATEN","THROUGH","THROUGHOUT","THROW","THUS","TICKET","TIME","TINY","TITLE","TO","TODAY","TOGETHER","TOMORROW","TONE","TONIGHT","TOO","TOOL","TOOTH","TOP","TOTAL","TOTALLY","TOUCH","TOUR","TOWARDS","TOWN","TRACK","TRADE","TRADITION","TRADITIONAL","TRAFFIC","TRAIN","TRAINING","TRANSFER","TRANSPORT","TRAVEL","TREAT","TREATMENT","TREATY","TREE","TREND","TRIAL","TRIP","TROOP","TROUBLE","TRUE","TRUST","TRUTH","TRY","TURN","TWICE","TYPE","TYPICAL","UNABLE","UNDER","UNDERSTAND","UNDERSTANDING","UNDERTAKE","UNEMPLOYMENT","UNFORTUNATELY","UNION","UNIT","UNITED","UNIVERSITY","UNLESS","UNLIKELY","UNTIL","UP","UPON","UPPER","URBAN","US","USE","USED","USEFUL","USER","USUAL","USUALLY","VALUE","VARIATION","VARIETY","VARIOUS","VARY","VAST","VEHICLE","VERSION","VERY","VIA","VICTIM","VICTORY","VIDEO","VIEW","VILLAGE","VIOLENCE","VISION","VISIT","VISITOR","VITAL","VOICE","VOLUME","VOTE","WAGE","WAIT","WALK","WALL","WANT","WAR","WARM","WARN","WASH","WATCH","WATER","WAVE","WAY","WE","WEAK","WEAPON","WEAR","WEATHER","WEEK","WEEKEND","WEIGHT","WELCOME","WELFARE","WELL","WEST","WESTERN","WHAT","WHATEVER","WHEN","WHERE","WHEREAS","WHETHER","WHICH","WHILE","WHILST","WHITE","WHO","WHOLE","WHOM","WHOSE","WHY","WIDE","WIDELY","WIFE","WILD","WILL","WIN","WIND","WINDOW","WINE","WING","WINNER","WINTER","WISH","WITH","WITHDRAW","WITHIN","WITHOUT","WOMAN","WONDER","WONDERFUL","WOOD","WORD","WORK","WORKER","WORKING","WORKS","WORLD","WORRY","WORTH","WOULD","WRITE","WRITER","WRITING","WRONG","YARD","YEAH","YEAR","YES","YESTERDAY","YET","YOU","YOUNG","YOUR","YOURSELF","YOUTH" \ No newline at end of file
diff --git a/src/projecteuler/099.py b/src/projecteuler/099.py
deleted file mode 100644
index bc72d07..0000000
--- a/src/projecteuler/099.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import math
-
-numbers = []
-
-f = open('099.txt', 'r')
-for line in f:
- line.rstrip('\n')
- l = [int(x) for x in line.split(',')]
- numbers.append(l[1] * math.log(l[0])) # log(x^r) = r*log(x)
-f.close()
-
-maxline = 0
-maxn = 0
-
-for n in xrange(0, len(numbers)-1):
- if numbers[n] > maxn:
- maxn = numbers[n]
- maxline = n
-
-print maxline+1
-
diff --git a/src/projecteuler/099.txt b/src/projecteuler/099.txt
deleted file mode 100644
index 92201db..0000000
--- a/src/projecteuler/099.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
-519432,525806
-632382,518061
-78864,613712
-466580,530130
-780495,510032
-525895,525320
-15991,714883
-960290,502358
-760018,511029
-166800,575487
-210884,564478
-555151,523163
-681146,515199
-563395,522587
-738250,512126
-923525,503780
-595148,520429
-177108,572629
-750923,511482
-440902,532446
-881418,505504
-422489,534197
-979858,501616
-685893,514935
-747477,511661
-167214,575367
-234140,559696
-940238,503122
-728969,512609
-232083,560102
-900971,504694
-688801,514772
-189664,569402
-891022,505104
-445689,531996
-119570,591871
-821453,508118
-371084,539600
-911745,504251
-623655,518600
-144361,582486
-352442,541775
-420726,534367
-295298,549387
-6530,787777
-468397,529976
-672336,515696
-431861,533289
-84228,610150
-805376,508857
-444409,532117
-33833,663511
-381850,538396
-402931,536157
-92901,604930
-304825,548004
-731917,512452
-753734,511344
-51894,637373
-151578,580103
-295075,549421
-303590,548183
-333594,544123
-683952,515042
-60090,628880
-951420,502692
-28335,674991
-714940,513349
-343858,542826
-549279,523586
-804571,508887
-260653,554881
-291399,549966
-402342,536213
-408889,535550
-40328,652524
-375856,539061
-768907,510590
-165993,575715
-976327,501755
-898500,504795
-360404,540830
-478714,529095
-694144,514472
-488726,528258
-841380,507226
-328012,544839
-22389,690868
-604053,519852
-329514,544641
-772965,510390
-492798,527927
-30125,670983
-895603,504906
-450785,531539
-840237,507276
-380711,538522
-63577,625673
-76801,615157
-502694,527123
-597706,520257
-310484,547206
-944468,502959
-121283,591152
-451131,531507
-566499,522367
-425373,533918
-40240,652665
-39130,654392
-714926,513355
-469219,529903
-806929,508783
-287970,550487
-92189,605332
-103841,599094
-671839,515725
-452048,531421
-987837,501323
-935192,503321
-88585,607450
-613883,519216
-144551,582413
-647359,517155
-213902,563816
-184120,570789
-258126,555322
-502546,527130
-407655,535678
-401528,536306
-477490,529193
-841085,507237
-732831,512408
-833000,507595
-904694,504542
-581435,521348
-455545,531110
-873558,505829
-94916,603796
-720176,513068
-545034,523891
-246348,557409
-556452,523079
-832015,507634
-173663,573564
-502634,527125
-250732,556611
-569786,522139
-216919,563178
-521815,525623
-92304,605270
-164446,576167
-753413,511364
-11410,740712
-448845,531712
-925072,503725
-564888,522477
-7062,780812
-641155,517535
-738878,512100
-636204,517828
-372540,539436
-443162,532237
-571192,522042
-655350,516680
-299741,548735
-581914,521307
-965471,502156
-513441,526277
-808682,508700
-237589,559034
-543300,524025
-804712,508889
-247511,557192
-543486,524008
-504383,526992
-326529,545039
-792493,509458
-86033,609017
-126554,589005
-579379,521481
-948026,502823
-404777,535969
-265767,554022
-266876,553840
-46631,643714
-492397,527958
-856106,506581
-795757,509305
-748946,511584
-294694,549480
-409781,535463
-775887,510253
-543747,523991
-210592,564536
-517119,525990
-520253,525751
-247926,557124
-592141,520626
-346580,542492
-544969,523902
-506501,526817
-244520,557738
-144745,582349
-69274,620858
-292620,549784
-926027,503687
-736320,512225
-515528,526113
-407549,535688
-848089,506927
-24141,685711
-9224,757964
-980684,501586
-175259,573121
-489160,528216
-878970,505604
-969546,502002
-525207,525365
-690461,514675
-156510,578551
-659778,516426
-468739,529945
-765252,510770
-76703,615230
-165151,575959
-29779,671736
-928865,503569
-577538,521605
-927555,503618
-185377,570477
-974756,501809
-800130,509093
-217016,563153
-365709,540216
-774508,510320
-588716,520851
-631673,518104
-954076,502590
-777828,510161
-990659,501222
-597799,520254
-786905,509727
-512547,526348
-756449,511212
-869787,505988
-653747,516779
-84623,609900
-839698,507295
-30159,670909
-797275,509234
-678136,515373
-897144,504851
-989554,501263
-413292,535106
-55297,633667
-788650,509637
-486748,528417
-150724,580377
-56434,632490
-77207,614869
-588631,520859
-611619,519367
-100006,601055
-528924,525093
-190225,569257
-851155,506789
-682593,515114
-613043,519275
-514673,526183
-877634,505655
-878905,505602
-1926,914951
-613245,519259
-152481,579816
-841774,507203
-71060,619442
-865335,506175
-90244,606469
-302156,548388
-399059,536557
-478465,529113
-558601,522925
-69132,620966
-267663,553700
-988276,501310
-378354,538787
-529909,525014
-161733,576968
-758541,511109
-823425,508024
-149821,580667
-269258,553438
-481152,528891
-120871,591322
-972322,501901
-981350,501567
-676129,515483
-950860,502717
-119000,592114
-392252,537272
-191618,568919
-946699,502874
-289555,550247
-799322,509139
-703886,513942
-194812,568143
-261823,554685
-203052,566221
-217330,563093
-734748,512313
-391759,537328
-807052,508777
-564467,522510
-59186,629748
-113447,594545
-518063,525916
-905944,504492
-613922,519213
-439093,532607
-445946,531981
-230530,560399
-297887,549007
-459029,530797
-403692,536075
-855118,506616
-963127,502245
-841711,507208
-407411,535699
-924729,503735
-914823,504132
-333725,544101
-176345,572832
-912507,504225
-411273,535308
-259774,555036
-632853,518038
-119723,591801
-163902,576321
-22691,689944
-402427,536212
-175769,572988
-837260,507402
-603432,519893
-313679,546767
-538165,524394
-549026,523608
-61083,627945
-898345,504798
-992556,501153
-369999,539727
-32847,665404
-891292,505088
-152715,579732
-824104,507997
-234057,559711
-730507,512532
-960529,502340
-388395,537687
-958170,502437
-57105,631806
-186025,570311
-993043,501133
-576770,521664
-215319,563513
-927342,503628
-521353,525666
-39563,653705
-752516,511408
-110755,595770
-309749,547305
-374379,539224
-919184,503952
-990652,501226
-647780,517135
-187177,570017
-168938,574877
-649558,517023
-278126,552016
-162039,576868
-658512,516499
-498115,527486
-896583,504868
-561170,522740
-747772,511647
-775093,510294
-652081,516882
-724905,512824
-499707,527365
-47388,642755
-646668,517204
-571700,522007
-180430,571747
-710015,513617
-435522,532941
-98137,602041
-759176,511070
-486124,528467
-526942,525236
-878921,505604
-408313,535602
-926980,503640
-882353,505459
-566887,522345
-3326,853312
-911981,504248
-416309,534800
-392991,537199
-622829,518651
-148647,581055
-496483,527624
-666314,516044
-48562,641293
-672618,515684
-443676,532187
-274065,552661
-265386,554079
-347668,542358
-31816,667448
-181575,571446
-961289,502320
-365689,540214
-987950,501317
-932299,503440
-27388,677243
-746701,511701
-492258,527969
-147823,581323
-57918,630985
-838849,507333
-678038,515375
-27852,676130
-850241,506828
-818403,508253
-131717,587014
-850216,506834
-904848,504529
-189758,569380
-392845,537217
-470876,529761
-925353,503711
-285431,550877
-454098,531234
-823910,508003
-318493,546112
-766067,510730
-261277,554775
-421530,534289
-694130,514478
-120439,591498
-213308,563949
-854063,506662
-365255,540263
-165437,575872
-662240,516281
-289970,550181
-847977,506933
-546083,523816
-413252,535113
-975829,501767
-361540,540701
-235522,559435
-224643,561577
-736350,512229
-328303,544808
-35022,661330
-307838,547578
-474366,529458
-873755,505819
-73978,617220
-827387,507845
-670830,515791
-326511,545034
-309909,547285
-400970,536363
-884827,505352
-718307,513175
-28462,674699
-599384,520150
-253565,556111
-284009,551093
-343403,542876
-446557,531921
-992372,501160
-961601,502308
-696629,514342
-919537,503945
-894709,504944
-892201,505051
-358160,541097
-448503,531745
-832156,507636
-920045,503924
-926137,503675
-416754,534757
-254422,555966
-92498,605151
-826833,507873
-660716,516371
-689335,514746
-160045,577467
-814642,508425
-969939,501993
-242856,558047
-76302,615517
-472083,529653
-587101,520964
-99066,601543
-498005,527503
-709800,513624
-708000,513716
-20171,698134
-285020,550936
-266564,553891
-981563,501557
-846502,506991
-334,1190800
-209268,564829
-9844,752610
-996519,501007
-410059,535426
-432931,533188
-848012,506929
-966803,502110
-983434,501486
-160700,577267
-504374,526989
-832061,507640
-392825,537214
-443842,532165
-440352,532492
-745125,511776
-13718,726392
-661753,516312
-70500,619875
-436952,532814
-424724,533973
-21954,692224
-262490,554567
-716622,513264
-907584,504425
-60086,628882
-837123,507412
-971345,501940
-947162,502855
-139920,584021
-68330,621624
-666452,516038
-731446,512481
-953350,502619
-183157,571042
-845400,507045
-651548,516910
-20399,697344
-861779,506331
-629771,518229
-801706,509026
-189207,569512
-737501,512168
-719272,513115
-479285,529045
-136046,585401
-896746,504860
-891735,505067
-684771,514999
-865309,506184
-379066,538702
-503117,527090
-621780,518717
-209518,564775
-677135,515423
-987500,501340
-197049,567613
-329315,544673
-236756,559196
-357092,541226
-520440,525733
-213471,563911
-956852,502490
-702223,514032
-404943,535955
-178880,572152
-689477,514734
-691351,514630
-866669,506128
-370561,539656
-739805,512051
-71060,619441
-624861,518534
-261660,554714
-366137,540160
-166054,575698
-601878,519990
-153445,579501
-279899,551729
-379166,538691
-423209,534125
-675310,515526
-145641,582050
-691353,514627
-917468,504026
-284778,550976
-81040,612235
-161699,576978
-616394,519057
-767490,510661
-156896,578431
-427408,533714
-254849,555884
-737217,512182
-897133,504851
-203815,566051
-270822,553189
-135854,585475
-778805,510111
-784373,509847
-305426,547921
-733418,512375
-732087,512448
-540668,524215
-702898,513996
-628057,518328
-640280,517587
-422405,534204
-10604,746569
-746038,511733
-839808,507293
-457417,530938
-479030,529064
-341758,543090
-620223,518824
-251661,556451
-561790,522696
-497733,527521
-724201,512863
-489217,528217
-415623,534867
-624610,518548
-847541,506953
-432295,533249
-400391,536421
-961158,502319
-139173,584284
-421225,534315
-579083,521501
-74274,617000
-701142,514087
-374465,539219
-217814,562985
-358972,540995
-88629,607424
-288597,550389
-285819,550812
-538400,524385
-809930,508645
-738326,512126
-955461,502535
-163829,576343
-826475,507891
-376488,538987
-102234,599905
-114650,594002
-52815,636341
-434037,533082
-804744,508880
-98385,601905
-856620,506559
-220057,562517
-844734,507078
-150677,580387
-558697,522917
-621751,518719
-207067,565321
-135297,585677
-932968,503404
-604456,519822
-579728,521462
-244138,557813
-706487,513800
-711627,513523
-853833,506674
-497220,527562
-59428,629511
-564845,522486
-623621,518603
-242689,558077
-125091,589591
-363819,540432
-686453,514901
-656813,516594
-489901,528155
-386380,537905
-542819,524052
-243987,557841
-693412,514514
-488484,528271
-896331,504881
-336730,543721
-728298,512647
-604215,519840
-153729,579413
-595687,520398
-540360,524240
-245779,557511
-924873,503730
-509628,526577
-528523,525122
-3509,847707
-522756,525555
-895447,504922
-44840,646067
-45860,644715
-463487,530404
-398164,536654
-894483,504959
-619415,518874
-966306,502129
-990922,501212
-835756,507474
-548881,523618
-453578,531282
-474993,529410
-80085,612879
-737091,512193
-50789,638638
-979768,501620
-792018,509483
-665001,516122
-86552,608694
-462772,530469
-589233,520821
-891694,505072
-592605,520594
-209645,564741
-42531,649269
-554376,523226
-803814,508929
-334157,544042
-175836,572970
-868379,506051
-658166,516520
-278203,551995
-966198,502126
-627162,518387
-296774,549165
-311803,547027
-843797,507118
-702304,514032
-563875,522553
-33103,664910
-191932,568841
-543514,524006
-506835,526794
-868368,506052
-847025,506971
-678623,515342
-876139,505726
-571997,521984
-598632,520198
-213590,563892
-625404,518497
-726508,512738
-689426,514738
-332495,544264
-411366,535302
-242546,558110
-315209,546555
-797544,509219
-93889,604371
-858879,506454
-124906,589666
-449072,531693
-235960,559345
-642403,517454
-720567,513047
-705534,513858
-603692,519870
-488137,528302
-157370,578285
-63515,625730
-666326,516041
-619226,518883
-443613,532186
-597717,520257
-96225,603069
-86940,608450
-40725,651929
-460976,530625
-268875,553508
-270671,553214
-363254,540500
-384248,538137
-762889,510892
-377941,538833
-278878,551890
-176615,572755
-860008,506412
-944392,502967
-608395,519571
-225283,561450
-45095,645728
-333798,544090
-625733,518476
-995584,501037
-506135,526853
-238050,558952
-557943,522972
-530978,524938
-634244,517949
-177168,572616
-85200,609541
-953043,502630
-523661,525484
-999295,500902
-840803,507246
-961490,502312
-471747,529685
-380705,538523
-911180,504275
-334149,544046
-478992,529065
-325789,545133
-335884,543826
-426976,533760
-749007,511582
-667067,516000
-607586,519623
-674054,515599
-188534,569675
-565185,522464
-172090,573988
-87592,608052
-907432,504424
-8912,760841
-928318,503590
-757917,511138
-718693,513153
-315141,546566
-728326,512645
-353492,541647
-638429,517695
-628892,518280
-877286,505672
-620895,518778
-385878,537959
-423311,534113
-633501,517997
-884833,505360
-883402,505416
-999665,500894
-708395,513697
-548142,523667
-756491,511205
-987352,501340
-766520,510705
-591775,520647
-833758,507563
-843890,507108
-925551,503698
-74816,616598
-646942,517187
-354923,541481
-256291,555638
-634470,517942
-930904,503494
-134221,586071
-282663,551304
-986070,501394
-123636,590176
-123678,590164
-481717,528841
-423076,534137
-866246,506145
-93313,604697
-783632,509880
-317066,546304
-502977,527103
-141272,583545
-71708,618938
-617748,518975
-581190,521362
-193824,568382
-682368,515131
-352956,541712
-351375,541905
-505362,526909
-905165,504518
-128645,588188
-267143,553787
-158409,577965
-482776,528754
-628896,518282
-485233,528547
-563606,522574
-111001,595655
-115920,593445
-365510,540237
-959724,502374
-938763,503184
-930044,503520
-970959,501956
-913658,504176
-68117,621790
-989729,501253
-567697,522288
-820427,508163
-54236,634794
-291557,549938
-124961,589646
-403177,536130
-405421,535899
-410233,535417
-815111,508403
-213176,563974
-83099,610879
-998588,500934
-513640,526263
-129817,587733
-1820,921851
-287584,550539
-299160,548820
-860621,506386
-529258,525059
-586297,521017
-953406,502616
-441234,532410
-986217,501386
-781938,509957
-461247,530595
-735424,512277
-146623,581722
-839838,507288
-510667,526494
-935085,503327
-737523,512167
-303455,548204
-992779,501145
-60240,628739
-939095,503174
-794368,509370
-501825,527189
-459028,530798
-884641,505363
-512287,526364
-835165,507499
-307723,547590
-160587,577304
-735043,512300
-493289,527887
-110717,595785
-306480,547772
-318593,546089
-179810,571911
-200531,566799
-314999,546580
-197020,567622
-301465,548487
-237808,559000
-131944,586923
-882527,505449
-468117,530003
-711319,513541
-156240,578628
-965452,502162
-992756,501148
-437959,532715
-739938,512046
-614249,519196
-391496,537356
-62746,626418
-688215,514806
-75501,616091
-883573,505412
-558824,522910
-759371,511061
-173913,573489
-891351,505089
-727464,512693
-164833,576051
-812317,508529
-540320,524243
-698061,514257
-69149,620952
-471673,529694
-159092,577753
-428134,533653
-89997,606608
-711061,513557
-779403,510081
-203327,566155
-798176,509187
-667688,515963
-636120,517833
-137410,584913
-217615,563034
-556887,523038
-667229,515991
-672276,515708
-325361,545187
-172115,573985
-13846,725685 \ No newline at end of file
diff --git a/src/projecteuler/102.py b/src/projecteuler/102.py
deleted file mode 100644
index a2108f6..0000000
--- a/src/projecteuler/102.py
+++ /dev/null
@@ -1,43 +0,0 @@
-
-# check if r*(AC) + s*(AB) == P
-
-def point_in_triangle((x_a, y_a), (x_b, y_b), (x_c, y_c), (x_p, y_p)):
- t = x_c - x_a
- u = x_b - x_a
- v = y_c - y_a
- w = y_b - y_a
-
- # Cramer's rule
- detA = t*w - u*v
- detR = x_p*w - u*y_p
- detS = t*y_p - x_p*v
-
- if detA == 0:
- print "Not solvable"
-
- r = detR / float(detA)
- s = detS / float(detA)
-
- return 0 <= r <= 1 and 0 <= s <= 1 and r + s < 1
-
-
-count = 0
-
-f = open('102.txt', 'r')
-for line in f:
- line = line.rstrip('\r\n')
- coords = [ int(x) for x in line.split(',') ]
-
- # move one point to origin, adjust other points
- (a1, a2) = (coords[0], coords[1])
- A = (0, 0)
- B = (coords[2]-a1, coords[3]-a2)
- C = (coords[4]-a1, coords[5]-a2)
- P = (-a1, -a2)
-
- if point_in_triangle(A, B, C, P):
- count += 1
-f.close()
-
-print count
-
diff --git a/src/projecteuler/102.txt b/src/projecteuler/102.txt
deleted file mode 100644
index d43312a..0000000
--- a/src/projecteuler/102.txt
+++ /dev/null
@@ -1,1000 +0,0 @@
--340,495,-153,-910,835,-947
--175,41,-421,-714,574,-645
--547,712,-352,579,951,-786
-419,-864,-83,650,-399,171
--429,-89,-357,-930,296,-29
--734,-702,823,-745,-684,-62
--971,762,925,-776,-663,-157
-162,570,628,485,-807,-896
-641,91,-65,700,887,759
-215,-496,46,-931,422,-30
--119,359,668,-609,-358,-494
-440,929,968,214,760,-857
--700,785,838,29,-216,411
--770,-458,-325,-53,-505,633
--752,-805,349,776,-799,687
-323,5,561,-36,919,-560
--907,358,264,320,204,274
--728,-466,350,969,292,-345
-940,836,272,-533,748,185
-411,998,813,520,316,-949
--152,326,658,-762,148,-651
-330,507,-9,-628,101,174
-551,-496,772,-541,-702,-45
--164,-489,-90,322,631,-59
-673,366,-4,-143,-606,-704
-428,-609,801,-449,740,-269
-453,-924,-785,-346,-853,111
--738,555,-181,467,-426,-20
-958,-692,784,-343,505,-569
-620,27,263,54,-439,-726
-804,87,998,859,871,-78
--119,-453,-709,-292,-115,-56
--626,138,-940,-476,-177,-274
--11,160,142,588,446,158
-538,727,550,787,330,810
-420,-689,854,-546,337,516
-872,-998,-607,748,473,-192
-653,440,-516,-985,808,-857
-374,-158,331,-940,-338,-641
-137,-925,-179,771,734,-715
--314,198,-115,29,-641,-39
-759,-574,-385,355,590,-603
--189,-63,-168,204,289,305
--182,-524,-715,-621,911,-255
-331,-816,-833,471,168,126
--514,581,-855,-220,-731,-507
-129,169,576,651,-87,-458
-783,-444,-881,658,-266,298
-603,-430,-598,585,368,899
-43,-724,962,-376,851,409
--610,-646,-883,-261,-482,-881
--117,-237,978,641,101,-747
-579,125,-715,-712,208,534
-672,-214,-762,372,874,533
--564,965,38,715,367,242
-500,951,-700,-981,-61,-178
--382,-224,-959,903,-282,-60
--355,295,426,-331,-591,655
-892,128,958,-271,-993,274
--454,-619,302,138,-790,-874
--642,601,-574,159,-290,-318
-266,-109,257,-686,54,975
-162,628,-478,840,264,-266
-466,-280,982,1,904,-810
-721,839,730,-807,777,981
--129,-430,748,263,943,96
-434,-94,410,-990,249,-704
-237,42,122,-732,44,-51
-909,-116,-229,545,292,717
-824,-768,-807,-370,-262,30
-675,58,332,-890,-651,791
-363,825,-717,254,684,240
-405,-715,900,166,-589,422
--476,686,-830,-319,634,-807
-633,837,-971,917,-764,207
--116,-44,-193,-70,908,809
--26,-252,998,408,70,-713
--601,645,-462,842,-644,-591
--160,653,274,113,-138,687
-369,-273,-181,925,-167,-693
--338,135,480,-967,-13,-840
--90,-270,-564,695,161,907
-607,-430,869,-713,461,-469
-919,-165,-776,522,606,-708
--203,465,288,207,-339,-458
--453,-534,-715,975,838,-677
--973,310,-350,934,546,-805
--835,385,708,-337,-594,-772
--14,914,900,-495,-627,594
-833,-713,-213,578,-296,699
--27,-748,484,455,915,291
-270,889,739,-57,442,-516
-119,811,-679,905,184,130
--678,-469,925,553,612,482
-101,-571,-732,-842,644,588
--71,-737,566,616,957,-663
--634,-356,90,-207,936,622
-598,443,964,-895,-58,529
-847,-467,929,-742,91,10
--633,829,-780,-408,222,-30
--818,57,275,-38,-746,198
--722,-825,-549,597,-391,99
--570,908,430,873,-103,-360
-342,-681,512,434,542,-528
-297,850,479,609,543,-357
-9,784,212,548,56,859
--152,560,-240,-969,-18,713
-140,-133,34,-635,250,-163
--272,-22,-169,-662,989,-604
-471,-765,355,633,-742,-118
--118,146,942,663,547,-376
-583,16,162,264,715,-33
--230,-446,997,-838,561,555
-372,397,-729,-318,-276,649
-92,982,-970,-390,-922,922
--981,713,-951,-337,-669,670
--999,846,-831,-504,7,-128
-455,-954,-370,682,-510,45
-822,-960,-892,-385,-662,314
--668,-686,-367,-246,530,-341
--723,-720,-926,-836,-142,757
--509,-134,384,-221,-873,-639
--803,-52,-706,-669,373,-339
-933,578,631,-616,770,555
-741,-564,-33,-605,-576,275
--715,445,-233,-730,734,-704
-120,-10,-266,-685,-490,-17
--232,-326,-457,-946,-457,-116
-811,52,639,826,-200,147
--329,279,293,612,943,955
--721,-894,-393,-969,-642,453
--688,-826,-352,-75,371,79
--809,-979,407,497,858,-248
--485,-232,-242,-582,-81,849
-141,-106,123,-152,806,-596
--428,57,-992,811,-192,478
-864,393,122,858,255,-876
--284,-780,240,457,354,-107
-956,605,-477,44,26,-678
-86,710,-533,-815,439,327
--906,-626,-834,763,426,-48
-201,-150,-904,652,475,412
--247,149,81,-199,-531,-148
-923,-76,-353,175,-121,-223
-427,-674,453,472,-410,585
-931,776,-33,85,-962,-865
--655,-908,-902,208,869,792
--316,-102,-45,-436,-222,885
--309,768,-574,653,745,-975
-896,27,-226,993,332,198
-323,655,-89,260,240,-902
-501,-763,-424,793,813,616
-993,375,-938,-621,672,-70
--880,-466,-283,770,-824,143
-63,-283,886,-142,879,-116
--964,-50,-521,-42,-306,-161
-724,-22,866,-871,933,-383
--344,135,282,966,-80,917
--281,-189,420,810,362,-582
--515,455,-588,814,162,332
-555,-436,-123,-210,869,-943
-589,577,232,286,-554,876
--773,127,-58,-171,-452,125
--428,575,906,-232,-10,-224
-437,276,-335,-348,605,878
--964,511,-386,-407,168,-220
-307,513,912,-463,-423,-416
--445,539,273,886,-18,760
--396,-585,-670,414,47,364
-143,-506,754,906,-971,-203
--544,472,-180,-541,869,-465
--779,-15,-396,890,972,-220
--430,-564,503,182,-119,456
-89,-10,-739,399,506,499
-954,162,-810,-973,127,870
-890,952,-225,158,828,237
--868,952,349,465,574,750
--915,369,-975,-596,-395,-134
--135,-601,575,582,-667,640
-413,890,-560,-276,-555,-562
--633,-269,561,-820,-624,499
-371,-92,-784,-593,864,-717
--971,655,-439,367,754,-951
-172,-347,36,279,-247,-402
-633,-301,364,-349,-683,-387
--780,-211,-713,-948,-648,543
-72,58,762,-465,-66,462
-78,502,781,-832,713,836
--431,-64,-484,-392,208,-343
--64,101,-29,-860,-329,844
-398,391,828,-858,700,395
-578,-896,-326,-604,314,180
-97,-321,-695,185,-357,852
-854,839,283,-375,951,-209
-194,96,-564,-847,162,524
--354,532,494,621,580,560
-419,-678,-450,926,-5,-924
--661,905,519,621,-143,394
--573,268,296,-562,-291,-319
--211,266,-196,158,564,-183
-18,-585,-398,777,-581,864
-790,-894,-745,-604,-418,70
-848,-339,150,773,11,851
--954,-809,-53,-20,-648,-304
-658,-336,-658,-905,853,407
--365,-844,350,-625,852,-358
-986,-315,-230,-159,21,180
--15,599,45,-286,-941,847
--613,-68,184,639,-987,550
-334,675,-56,-861,923,340
--848,-596,960,231,-28,-34
-707,-811,-994,-356,-167,-171
--470,-764,72,576,-600,-204
-379,189,-542,-576,585,800
-440,540,-445,-563,379,-334
--155,64,514,-288,853,106
--304,751,481,-520,-708,-694
--709,132,594,126,-844,63
-723,471,421,-138,-962,892
--440,-263,39,513,-672,-954
-775,809,-581,330,752,-107
--376,-158,335,-708,-514,578
--343,-769,456,-187,25,413
-548,-877,-172,300,-500,928
-938,-102,423,-488,-378,-969
--36,564,-55,131,958,-800
--322,511,-413,503,700,-847
--966,547,-88,-17,-359,-67
-637,-341,-437,-181,527,-153
--74,449,-28,3,485,189
--997,658,-224,-948,702,-807
--224,736,-896,127,-945,-850
--395,-106,439,-553,-128,124
--841,-445,-758,-572,-489,212
-633,-327,13,-512,952,771
--940,-171,-6,-46,-923,-425
--142,-442,-817,-998,843,-695
-340,847,-137,-920,-988,-658
--653,217,-679,-257,651,-719
--294,365,-41,342,74,-892
-690,-236,-541,494,408,-516
-180,-807,225,790,494,59
-707,605,-246,656,284,271
-65,294,152,824,442,-442
--321,781,-540,341,316,415
-420,371,-2,545,995,248
-56,-191,-604,971,615,449
--981,-31,510,592,-390,-362
--317,-968,913,365,97,508
-832,63,-864,-510,86,202
--483,456,-636,340,-310,676
-981,-847,751,-508,-962,-31
--157,99,73,797,63,-172
-220,858,872,924,866,-381
-996,-169,805,321,-164,971
-896,11,-625,-973,-782,76
-578,-280,730,-729,307,-905
--580,-749,719,-698,967,603
--821,874,-103,-623,662,-491
--763,117,661,-644,672,-607
-592,787,-798,-169,-298,690
-296,644,-526,-762,-447,665
-534,-818,852,-120,57,-379
--986,-549,-329,294,954,258
--133,352,-660,-77,904,-356
-748,343,215,500,317,-277
-311,7,910,-896,-809,795
-763,-602,-753,313,-352,917
-668,619,-474,-597,-650,650
--297,563,-701,-987,486,-902
--461,-740,-657,233,-482,-328
--446,-250,-986,-458,-629,520
-542,-49,-327,-469,257,-947
-121,-575,-634,-143,-184,521
-30,504,455,-645,-229,-945
--12,-295,377,764,771,125
--686,-133,225,-25,-376,-143
--6,-46,338,270,-405,-872
--623,-37,582,467,963,898
--804,869,-477,420,-475,-303
-94,41,-842,-193,-768,720
--656,-918,415,645,-357,460
--47,-486,-911,468,-608,-686
--158,251,419,-394,-655,-895
-272,-695,979,508,-358,959
--776,650,-918,-467,-690,-534
--85,-309,-626,167,-366,-429
--880,-732,-186,-924,970,-875
-517,645,-274,962,-804,544
-721,402,104,640,478,-499
-198,684,-134,-723,-452,-905
--245,745,239,238,-826,441
--217,206,-32,462,-981,-895
--51,989,526,-173,560,-676
--480,-659,-976,-580,-727,466
--996,-90,-995,158,-239,642
-302,288,-194,-294,17,924
--943,969,-326,114,-500,103
--619,163,339,-880,230,421
--344,-601,-795,557,565,-779
-590,345,-129,-202,-125,-58
--777,-195,159,674,775,411
--939,312,-665,810,121,855
--971,254,712,815,452,581
-442,-9,327,-750,61,757
--342,869,869,-160,390,-772
-620,601,565,-169,-69,-183
--25,924,-817,964,321,-970
--64,-6,-133,978,825,-379
-601,436,-24,98,-115,940
--97,502,614,-574,922,513
--125,262,-946,695,99,-220
-429,-721,719,-694,197,-558
-326,689,-70,-908,-673,338
--468,-856,-902,-254,-358,305
--358,530,542,355,-253,-47
--438,-74,-362,963,988,788
-137,717,467,622,319,-380
--86,310,-336,851,918,-288
-721,395,646,-53,255,-425
-255,175,912,84,-209,878
--632,-485,-400,-357,991,-608
-235,-559,992,-297,857,-591
-87,-71,148,130,647,578
--290,-584,-639,-788,-21,592
-386,984,625,-731,-993,-336
--538,634,-209,-828,-150,-774
--754,-387,607,-781,976,-199
-412,-798,-664,295,709,-537
--412,932,-880,-232,561,852
--656,-358,-198,-964,-433,-848
--762,-668,-632,186,-673,-11
--876,237,-282,-312,-83,682
-403,73,-57,-436,-622,781
--587,873,798,976,-39,329
--369,-622,553,-341,817,794
--108,-616,920,-849,-679,96
-290,-974,234,239,-284,-321
--22,394,-417,-419,264,58
--473,-551,69,923,591,-228
--956,662,-113,851,-581,-794
--258,-681,413,-471,-637,-817
--866,926,992,-653,-7,794
-556,-350,602,917,831,-610
-188,245,-906,361,492,174
--720,384,-818,329,638,-666
--246,846,890,-325,-59,-850
--118,-509,620,-762,-256,15
--787,-536,-452,-338,-399,813
-458,560,525,-311,-608,-419
-494,-811,-825,-127,-812,894
--801,890,-629,-860,574,925
--709,-193,-213,138,-410,-403
-861,91,708,-187,5,-222
-789,646,777,154,90,-49
--267,-830,-114,531,591,-698
--126,-82,881,-418,82,652
--894,130,-726,-935,393,-815
--142,563,654,638,-712,-597
--759,60,-23,977,100,-765
--305,595,-570,-809,482,762
--161,-267,53,963,998,-529
--300,-57,798,353,703,486
--990,696,-764,699,-565,719
--232,-205,566,571,977,369
-740,865,151,-817,-204,-293
-94,445,-768,229,537,-406
-861,620,37,-424,-36,656
-390,-369,952,733,-464,569
--482,-604,959,554,-705,-626
--396,-615,-991,108,272,-723
-143,780,535,142,-917,-147
-138,-629,-217,-908,905,115
-915,103,-852,64,-468,-642
-570,734,-785,-268,-326,-759
-738,531,-332,586,-779,24
-870,440,-217,473,-383,415
--296,-333,-330,-142,-924,950
-118,120,-35,-245,-211,-652
-61,634,153,-243,838,789
-726,-582,210,105,983,537
--313,-323,758,234,29,848
--847,-172,-593,733,-56,617
-54,255,-512,156,-575,675
--873,-956,-148,623,95,200
-700,-370,926,649,-978,157
--639,-202,719,130,747,222
-194,-33,955,943,505,114
--226,-790,28,-930,827,783
--392,-74,-28,714,218,-612
-209,626,-888,-683,-912,495
-487,751,614,933,631,445
--348,-34,-411,-106,835,321
--689,872,-29,-800,312,-542
--52,566,827,570,-862,-77
-471,992,309,-402,389,912
-24,520,-83,-51,555,503
--265,-317,283,-970,-472,690
-606,526,137,71,-651,150
-217,-518,663,66,-605,-331
--562,232,-76,-503,205,-323
-842,-521,546,285,625,-186
-997,-927,344,909,-546,974
--677,419,81,121,-705,771
-719,-379,-944,-797,784,-155
--378,286,-317,-797,-111,964
--288,-573,784,80,-532,-646
--77,407,-248,-797,769,-816
--24,-637,287,-858,-927,-333
--902,37,894,-823,141,684
-125,467,-177,-516,686,399
--321,-542,641,-590,527,-224
--400,-712,-876,-208,632,-543
--676,-429,664,-242,-269,922
--608,-273,-141,930,687,380
-786,-12,498,494,310,326
--739,-617,606,-960,804,188
-384,-368,-243,-350,-459,31
--550,397,320,-868,328,-279
-969,-179,853,864,-110,514
-910,793,302,-822,-285,488
--605,-128,218,-283,-17,-227
-16,324,667,708,750,3
-485,-813,19,585,71,930
--218,816,-687,-97,-732,-360
--497,-151,376,-23,3,315
--412,-989,-610,-813,372,964
--878,-280,87,381,-311,69
--609,-90,-731,-679,150,585
-889,27,-162,605,75,-770
-448,617,-988,0,-103,-504
--800,-537,-69,627,608,-668
-534,686,-664,942,830,920
--238,775,495,932,-793,497
--343,958,-914,-514,-691,651
-568,-136,208,359,728,28
-286,912,-794,683,556,-102
--638,-629,-484,445,-64,-497
-58,505,-801,-110,872,632
--390,777,353,267,976,369
--993,515,105,-133,358,-572
-964,996,355,-212,-667,38
--725,-614,-35,365,132,-196
-237,-536,-416,-302,312,477
--664,574,-210,224,48,-925
-869,-261,-256,-240,-3,-698
-712,385,32,-34,916,-315
-895,-409,-100,-346,728,-624
--806,327,-450,889,-781,-939
--586,-403,698,318,-939,899
-557,-57,-920,659,333,-51
--441,232,-918,-205,246,1
-783,167,-797,-595,245,-736
--36,-531,-486,-426,-813,-160
-777,-843,817,313,-228,-572
-735,866,-309,-564,-81,190
--413,645,101,719,-719,218
--83,164,767,796,-430,-459
-122,779,-15,-295,-96,-892
-462,379,70,548,834,-312
--630,-534,124,187,-737,114
--299,-604,318,-591,936,826
--879,218,-642,-483,-318,-866
--691,62,-658,761,-895,-854
--822,493,687,569,910,-202
--223,784,304,-5,541,925
--914,541,737,-662,-662,-195
--622,615,414,358,881,-878
-339,745,-268,-968,-280,-227
--364,855,148,-709,-827,472
--890,-532,-41,664,-612,577
--702,-859,971,-722,-660,-920
--539,-605,737,149,973,-802
-800,42,-448,-811,152,511
--933,377,-110,-105,-374,-937
--766,152,482,120,-308,390
--568,775,-292,899,732,890
--177,-317,-502,-259,328,-511
-612,-696,-574,-660,132,31
--119,563,-805,-864,179,-672
-425,-627,183,-331,839,318
--711,-976,-749,152,-916,261
-181,-63,497,211,262,406
--537,700,-859,-765,-928,77
-892,832,231,-749,-82,613
-816,216,-642,-216,-669,-912
--6,624,-937,-370,-344,268
-737,-710,-869,983,-324,-274
-565,952,-547,-158,374,-444
-51,-683,645,-845,515,636
--953,-631,114,-377,-764,-144
--8,470,-242,-399,-675,-730
--540,689,-20,47,-607,590
--329,-710,-779,942,-388,979
-123,829,674,122,203,563
-46,782,396,-33,386,610
-872,-846,-523,-122,-55,-190
-388,-994,-525,974,127,596
-781,-680,796,-34,-959,-62
--749,173,200,-384,-745,-446
-379,618,136,-250,-224,970
--58,240,-921,-760,-901,-626
-366,-185,565,-100,515,688
-489,999,-893,-263,-637,816
-838,-496,-316,-513,419,479
-107,676,-15,882,98,-397
--999,941,-903,-424,670,-325
-171,-979,835,178,169,-984
--609,-607,378,-681,184,402
--316,903,-575,-800,224,983
-591,-18,-460,551,-167,918
--756,405,-117,441,163,-320
-456,24,6,881,-836,-539
--489,-585,915,651,-892,-382
--177,-122,73,-711,-386,591
-181,724,530,686,-131,241
-737,288,886,216,233,33
--548,-386,-749,-153,-85,-982
--835,227,904,160,-99,25
--9,-42,-162,728,840,-963
-217,-763,870,771,47,-846
--595,808,-491,556,337,-900
--134,281,-724,441,-134,708
--789,-508,651,-962,661,315
--839,-923,339,402,41,-487
-300,-790,48,703,-398,-811
-955,-51,462,-685,960,-717
-910,-880,592,-255,-51,-776
--885,169,-793,368,-565,458
--905,940,-492,-630,-535,-988
-245,797,763,869,-82,550
--310,38,-933,-367,-650,824
--95,32,-83,337,226,990
--218,-975,-191,-208,-785,-293
--672,-953,517,-901,-247,465
-681,-148,261,-857,544,-923
-640,341,446,-618,195,769
-384,398,-846,365,671,815
-578,576,-911,907,762,-859
-548,-428,144,-630,-759,-146
-710,-73,-700,983,-97,-889
--46,898,-973,-362,-817,-717
-151,-81,-125,-900,-478,-154
-483,615,-537,-932,181,-68
-786,-223,518,25,-306,-12
--422,268,-809,-683,635,468
-983,-734,-694,-608,-110,4
--786,-196,749,-354,137,-8
--181,36,668,-200,691,-973
--629,-838,692,-736,437,-871
--208,-536,-159,-596,8,197
--3,370,-686,170,913,-376
-44,-998,-149,-993,-200,512
--519,136,859,497,536,434
-77,-985,972,-340,-705,-837
--381,947,250,360,344,322
--26,131,699,750,707,384
--914,655,299,193,406,955
--883,-921,220,595,-546,794
--599,577,-569,-404,-704,489
--594,-963,-624,-460,880,-760
--603,88,-99,681,55,-328
-976,472,139,-453,-531,-860
-192,-290,513,-89,666,432
-417,487,575,293,567,-668
-655,711,-162,449,-980,972
--505,664,-685,-239,603,-592
--625,-802,-67,996,384,-636
-365,-593,522,-666,-200,-431
--868,708,560,-860,-630,-355
--702,785,-637,-611,-597,960
--137,-696,-93,-803,408,406
-891,-123,-26,-609,-610,518
-133,-832,-198,555,708,-110
-791,617,-69,487,696,315
--900,694,-565,517,-269,-416
-914,135,-781,600,-71,-600
-991,-915,-422,-351,-837,313
--840,-398,-302,21,590,146
-62,-558,-702,-384,-625,831
--363,-426,-924,-496,792,-908
-73,361,-817,-466,400,922
--626,-164,-626,860,-524,286
-255,26,-944,809,-606,986
--457,-256,-103,50,-867,-871
--223,803,196,480,612,136
--820,-928,700,780,-977,721
-717,332,53,-933,-128,793
--602,-648,562,593,890,702
--469,-875,-527,911,-475,-222
-110,-281,-552,-536,-816,596
--981,654,413,-981,-75,-95
--754,-742,-515,894,-220,-344
-795,-52,156,408,-603,76
-474,-157,423,-499,-807,-791
-260,688,40,-52,702,-122
--584,-517,-390,-881,302,-504
-61,797,665,708,14,668
-366,166,458,-614,564,-983
-72,539,-378,796,381,-824
--485,201,-588,842,736,379
--149,-894,-298,705,-303,-406
-660,-935,-580,521,93,633
--382,-282,-375,-841,-828,171
--567,743,-100,43,144,122
--281,-786,-749,-551,296,304
-11,-426,-792,212,857,-175
-594,143,-699,289,315,137
-341,596,-390,107,-631,-804
--751,-636,-424,-854,193,651
--145,384,749,675,-786,517
-224,-865,-323,96,-916,258
--309,403,-388,826,35,-270
--942,709,222,158,-699,-103
--589,842,-997,29,-195,-210
-264,426,566,145,-217,623
-217,965,507,-601,-453,507
--206,307,-982,4,64,-292
-676,-49,-38,-701,550,883
-5,-850,-438,659,745,-773
-933,238,-574,-570,91,-33
--866,121,-928,358,459,-843
--568,-631,-352,-580,-349,189
--737,849,-963,-486,-662,970
-135,334,-967,-71,-365,-792
-789,21,-227,51,990,-275
-240,412,-886,230,591,256
--609,472,-853,-754,959,661
-401,521,521,314,929,982
--499,784,-208,71,-302,296
--557,-948,-553,-526,-864,793
-270,-626,828,44,37,14
--412,224,617,-593,502,699
-41,-908,81,562,-849,163
-165,917,761,-197,331,-341
--687,314,799,755,-969,648
--164,25,578,439,-334,-576
-213,535,874,-177,-551,24
--689,291,-795,-225,-496,-125
-465,461,558,-118,-568,-909
-567,660,-810,46,-485,878
--147,606,685,-690,-774,984
-568,-886,-43,854,-738,616
--800,386,-614,585,764,-226
--518,23,-225,-732,-79,440
--173,-291,-689,636,642,-447
--598,-16,227,410,496,211
--474,-930,-656,-321,-420,36
--435,165,-819,555,540,144
--969,149,828,568,394,648
-65,-848,257,720,-625,-851
-981,899,275,635,465,-877
-80,290,792,760,-191,-321
--605,-858,594,33,706,593
-585,-472,318,-35,354,-927
--365,664,803,581,-965,-814
--427,-238,-480,146,-55,-606
-879,-193,250,-890,336,117
--226,-322,-286,-765,-836,-218
--913,564,-667,-698,937,283
-872,-901,810,-623,-52,-709
-473,171,717,38,-429,-644
-225,824,-219,-475,-180,234
--530,-797,-948,238,851,-623
-85,975,-363,529,598,28
--799,166,-804,210,-769,851
--687,-158,885,736,-381,-461
-447,592,928,-514,-515,-661
--399,-777,-493,80,-544,-78
--884,631,171,-825,-333,551
-191,268,-577,676,137,-33
-212,-853,709,798,583,-56
--908,-172,-540,-84,-135,-56
-303,311,406,-360,-240,811
-798,-708,824,59,234,-57
-491,693,-74,585,-85,877
-509,-65,-936,329,-51,722
--122,858,-52,467,-77,-609
-850,760,547,-495,-953,-952
--460,-541,890,910,286,724
--914,843,-579,-983,-387,-460
-989,-171,-877,-326,-899,458
-846,175,-915,540,-1000,-982
--852,-920,-306,496,530,-18
-338,-991,160,85,-455,-661
--186,-311,-460,-563,-231,-414
--932,-302,959,597,793,748
--366,-402,-788,-279,514,53
--940,-956,447,-956,211,-285
-564,806,-911,-914,934,754
-575,-858,-277,15,409,-714
-848,462,100,-381,135,242
-330,718,-24,-190,860,-78
-479,458,941,108,-866,-653
-212,980,962,-962,115,841
--827,-474,-206,881,323,765
-506,-45,-30,-293,524,-133
-832,-173,547,-852,-561,-842
--397,-661,-708,819,-545,-228
-521,51,-489,852,36,-258
-227,-164,189,465,-987,-882
--73,-997,641,-995,449,-615
-151,-995,-638,415,257,-400
--663,-297,-748,537,-734,198
--585,-401,-81,-782,-80,-105
-99,-21,238,-365,-704,-368
-45,416,849,-211,-371,-1
--404,-443,795,-406,36,-933
-272,-363,981,-491,-380,77
-713,-342,-366,-849,643,911
--748,671,-537,813,961,-200
--194,-909,703,-662,-601,188
-281,500,724,286,267,197
--832,847,-595,820,-316,637
-520,521,-54,261,923,-10
-4,-808,-682,-258,441,-695
--793,-107,-969,905,798,446
--108,-739,-590,69,-855,-365
-380,-623,-930,817,468,713
-759,-849,-236,433,-723,-931
-95,-320,-686,124,-69,-329
--655,518,-210,-523,284,-866
-144,303,639,70,-171,269
-173,-333,947,-304,55,40
-274,878,-482,-888,-835,375
--982,-854,-36,-218,-114,-230
-905,-979,488,-485,-479,114
-877,-157,553,-530,-47,-321
-350,664,-881,442,-220,-284
-434,-423,-365,878,-726,584
-535,909,-517,-447,-660,-141
--966,191,50,353,182,-642
--785,-634,123,-907,-162,511
-146,-850,-214,814,-704,25
-692,1,521,492,-637,274
--662,-372,-313,597,983,-647
--962,-526,68,-549,-819,231
-740,-890,-318,797,-666,948
--190,-12,-468,-455,948,284
-16,478,-506,-888,628,-154
-272,630,-976,308,433,3
--169,-391,-132,189,302,-388
-109,-784,474,-167,-265,-31
--177,-532,283,464,421,-73
-650,635,592,-138,1,-387
--932,703,-827,-492,-355,686
-586,-311,340,-618,645,-434
--951,736,647,-127,-303,590
-188,444,903,718,-931,500
--872,-642,-296,-571,337,241
-23,65,152,125,880,470
-512,823,-42,217,823,-263
-180,-831,-380,886,607,762
-722,443,-149,-216,-115,759
--19,660,-36,901,923,231
-562,-322,-626,-968,194,-825
-204,-920,938,784,362,150
--410,-266,-715,559,-672,124
--198,446,-140,454,-461,-447
-83,-346,830,-493,-759,-382
--881,601,581,234,-134,-925
--494,914,-42,899,235,629
--390,50,956,437,774,-700
--514,514,44,-512,-576,-313
-63,-688,808,-534,-570,-399
--726,572,-896,102,-294,-28
--688,757,401,406,955,-511
--283,423,-485,480,-767,908
--541,952,-594,116,-854,451
--273,-796,236,625,-626,257
--407,-493,373,826,-309,297
--750,955,-476,641,-809,713
-8,415,695,226,-111,2
-733,209,152,-920,401,995
-921,-103,-919,66,871,-947
--907,89,-869,-214,851,-559
--307,748,524,-755,314,-711
-188,897,-72,-763,482,103
-545,-821,-232,-596,-334,-754
--217,-788,-820,388,-200,-662
-779,160,-723,-975,-142,-998
--978,-519,-78,-981,842,904
--504,-736,-295,21,-472,-482
-391,115,-705,574,652,-446
-813,-988,865,830,-263,487
-194,80,774,-493,-761,-872
--415,-284,-803,7,-810,670
--484,-4,881,-872,55,-852
--379,822,-266,324,-48,748
--304,-278,406,-60,959,-89
-404,756,577,-643,-332,658
-291,460,125,491,-312,83
-311,-734,-141,582,282,-557
--450,-661,-981,710,-177,794
-328,264,-787,971,-743,-407
--622,518,993,-241,-738,229
-273,-826,-254,-917,-710,-111
-809,770,96,368,-818,725
--488,773,502,-342,534,745
--28,-414,236,-315,-484,363
-179,-466,-566,713,-683,56
-560,-240,-597,619,916,-940
-893,473,872,-868,-642,-461
-799,489,383,-321,-776,-833
-980,490,-508,764,-512,-426
-917,961,-16,-675,440,559
--812,212,784,-987,-132,554
--886,454,747,806,190,231
-910,341,21,-66,708,725
-29,929,-831,-494,-303,389
--103,492,-271,-174,-515,529
--292,119,419,788,247,-951
-483,543,-347,-673,664,-549
--926,-871,-437,337,162,-877
-299,472,-771,5,-88,-643
--103,525,-725,-998,264,22
--505,708,550,-545,823,347
--738,931,59,147,-156,-259
-456,968,-162,889,132,-911
-535,120,968,-517,-864,-541
-24,-395,-593,-766,-565,-332
-834,611,825,-576,280,629
-211,-548,140,-278,-592,929
--999,-240,-63,-78,793,573
--573,160,450,987,529,322
-63,353,315,-187,-461,577
-189,-950,-247,656,289,241
-209,-297,397,664,-805,484
--655,452,435,-556,917,874
-253,-756,262,-888,-778,-214
-793,-451,323,-251,-401,-458
--396,619,-651,-287,-668,-781
-698,720,-349,742,-807,546
-738,280,680,279,-540,858
--789,387,530,-36,-551,-491
-162,579,-427,-272,228,710
-689,356,917,-580,729,217
--115,-638,866,424,-82,-194
-411,-338,-917,172,227,-29
--612,63,630,-976,-64,-204
--200,911,583,-571,682,-579
-91,298,396,-183,788,-955
-141,-873,-277,149,-396,916
-321,958,-136,573,541,-777
-797,-909,-469,-877,988,-653
-784,-198,129,883,-203,399
--68,-810,223,-423,-467,-512
-531,-445,-603,-997,-841,641
--274,-242,174,261,-636,-158
--574,494,-796,-798,-798,99
-95,-82,-613,-954,-753,986
--883,-448,-864,-401,938,-392
-913,930,-542,-988,310,410
-506,-99,43,512,790,-222
-724,31,49,-950,260,-134
--287,-947,-234,-700,56,588
--33,782,-144,948,105,-791
-548,-546,-652,-293,881,-520
-691,-91,76,991,-631,742
--520,-429,-244,-296,724,-48
-778,646,377,50,-188,56
--895,-507,-898,-165,-674,652
-654,584,-634,177,-349,-620
-114,-980,355,62,182,975
-516,9,-442,-298,274,-579
--238,262,-431,-896,506,-850
-47,748,846,821,-537,-293
-839,726,593,285,-297,840
-634,-486,468,-304,-887,-567
--864,914,296,-124,335,233
-88,-253,-523,-956,-554,803
--587,417,281,-62,-409,-363
--136,-39,-292,-768,-264,876
--127,506,-891,-331,-744,-430
-778,584,-750,-129,-479,-94
--876,-771,-987,-757,180,-641
--777,-694,411,-87,329,190
--347,-999,-882,158,-754,232
--105,918,188,237,-110,-591
--209,703,-838,77,838,909
--995,-339,-762,750,860,472
-185,271,-289,173,811,-300
-2,65,-656,-22,36,-139
-765,-210,883,974,961,-905
--212,295,-615,-840,77,474
-211,-910,-440,703,-11,859
--559,-4,-196,841,-277,969
--73,-159,-887,126,978,-371
--569,633,-423,-33,512,-393
-503,143,-383,-109,-649,-998
--663,339,-317,-523,-2,596
-690,-380,570,378,-652,132
-72,-744,-930,399,-525,935
-865,-983,115,37,995,826
-594,-621,-872,443,188,-241
--1000,291,754,234,-435,-869
--868,901,654,-907,59,181
--868,-793,-431,596,-446,-564
-900,-944,-680,-796,902,-366
-331,430,943,853,-851,-942
-315,-538,-354,-909,139,721
-170,-884,-225,-818,-808,-657
--279,-34,-533,-871,-972,552
-691,-986,-800,-950,654,-747
-603,988,899,841,-630,591
-876,-949,809,562,602,-536
--693,363,-189,495,738,-1000
--383,431,-633,297,665,959
--740,686,-207,-803,188,-520
--820,226,31,-339,10,121
--312,-844,624,-516,483,621
--822,-529,69,-278,800,328
-834,-82,-759,420,811,-264
--960,-240,-921,561,173,46
--324,909,-790,-814,-2,-785
-976,334,-290,-891,704,-581
-150,-798,689,-823,237,-639
--551,-320,876,-502,-622,-628
--136,845,904,595,-702,-261
--857,-377,-522,-101,-943,-805
--682,-787,-888,-459,-752,-985
--571,-81,623,-133,447,643
--375,-158,72,-387,-324,-696
--660,-650,340,188,569,526
-727,-218,16,-7,-595,-988
--966,-684,802,-783,-272,-194
-115,-566,-888,47,712,180
--237,-69,45,-272,981,-812
-48,897,439,417,50,325
-348,616,180,254,104,-784
--730,811,-548,612,-736,790
-138,-810,123,930,65,865
--768,-299,-49,-895,-692,-418
-487,-531,802,-159,-12,634
-808,-179,552,-73,470,717
-720,-644,886,-141,625,144
--485,-505,-347,-244,-916,66
-600,-565,995,-5,324,227
--771,-35,904,-482,753,-303
--701,65,426,-763,-504,-479
-409,733,-823,475,64,718
-865,975,368,893,-413,-433
-812,-597,-970,819,813,624
-193,-642,-381,-560,545,398
-711,28,-316,771,717,-865
--509,462,809,-136,786,635
-618,-49,484,169,635,547
--747,685,-882,-496,-332,82
--501,-851,870,563,290,570
--279,-829,-509,397,457,816
--508,80,850,-188,483,-326
-860,-100,360,119,-205,787
--870,21,-39,-827,-185,932
-826,284,-136,-866,-330,-97
--944,-82,745,899,-97,365
-929,262,564,632,-115,632
-244,-276,713,330,-897,-214
--890,-109,664,876,-974,-907
-716,249,816,489,723,141
--96,-560,-272,45,-70,645
-762,-503,414,-828,-254,-646
-909,-13,903,-422,-344,-10
-658,-486,743,545,50,674
--241,507,-367,18,-48,-241
-886,-268,884,-762,120,-486
--412,-528,879,-647,223,-393
-851,810,234,937,-726,797
--999,942,839,-134,-996,-189
-100,979,-527,-521,378,800
-544,-844,-832,-530,-77,-641
-43,889,31,442,-934,-503
--330,-370,-309,-439,173,547
-169,945,62,-753,-542,-597
-208,751,-372,-647,-520,70
-765,-840,907,-257,379,918
-334,-135,-689,730,-427,618
-137,-508,66,-695,78,169
--962,-123,400,-417,151,969
-328,689,666,427,-555,-642
--907,343,605,-341,-647,582
--667,-363,-571,818,-265,-399
-525,-938,904,898,725,692
--176,-802,-858,-9,780,275
-580,170,-740,287,691,-97
-365,557,-375,361,-288,859
-193,737,842,-808,520,282
--871,65,-799,836,179,-720
-958,-144,744,-789,797,-48
-122,582,662,912,68,757
-595,241,-801,513,388,186
--103,-677,-259,-731,-281,-857
-921,319,-696,683,-88,-997
-775,200,78,858,648,768
-316,821,-763,68,-290,-741
-564,664,691,504,760,787
-694,-119,973,-385,309,-760
-777,-947,-57,990,74,19
-971,626,-496,-781,-602,-239
--651,433,11,-339,939,294
--965,-728,560,569,-708,-247
diff --git a/src/projecteuler/112.c b/src/projecteuler/112.c
deleted file mode 100644
index bb808be..0000000
--- a/src/projecteuler/112.c
+++ /dev/null
@@ -1,45 +0,0 @@
-
-int isbouncy(unsigned long n)
-{
- char increasing=1, decreasing=1;
- char lastdigit = n % 10;
- n /= 10;
-
- while(n > 0)
- {
- char digit = n % 10;
- if(digit > lastdigit)
- increasing = 0;
- else if(digit < lastdigit)
- decreasing = 0;
-
- if(increasing == 0 && decreasing == 0)
- return 1;
-
- lastdigit = digit;
- n /= 10;
- }
- return 0;
-}
-
-int main(void)
-{
- unsigned long n = 100;
- unsigned long bouncycount = 0;
- double ratio;
-
- while(1)
- {
- if(isbouncy(++n))
- bouncycount++;
-
- ratio = (double)bouncycount/n;
- if(ratio == 0.99)
- break;
-
- }
- printf("%ld\n", n);
-
- return 0;
-}
-
diff --git a/src/projecteuler/124.py b/src/projecteuler/124.py
deleted file mode 100644
index 19486d6..0000000
--- a/src/projecteuler/124.py
+++ /dev/null
@@ -1,31 +0,0 @@
-from operator import itemgetter
-from common import sieve
-
-limit = 100000
-
-primes = sieve(limit).primes()
-prime_list = list(primes)
-prime_list.sort()
-
-def rad(n):
- result = 1
- if n in primes:
- return n
-
- for p in prime_list:
- if result*p > n:
- break
- if n % p == 0:
- result *= p
- return result
-
-
-
-radlist = []
-
-for n in xrange(1, limit+1):
- radlist.append((n, rad(n)))
-
-radlist.sort(key=itemgetter(1))
-print radlist[10000-1][0]
-
diff --git a/src/projecteuler/125.py b/src/projecteuler/125.py
deleted file mode 100644
index 35dae6b..0000000
--- a/src/projecteuler/125.py
+++ /dev/null
@@ -1,22 +0,0 @@
-
-limit = 10**8
-
-squares = [ x*x for x in xrange(1, 7200) ]
-
-def is_palindrome(n):
- nstr = str(n)
- return nstr == nstr[::-1]
-
-
-palindromes = set()
-
-for i in xrange(len(squares)-1): # iterate over all starting positions
- for j in xrange(2, len(squares)): # iterate over all possible lengths
- sqrsum = sum(squares[i:i+j])
- if sqrsum >= limit:
- break
- if is_palindrome(sqrsum):
- palindromes.add(sqrsum)
-
-print sum(palindromes)
-
diff --git a/src/projecteuler/134.c b/src/projecteuler/134.c
deleted file mode 100644
index 3f6ea32..0000000
--- a/src/projecteuler/134.c
+++ /dev/null
@@ -1,59 +0,0 @@
-#include "common.h"
-#include <stdlib.h>
-
-// TODO: improve performance! not yet working on 32 bit systems
-
-unsigned int getmod(unsigned long p1)
-{
- unsigned int mod = 1;
-
- if(p1 < 10)
- mod = 10;
- else if(p1 < 100)
- mod = 100;
- else if(p1 < 1000)
- mod = 1000;
- else if(p1 < 10000)
- mod = 10000;
- else if(p1 < 100000)
- mod = 100000;
- else if(p1 < 1000000)
- mod = 1000000;
- else
- mod = 0; // should not occur and therefore result in division by zero
-
- return mod;
-}
-
-unsigned long findn(unsigned long p1, unsigned long p2)
-{
- unsigned int mod = getmod(p1);
- unsigned long n = mod + p1;
- while(n % p2 != 0)
- n += mod;
-
- return n;
-}
-
-int main(void)
-{
- unsigned long* p = primes(1000020);
- unsigned long pcount = p[0];
- unsigned long p1, p2, pos;
- unsigned long long result = 0;
-
- for(pos=3; p[pos]<=1000000; pos++)
- {
- p1 = p[pos];
- p2 = p[pos+1];
- if(pos%1000==0)
- printf("p1: %li\n", p1);
- result += findn(p1, p2);
- }
-
- printf("%li\n", result);
-
- free(p);
- return 0;
-}
-
diff --git a/src/projecteuler/187.c b/src/projecteuler/187.c
deleted file mode 100644
index 4bee151..0000000
--- a/src/projecteuler/187.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "common.h"
-#include <stdlib.h>
-#include <string.h>
-
-const unsigned long limit = 100000000;
-
-int main(void)
-{
- unsigned long* p = primes(limit/2); // sqrt(limit)
- unsigned long pcount = p[0];
- unsigned long rcount = 0;
- unsigned long i1, i2;
-
- for(i1=1; i1<=pcount; i1++)
- for(i2=i1; i2<=pcount; i2++)
- {
- unsigned long long result = (unsigned long long) p[i1] * p[i2];
- if(result >= limit)
- break;
- rcount++;
- }
-
- printf("%li\n", rcount);
-
- free(p);
- return 0;
-}
-
diff --git a/src/projecteuler/206.py b/src/projecteuler/206.py
deleted file mode 100644
index b3eddf4..0000000
--- a/src/projecteuler/206.py
+++ /dev/null
@@ -1,24 +0,0 @@
-
-positions = (2,4,6,8,10,12,14)
-result = "1_2_3_4_5_6_7_8_9_0"
-
-number = 1000000030
-state = True
-
-while number <= 3162277630:
- number += 40 if state else 60
- state = not state
-
- found = True
-
- square = str(number**2)
- for i in positions:
- if square[i] != result[i]:
- found = False
- break
-
- if found:
- break
-
-print number
-
diff --git a/src/projecteuler/common.c b/src/projecteuler/common.c
deleted file mode 100644
index 69f87c5..0000000
--- a/src/projecteuler/common.c
+++ /dev/null
@@ -1,154 +0,0 @@
-#include <stdlib.h>
-#include <string.h>
-
-// returns list of primes up to limit; count stored in first element
-extern unsigned long* primes(unsigned long limit)
-{
- unsigned long i = 2; // start sieving with 2
- unsigned long pos, x;
- char* numbers = (char*) malloc(limit*sizeof(char));
- unsigned long* primes;
- unsigned long primecount = 0;
- memset(numbers, 1, limit);
- numbers[0] = 0;
-
- while(i*i <= limit)
- {
- // sieve current prime
- x = i*i;
- while(x <= limit)
- {
- numbers[x-1] = 0;
- x += i;
- }
-
- // search next prime
- pos = i;
- while(++pos <= limit)
- {
- if(numbers[pos-1] == 1)
- break;
- }
- i = pos;
- }
-
- // count primes
- pos = 0;
- while(++pos <= limit)
- {
- if(numbers[pos-1] == 1)
- primecount++;
- }
-
- // create list of primes
- primes = (unsigned long*) malloc((primecount+1)*sizeof(unsigned long)); // store count at first element
- primes[0] = primecount;
- pos = 0;
- x = 1;
- while(++pos <= limit)
- {
- if(numbers[pos-1] == 1)
- primes[x++] = pos;
- }
-
- free(numbers);
- return primes;
-}
-
-extern int isprime(unsigned long number, const unsigned long* primes)
-{
- unsigned long count = primes[0];
- unsigned long pos = count/2 + 1;
- unsigned long dist = pos/2 + 1;
- unsigned long minpos = 0, maxpos = count;
-
- if(number > primes[count] || number < 2)
- return 0;
-
- // some kind of binary search...
- while(1)
- {
- if(number > primes[pos])
- {
- minpos = pos;
- pos += dist;
- }
- else if(number < primes[pos])
- {
- maxpos = pos;
- pos -= dist;
- }
- else
- return 1;
-
- dist /= 2;
-
- if(dist == 1)
- {
- while(++minpos <= maxpos)
- if(primes[minpos] == number)
- return 1;
- break;
- }
- }
-
- return 0;
-}
-
-extern unsigned long phi(unsigned long n, unsigned long* primelist)
-{
- double product = (double) n;
- unsigned long i;
-
- //if(isprime(n, primelist))
- // return n-1;
-
- for(i=1; i<=primelist[0]; i++)
- {
- unsigned long p = primelist[i];
- if(p > n)
- break;
- if(n % p != 0)
- continue;
- product *= (1 - 1.0/p);
- }
- return (unsigned long) product;
-}
-
-extern int ispermutation(unsigned long a, unsigned long b)
-{
- char digits1[10];
- char digits2[10];
- memset(digits1, 0, 10);
- memset(digits2, 0, 10);
-
- while(a > 0 && b > 0)
- {
- char d1 = a % 10;
- char d2 = b % 10;
- digits1[d1]++;
- digits2[d2]++;
- a /= 10;
- b /= 10;
- }
-
- if(a > 0 || b > 0)
- return 0;
-
- if(memcmp(digits1, digits2, 10) == 0)
- return 1;
-
- return 0;
-}
-
-/*int main()
-{
- long* p = primes(10000);
- //printf("%i\n", isprime(9973, p));
- int i;
- for(i=0; i<p[0]; i++)
- printf("%d: %d\n", p[i+1], isprime(p[i+1], p));
- free(p);
- return 0;
-}*/
-
diff --git a/src/projecteuler/common.h b/src/projecteuler/common.h
deleted file mode 100644
index 10b298e..0000000
--- a/src/projecteuler/common.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef COMMON_H
-#define COMMON_H
-
-unsigned long* primes(unsigned long limit);
-int isprime(unsigned long number, const unsigned long* primes);
-unsigned long phi(unsigned long n, unsigned long* primelist);
-int ispermutation(unsigned long a, unsigned long b);
-
-#endif // COMMON_H
diff --git a/src/projecteuler/common.py b/src/projecteuler/common.py
deleted file mode 100644
index 9ca2d9b..0000000
--- a/src/projecteuler/common.py
+++ /dev/null
@@ -1,145 +0,0 @@
-import math
-
-class sieve:
- def __init__(self, limit):
- self.limit = limit
- self.number_list = [False] + [True]*(self.limit-1)
- self.list_len = len(self.number_list)
-
- def next_prime(self, i):
- x = i+1
- while(x <= self.list_len):
- if self.number_list[x-1] == True:
- break
- x += 1
- return x
-
- def primes(self):
- i = 2
- while(i*i <= self.list_len):
- x = i*i
- while(x <= self.list_len):
- self.number_list[x-1] = False
- x += i
- i = self.next_prime(i)
-
- primeset = set()
- for i in xrange(1, self.limit+1):
- if self.number_list[i-1]:
- primeset.add(i)
- return primeset
-
-class pandigital:
- # create n-digit pandigital numbers
- def __init__(self, start, end):
- self.digits = set()
- for d in range(start, end+1):
- self.digits.add(d)
-
- # return set of digits that are not in x
- def missing(self, x):
- d = set()
- while x > 0:
- d.add(x % 10)
- x /= 10
- return self.digits - d
-
- def numbers(self, r):
- result = set()
- result |= self.digits
- for i in range(2, r):
- new = set()
- for x in result:
- for y in self.missing(x):
- new.add(x*10 + y)
- result |= new
- return result
-
-def ggt(a, b): # Stein's algorithm
- k = 0
- t = 0
- while a&1==0 and b&1==0:
- a = a>>1
- b = b>>1
- k += 1
- if a&1==1:
- t = -b
- else:
- t = a
- while t != 0:
- while t&1==0:
- t = t>>1
- if t>0:
- a = t
- else:
- b = -t
- t = a - b
- return a*(1<<k)
-
-def composite(n): # check if n = c^b
- primes = sieve(int(math.sqrt(n))+1).primes()
- for c in primes:
- number = c
- while number < n:
- number *= c
- if number == n:
- return True
- return False
-
-def order(n, r):
- res = n % r
- k = 1
- while res != 1:
- res = (res * n) % r
- k += 1
- return k
-
-def phi(x):
- primes = sieve(x+1).primes()
- product = x
- for p in primes:
- if x % p != 0:
- continue
- product *= (1 - 1.0/p)
- return int(product)
-
-
-def prime_test(n): # aks test
- if composite(n):
- return False
-
- logn = math.log(n, 2)
- o = 0
- r = 0
- while o <= logn:
- r += 1
- o = order(n, r)
-
- a = 1
- while a <= r:
- g = ggt(a, n)
- if g < n and g > 1:
- return False
- a += 1
-
- if n <= r*r:
- return True
-
- #for a in xrange(1, math.floor(math.sqrt(phi(r))*logn)):
- # # TODO if math.pow(x+a, n) !=
-
- return True
-
-def permutation(p, q): # checks whether p is a permuation of q
- digits_p = [0]*10
- digits_q = [0]*10
- while p > 0:
- digit = p % 10
- digits_p[digit] += 1
- p /= 10
- while q > 0:
- digit = q % 10
- digits_q[digit] += 1
- q /= 10
- return digits_p == digits_q
-