summaryrefslogtreecommitdiff
path: root/src/genetic
diff options
context:
space:
mode:
Diffstat (limited to 'src/genetic')
-rw-r--r--src/genetic/._main.cppbin0 -> 4096 bytes
-rw-r--r--src/genetic/GeneticDriver.java40
-rw-r--r--src/genetic/GeneticProcess.java24
-rwxr-xr-xsrc/genetic/Makefile26
-rw-r--r--src/genetic/ParallelChessGeneticProcess.java267
-rw-r--r--src/genetic/baseline.dna129
-rw-r--r--src/genetic/baseline.log370
-rw-r--r--src/genetic/gen0_0.dna57
-rw-r--r--src/genetic/gen0_seed0.dna57
-rw-r--r--src/genetic/gen0_seed1.dna57
-rw-r--r--src/genetic/gen0_seed2.dna57
-rw-r--r--src/genetic/gen0_seed3.dna57
-rw-r--r--src/genetic/gen0_seed4.dna57
-rw-r--r--src/genetic/gen0_seed5.dna57
-rw-r--r--src/genetic/gen0_seed6.dna57
-rw-r--r--src/genetic/gen0_seed7.dna57
-rw-r--r--src/genetic/gen0_seed8.dna57
-rw-r--r--src/genetic/main.cpp918
-rwxr-xr-xsrc/genetic/mutate.pl31
-rw-r--r--src/genetic/org/guru/wannabe/genetic/GeneticDriver.classbin0 -> 1367 bytes
-rw-r--r--src/genetic/org/guru/wannabe/genetic/GeneticProcess.classbin0 -> 269 bytes
-rw-r--r--src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1ChessGame.classbin0 -> 1312 bytes
-rw-r--r--src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1FileAndScore.classbin0 -> 1108 bytes
-rw-r--r--src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$2FileAndScore.classbin0 -> 1108 bytes
-rw-r--r--src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess.classbin0 -> 5848 bytes
-rw-r--r--src/genetic/position.binbin0 -> 40 bytes
-rw-r--r--src/genetic/position.lrn11
-rwxr-xr-xsrc/genetic/score_histogram.pl43
-rw-r--r--src/genetic/trial.ep_3520
-rwxr-xr-xsrc/genetic/typhoonbin0 -> 954368 bytes
30 files changed, 5949 insertions, 0 deletions
diff --git a/src/genetic/._main.cpp b/src/genetic/._main.cpp
new file mode 100644
index 0000000..c78eae5
--- /dev/null
+++ b/src/genetic/._main.cpp
Binary files differ
diff --git a/src/genetic/GeneticDriver.java b/src/genetic/GeneticDriver.java
new file mode 100644
index 0000000..5c09b03
--- /dev/null
+++ b/src/genetic/GeneticDriver.java
@@ -0,0 +1,40 @@
+/*
+ Copyright 2007 Scott Gasch
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you
+ may not use this file except in compliance with the License. You may
+ obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied. See the License for the specific language governing
+ permissions and limitations under the License.
+*/
+
+package org.guru.wannabe.genetic;
+
+public class GeneticDriver {
+ public static final int numGenerations = 5;
+ public static final int numPerGeneration = 32;
+
+ public static void main(String[] args) {
+ System.out.println("---BEGIN: Genetic simulation.");
+ GeneticProcess process = new ParallelChessGeneticProcess();
+ if (!process.mainInitialize(numGenerations, numPerGeneration)) {
+ throw new AssertionError("process.mainInitialize failed.");
+ }
+ for (int currentGeneration = 0;
+ currentGeneration < numGenerations;
+ currentGeneration++) {
+ System.out.println("---BEGIN: Generation " + currentGeneration);
+ process.generationInitialize(currentGeneration);
+ process.generationEvaluation(currentGeneration);
+ process.generationReproduction(currentGeneration);
+ System.out.println("---END: Generation " + currentGeneration);
+ }
+ System.out.println("---END: Genetic simulation.");
+ }
+}
diff --git a/src/genetic/GeneticProcess.java b/src/genetic/GeneticProcess.java
new file mode 100644
index 0000000..091ce03
--- /dev/null
+++ b/src/genetic/GeneticProcess.java
@@ -0,0 +1,24 @@
+/*
+ Copyright 2007 Scott Gasch
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you
+ may not use this file except in compliance with the License. You may
+ obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied. See the License for the specific language governing
+ permissions and limitations under the License.
+*/
+
+package org.guru.wannabe.genetic;
+
+public interface GeneticProcess {
+ boolean mainInitialize(int numGenerations, int numPerGeneration);
+ boolean generationInitialize(int currentGeneration);
+ boolean generationEvaluation(int currentGeneration);
+ boolean generationReproduction(int CurrentGeneration);
+}
diff --git a/src/genetic/Makefile b/src/genetic/Makefile
new file mode 100755
index 0000000..f927946
--- /dev/null
+++ b/src/genetic/Makefile
@@ -0,0 +1,26 @@
+# Makefile
+
+# Gdata required activation.jar and mail.jar; make this where you put them
+SHAREPATH= /usr/local/share/java/classes
+CLASSPATH= ./
+
+JFLAGS= -classpath $(CLASSPATH) -sourcepath ./ -d .
+JAVAC= javac $(JFLAGS) $(JCFLAGS) -Xlint:unchecked
+JAVA= java $(JFLAGS) $(JRFLAGS)
+
+JAVASRC= GeneticDriver.java GeneticProcess.java \
+ ParallelChessGeneticProcess.java
+CLASSES= $(JAVASRC:.java=.class)
+
+all : compile
+
+compile : $(JAVASRC)
+ $(JAVAC) $(JFLAGS) $(JAVASRC)
+
+doc :
+ mkdir -p doc
+ javadoc -d doc *.java
+
+clean :
+ rm -f $(CLASSES:.class='$$'*.class) $(CLASSES)
+ rm -fr doc
diff --git a/src/genetic/ParallelChessGeneticProcess.java b/src/genetic/ParallelChessGeneticProcess.java
new file mode 100644
index 0000000..75d9425
--- /dev/null
+++ b/src/genetic/ParallelChessGeneticProcess.java
@@ -0,0 +1,267 @@
+/*
+ Copyright 2007 Scott Gasch
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you
+ may not use this file except in compliance with the License. You may
+ obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied. See the License for the specific language governing
+ permissions and limitations under the License.
+*/
+
+package org.guru.wannabe.genetic;
+
+import java.io.*;
+import java.util.regex.*;
+
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class ParallelChessGeneticProcess implements GeneticProcess {
+ private static final int numProcessors = 4;
+ private static final String baselineDna = "./baseline.dna";
+ private static final String baselineLog = "./baseline.log";
+ private static final String scriptName = "./trial.ep_";
+
+ private int numGenerations;
+ private int numPerGeneration;
+ private int numSeeds;
+
+ // Helper function to emulate system(3).
+ private static void system(String cmd[]) {
+ Runtime runtime = Runtime.getRuntime();
+ try {
+ Process ps = runtime.exec(cmd);
+ InputStream stdin = ps.getInputStream();
+ InputStreamReader isr = new InputStreamReader(stdin);
+ BufferedReader br = new BufferedReader(isr);
+ String line = null;
+ while((line = br.readLine()) != null) ;
+ ps.waitFor();
+ } catch(Exception e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ // Private helpers to build filenames
+ private static String seedFilename(int generation, int which) {
+ return "./gen" + generation + "_seed" + which + ".dna";
+ }
+
+ private static String logFilename(int generation, int which) {
+ return "./gen" + generation + "_" + which + ".log";
+ }
+
+ private static String dnaFilename(int generation, int which) {
+ return "./gen" + generation + "_" + which + ".dna";
+ }
+
+ // Uses mutate.pl to cause dna mutations
+ private static void mutate(String from, String to) {
+ String cmd[] = new String[] { "./mutate.pl", from, to };
+ system(cmd);
+ try {
+ BufferedWriter out =
+ new BufferedWriter(new FileWriter(to, true));
+ out.write("# mutate " + from + " -> " + to + "\n");
+ out.close();
+ } catch(IOException e) {
+ throw new AssertionError(e);
+ }
+ }
+
+ // Runs a chess trial event
+ private static void chessTrial(String dnaFile, String logFile) {
+ String cmd[] = new String[] { "./typhoon",
+ "--cpus", "1",
+ "--hash", "128m",
+ "--batch",
+ "--logfile", logFile,
+ "--dnafile", dnaFile,
+ "--command", "script ./trial.ep_" };
+ system(cmd);
+ }
+
+ // The mainInitialize method produces the 0th generation DNA from
+ // a seed file called "baseline.dna" using a helper script called
+ // mutate.pl (the generic DNA mutation routine).
+ public boolean mainInitialize(int numGenerations,
+ int numPerGeneration) {
+
+ System.out.println("Performing pre-generation setup tasks.");
+ this.numGenerations = numGenerations;
+ this.numPerGeneration = numPerGeneration;
+ this.numSeeds = numPerGeneration / 5;
+ if ((numGenerations <= 0) ||
+ (numPerGeneration <= 0) ||
+ (numSeeds <= 0)) {
+ throw new IllegalArgumentException("Bad value");
+ }
+
+ // Create generation zero seeds based on mutations of baseline.dna
+ for (int x = 0; x < numSeeds; x++) {
+ String seedFile = seedFilename(0, x);
+ if (!new File(seedFile).exists()) {
+ mutate(baselineDna, seedFile);
+ } else {
+ System.out.println("Using existing " + seedFile);
+ }
+ }
+
+ // Run baseline.dna trial to get a starting point.
+ if (!new File(baselineLog).exists()) {
+ chessTrial(baselineDna, baselineLog);
+ } else {
+ System.out.println("Using existing " + baselineLog);
+ }
+ return true;
+ }
+
+ public boolean generationInitialize(int generationNumber) {
+
+ // Using the seed dna of the previous generation, build the
+ // genes for the current generation.
+ System.out.println("Initializing generation " + generationNumber);
+ for (int x = 0; x < numPerGeneration; x++) {
+ String dnaFile = dnaFilename(generationNumber, x);
+ String seedFile = seedFilename(generationNumber, x % numSeeds);
+ mutate(seedFile, dnaFile);
+ }
+ return true;
+ }
+
+ public boolean generationEvaluation(int generationNumber) {
+ class ChessGame implements Runnable {
+ public String dnaFile;
+ public String logFile;
+ public ChessGame(String dnaFile, String logFile) {
+ this.dnaFile = dnaFile; this.logFile = logFile;
+ }
+ public void run() {
+ if (!new File(logFile).exists()) {
+ System.out.println("Creating " + logFile);
+ chessTrial(dnaFile, logFile);
+ } else {
+ System.out.println("Using existing " + logFile);
+ }
+ }
+ }
+
+ // Populate work queue
+ System.out.println("Evaluating generation " + generationNumber);
+ List<ChessGame> workQueue = new ArrayList<ChessGame>();
+ for (int x = 0; x < numPerGeneration; x++) {
+ String dnaFile = dnaFilename(generationNumber, x);
+ String logFile = logFilename(generationNumber, x);
+ workQueue.add(new ChessGame(dnaFile, logFile));
+ }
+
+ // Depopulate the work queue in parallel
+ Thread threadPool[] = new Thread[numProcessors];
+ while(!workQueue.isEmpty()) {
+ ChessGame next = workQueue.remove(0);
+ int x = 0;
+ do {
+ if ((threadPool[x] == null) ||
+ (!threadPool[x].isAlive())) {
+ threadPool[x] = new Thread(next);
+ threadPool[x].setPriority(Thread.MAX_PRIORITY);
+ threadPool[x].start();
+ break;
+ }
+ x++;
+ if (x >= numProcessors) {
+ x = 0;
+ try {
+ Thread.sleep(2000);
+ } catch(Exception e) {
+ ;
+ }
+ }
+ }
+ while(true);
+ }
+
+ // Wait for all threads to become idle again
+ int x = 0;
+ do {
+ if (threadPool[x] != null && threadPool[x].isAlive()) {
+ x = 0;
+ }
+ x++;
+ try {
+ Thread.sleep(2000);
+ } catch(Exception e) {
+ ;
+ }
+ } while(x < numProcessors);
+ return true;
+ }
+
+ public boolean generationReproduction(int generationNumber) {
+
+ // Helper data class
+ class FileAndScore implements Comparable<FileAndScore> {
+ public final String file;
+ public final int score;
+ public final int number;
+ public FileAndScore(String file, int score, int number) {
+ this.file = file; this.score = score; this.number = number;
+ }
+ public int compareTo(FileAndScore other) {
+ return other.score - score;
+ }
+ }
+
+ System.out.println("Seeding subsequent generation.");
+ List<FileAndScore> scores = new ArrayList<FileAndScore>();
+ for (int x = 0; x < numPerGeneration; x++) {
+ String logFile = logFilename(generationNumber, x);
+ try {
+ BufferedReader log = new BufferedReader(
+ new FileReader(logFile));
+ String line = null;
+ Pattern p =
+ Pattern.compile("\\s+correct solutions\\s+:\\s+(\\d+)");
+ while ((line = log.readLine()) != null) {
+ Matcher m = p.matcher(line);
+ if (m.matches()) {
+ int score = Integer.parseInt(m.group(1));
+ FileAndScore fas =
+ new FileAndScore(logFile, score, x);
+ scores.add(fas);
+ break;
+ }
+ }
+ log.close();
+ }
+ catch (Exception e) {
+ throw new AssertionError(e);
+ }
+ }
+ java.util.Collections.sort(scores);
+ for (int x = 0; x < numSeeds; x++) {
+ FileAndScore breeder = scores.get(0);
+ scores.remove(0);
+ String dnaFile = dnaFilename(generationNumber, breeder.number);
+ String seedFile = seedFilename(generationNumber + 1, x);
+ if (!new File(seedFile).exists()) {
+ System.out.println("Number " + breeder.number + " got score " +
+ breeder.score + " and will propagate.");
+ String cmd[] = new String[] { "/bin/cp", "-f", dnaFile, seedFile };
+ system(cmd);
+ } else {
+ System.out.println("Using existing " + seedFile);
+ }
+ }
+ return true;
+ }
+}
diff --git a/src/genetic/baseline.dna b/src/genetic/baseline.dna
new file mode 100644
index 0000000..185d863
--- /dev/null
+++ b/src/genetic/baseline.dna
@@ -0,0 +1,129 @@
+# BEGIN MUTATION ALLOWED
+# Trade pieces/pawns
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+# END MUTATION ALLOWED
+# Reduced material down scaler
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+# Reduced material up scaler
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+# Passer material up scaler
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+# Pawn centrality bonus by location
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0,-10,0,0,0,0,0,0,0,0,-10,0,5,5,5,5,0,-10,0,0,0,0,0,0,0,0,-10,0,5,9,9,5,0,-10,0,0,0,0,0,0,0,0,-10,0,5,9,9,5,0,-10,0,0,0,0,0,0,0,0,-10,0,5,5,5,5,0,-10,0,0,0,0,0,0,0,0,-10,0,0,0,0,0,0,-10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# Backward shielded by location
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# Backward exposed by location
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# Doubled pawn penalty by count
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-48,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-14,-25,-39,-55,-73,-95,-121
+# Isolated pawn penalty by count
+0,-3,-7,-9,-16,-35,-50,-85,-100
+# Isolated pawn penalty by board file
+0,-8,-9,-10,-11,-11,-10,-9,-8
+# Isolated exposed base score
+-6
+# Isolated doubled base score
+-18
+# BEGIN MUTATION ALLOWED
+# Passer pawn by rank/color (reduced if enemy controls sq ahead)
+0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0
+# Candidate passer pawn by rank/color
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+# Connected passer pawn by rank/color (x2, one for each pawn)
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+# Supported passer pawn by rank/color
+0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0
+# END MUTATION ALLOWED
+# Outside passer pawn by how far outside
+0,0,7,14,21,28,34,41,55
+# BEGIN MUTATION ALLOWED
+# Passer bonus as material comes off
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# END MUTATION ALLOWED
+# Unstoppable passer
+800
+# Undeveloper minors in the opening
+0,-6,-10,-16,-22
+# Bishop over knight in the endgame by how open is the board
+33
+# Bishop pair value by number of pawns
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58,56,55,54,53,52,51,50,49,48,47,46,45,44,43,42,41
+# BEGIN MUTATION ALLOWED
+# Stationary pawns on bishop color
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5,-7,-7,-7,-7,-7,-7,-5,0,0,0,0,0,0,0,0,-7,-7,-8,-8,-8,-8,-7,-7,0,0,0,0,0,0,0,0,-8,-9,-10,-12,-12,-10,-9,-8,0,0,0,0,0,0,0,0,-8,-9,-10,-12,-12,-10,-9,-8,0,0,0,0,0,0,0,0,-7,-7,-8,-8,-8,-8,-7,-7,0,0,0,0,0,0,0,0,-5,-7,-7,-7,-7,-7,-7,-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# Transient pawns on bishop color
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# Bishop mobility by num squares
+-22,-15,-13,-8,-3,0,2,4,7,11,15,17,18,19
+# Bishop mobility num-in-a-row bonus
+-14,-6,1,4,6,7,9,11
+# END MUTATION ALLOWED
+# Outposted bishop by distance from eking
+0,38,30,18,8,4,0,-10,-16
+# Bishop in a closed position bonus
+15,15,15,15,14,14,13,12,11,10,9,7,5,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# Knight centrality by location
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+# Knight-eking tropism bonus
+0,15,12,9,5,0,0,0,0
+# Knight value as pawns come off
+-30,-24,-18,-12,-6,0,6,12,18
+# Outposted knight by distance from eking
+0,40,33,22,10,3,0,0,0
+# Knight on interesting square by rank/color
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12
+# BEGIN MUTATION ALLOWED
+# Knight mobility
+-17,-10,-6,0,3,6,8,9,10
+# Knight with N pawns supporting
+0,7,11
+# END MUTATION ALLOWED
+# Knight in a closed position
+0,0,0,0,0,0,2,4,6,8,9,10,11,12,13,14,16,18,19,20,20,21,21,22,22,23,23,24,24,25,25,26,27
+# Rook on full open file by distance from eking
+24,22,17,14,13,13,12,12
+# Rook on half open file with enemy pawn by distance from eking
+12,11,9,9,8,8,8,7
+# Rook on half open file with friend pawn by distance from eking
+13,12,11,11,9,9,9,8
+# Rook behind own passer by passer rank/color
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+# Rook leading own passer by passer rank/color
+0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0
+# King trapping friend rook
+-40
+# Rook trapping eking
+22
+# Rook value as pawns come off
+55,44,33,22,11,0,-12,-24,-36
+# Rooks connected vertically (x2)
+7
+# Rooks connected horizontally (x2)
+4
+# BEGIN MUTATION ALLOWED
+# Rook mobility by squares
+-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22
+# Rook mobility by n-in-a-row
+-15,-6,0,4,8,8,8,8
+# Queen mobility by squares
+-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23
+# END MUTATION ALLOWED
+# Queen out too early by num unmoved minors
+0,-14,-22,-26,-33
+# Queen eking tropism
+0,39,35,28,24,17,16,15
+# Queen attacking square next to eking (x #squares)
+8
+# Initial king safety counter by location/color
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+# Bring king to center by location
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+# BEGIN MUTATION ALLOWED
+# King pawn shield (x #pawns)
+15
+# King safety by counter
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-140,-160,-180,-200,-225,-250,-275,-300,-333,-366,-399,-433,-466,-499,-533,-566,-599,-600,-600,-600,-600,-600,-600,-600,-600,-600,-600
+# END MUTATION ALLOWED
+# King missing one castle option
+-23
diff --git a/src/genetic/baseline.log b/src/genetic/baseline.log
new file mode 100644
index 0000000..5c96888
--- /dev/null
+++ b/src/genetic/baseline.log
@@ -0,0 +1,370 @@
+Typhoon 1.00 (built on Jun 29 2008 15:18:00):
+ Copyright (C) 2000-2007, Scott Gasch ([email protected])
+ $Id: chess.h 353 2008-06-29 18:10:16Z scott $
+ GCC 4.0.1 (Apple Inc. build 5465)
+ Make profile used: -std=gnu99 -D_X86_ -DOSX -DGENETIC -g -O3 -fexpensive-optimizations -ffast-math -finline-functions -m32 -DPERF_COUNTERS -DMP -DSMP
+ Multiprocessor enabled; 1 searcher thread
+ Performance counters
+ Hash sizes: 64 Mb (main), 10 Mb / thread (pawn), 48 Mb / thread (eval)
+ QCheckPlies: 1
+ FutilityBase: 50
+ Logging Eval DNA.
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121
+0,-3,-7,-9,-16,-35,-50,-85,-100
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5
+-11
+0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0
+0,0,7,14,21,28,34,41,55
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+800
+0,-6,-10,-16,-22
+33
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9
+-10,-4,1,3,4,5,5,5
+0,33,28,18,8,4,0,-10,-16
+10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+0,15,12,9,4,0,0,0,0
+0,25,19,14,6,0,0,0,0
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12
+-17,-10,-6,0,3,5,7,8,8
+0,4,8
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27
+24,22,17,14,13,13,12,12
+12,11,9,9,8,8,8,7
+13,12,11,11,9,9,9,8
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0
+-40
+22
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+7
+4
+-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22
+-15,-6,0,4,8,8,8,8
+-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23
+0,-14,-22,-26,-33
+0,34,28,22,19,17,16,15
+8
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-23
+ IID R-factor: 2 ply
+INPUT SYSTEM INIT: Pushing "script ./trial.ep_
+"
+_white(move 1)_
+SCRIPT> st 20
+
+SCRIPT> easy
+
+SCRIPT> setboard 2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - -
+
+FEN: 2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - - 0 0
+
+
+ 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
+ +---------------------------------------+
+ 8 | |::::| *q |::::| *r |::::| *k |::::| 0x00
+ 7 |::::| *p |:*p:| *b |::::| |::::| | 0x10
+ 6 | *r |::::| |:*p:| |:.P:| *p |::::| 0x20
+ 5 |:*p:| |::::| |::::| *n |::::| *p | 0x30
+ 4 | |::::| .P |::::| *n |::::| |::::| 0x40
+ 3 |::::| |::::| |::::| .N |:.P:| .P | 0x50
+ 2 | .P |:.P:| |::::| |:.Q:| |:.K:| 0x60
+ 1 |::::| |:.B:| .R |:.R:| .B |::::| | 0x70
+ +---------------------------------------+
+ A B C D E F G H
+
+
+SCRIPT> solution f7+
+
+SCRIPT> id "ECM.001"
+
+SCRIPT> go
+
+The root position is: 2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - - 0 0
+SetMoveTimer: Soft time limit 00:20.000 seconds.
+SetMoveTimer: Hard time limit 00:20.000 seconds.
+ 7 +2.98 00:00.365 184386 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg8 Nxe4 Ba4 b3
+ 8 +3.13 00:00.684 375962 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg8 Nxe4 Ba4 Nf6+ Kg7 b3 Bxb3 axb3 Kxf6
+ 9 +3.35 00:02.259 1314795 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg8 Nxe4 Ba4 Re1 Kh8 Bg5
+10 +3.58 00:04.394 2477084 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kf8 Nxe4 Ba4 Re1 Kg7 b3 Bc6 Bb2+ Kh7
+11 +3.64 00:08.367 4600580 f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg7 Nxe4 Bc6 Bd3 Qe8 Ng5 Qe5 Bf4
+SOFT TIMER (20.1 sec) --> stop searching now
+move f7+
+---------------------------------------------
+Searched for 20.1 seconds, saw 10616832 nodes (8908964 qnodes) (527305 nps).
+tellothers d11, +3.64, 20.1s, 527knps, PV=f7+ Kxf7 Rxe4 Rxe4 Ng5+ Kg7 Nxe4 Bc6 Bd3 Qe8 Ng5 Qe5 Bf4
+Hashing percentages: (37.045 total, 13.886 useful)
+Pawn hash hitrate: 99.416 percent.
+Null move cutoff rate: 77.853 percent.
+First move beta cutoff rate was 93.652 percent.
+Eval percentages: ( 8.46 hash, 69.90 lazy, 21.64 full)
+Extensions: (303079 +, 137182 q+, 23377 1mv, 5339 !kmvs, 1374 mult+, 4112 pawn
+ 6087 threat, 0 zug, 1679 sing, 2 endg, 2644 bm, 8898 recap)
+Problem "ECM.001" solved in 0.0 sec.
+Current suite score: 1 correct of 1 problems.
+SCRIPT> setboard 7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - -
+
+FEN: 7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - - 0 0
+
+
+ 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
+ +---------------------------------------+
+ 8 | |::::| |::::| |::::| |:*r:| 0x00
+ 7 |::::| *p |::::| |:*k:| |::::| | 0x10
+ 6 | |::::| *b |:*p:| *p |::::| |::::| 0x20
+ 5 |:*p:| |::::| |:*n:| *p |::::| | 0x30
+ 4 | .P |::::| .P |:.R:| |::::| |::::| 0x40
+ 3 |::::| |:.N:| |::::| .P |:.P:| | 0x50
+ 2 | |:.P:| |::::| |::::| .K |::::| 0x60
+ 1 |::::| |::::| .B |::::| |::::| | 0x70
+ +---------------------------------------+
+ A B C D E F G H
+
+
+SCRIPT> solution Bxf3+
+
+SCRIPT> id "ECM.002"
+
+SCRIPT> go
+
+The root position is: 7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - - 0 0
+SetMoveTimer: Soft time limit 00:20.000 seconds.
+SetMoveTimer: Hard time limit 00:20.000 seconds.
+ 9 +2.48 00:00.164 117472 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kg2 Nxd4 g4 f4 g5 e5
+10 +2.25 00:00.348 262726 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 f4 g5 f3 g6
+11 +2.47 00:00.752 576332 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 f4 g5 e5 Kg4 Kf7
+12 +2.20 00:01.258 987310 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 f4 g5 e5 Ne4 Ke6 g6
+13 +2.47 00:03.330 2593758 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 f4 g5 e5 Kg4 Ke6 g6 Kf6
+14 +2.20 00:05.220 4166374 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 Kf6 gxf5 Kxf5 Kg2 e5 Kf2 e4 Ke3
+15 +2.28 00:12.333 9835420 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 Kf6 gxf5 Kxf5 Kg3 e5 Kf2 <TT> e4 Nd5 Ke5
+16 +2.30 00:19.914 16085480 Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 Kf6 gxf5 Kxf5 Kg2 Nb3 Nd1 Nc5 Nc3 Nd3 Nb5
+HARD TIMER (20.1 sec) --> stop searching now
+move Bxf3+
+---------------------------------------------
+Searched for 20.1 seconds, saw 16252928 nodes (12457309 qnodes) (807319 nps).
+tellothers d16, +2.30, 20.1s, 807knps, PV=Bxf3+ Bxf3 Rh2+ Kxh2 Nxf3+ Kh3 Nxd4 g4 Kf6 gxf5 Kxf5 Kg2 Nb3 Nd1 Nc5 Nc3 Nd3 Nb5
+Hashing percentages: (54.754 total, 26.571 useful)
+Pawn hash hitrate: 98.837 percent.
+Null move cutoff rate: 83.429 percent.
+First move beta cutoff rate was 96.057 percent.
+Eval percentages: (11.20 hash, 71.63 lazy, 17.16 full)
+Extensions: (461475 +, 41902 q+, 2821 1mv, 401 !kmvs, 636 mult+, 4863 pawn
+ 699 threat, 18 zug, 290 sing, 21674 endg, 5357 bm, 10418 recap)
+Problem "ECM.002" solved in 0.1 sec.
+Current suite score: 2 correct of 2 problems.
+SCRIPT> setboard 4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - -
+
+FEN: 4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - - 0 0
+
+
+ 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
+ +---------------------------------------+
+ 8 | |::::| |::::| *k |::::| |::::| 0x00
+ 7 |:*p:| |:.P:| |::::| |:*p:| | 0x10
+ 6 | |::::| *q |::::| *n |:*p:| |:*p:| 0x20
+ 5 |::::| |::::| .N |::::| |::::| | 0x30
+ 4 | |::::| |::::| |::::| |::::| 0x40
+ 3 |::::| .Q |::::| |::::| .P |:.P:| | 0x50
+ 2 | |::::| |::::| |::::| .K |:.P:| 0x60
+ 1 |::::| |::::| |::::| |::::| | 0x70
+ +---------------------------------------+
+ A B C D E F G H
+
+
+SCRIPT> solution Qb5
+
+SCRIPT> id "ECM.003"
+
+SCRIPT> go
+
+The root position is: 4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - - 0 0
+SetMoveTimer: Soft time limit 00:20.000 seconds.
+SetMoveTimer: Hard time limit 00:20.000 seconds.
+ 5 +1.12 00:00.196 136405 Qb8+ Kd7 Qg8 g5 c8=Q+ Qxc8 Nxf6+ Kc7 Qf7+ Kb8 Nd7+ Kc7 Qxe6 Qxd7 Qxh6
+ 5 +1.33 00:00.275 197327 Nb4 Qd7 Qd5 Nxc7 Qg8+ Ke7 Qxg7+ Kd8 Qxh6
+ 5+ +2.92 00:00.334 242098 Qb5 ++
+ 5 +2.76 00:00.335 242668 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5
+ 6 +2.76 00:00.338 245531 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5
+ 7 +2.76 00:00.490 369773 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5
+ 8 +2.72 00:00.936 734352 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 f4+ Ke4 Nxb5
+ 9 +2.60 00:02.860 2302612 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 f4+ Ke4 Nxb5 a5 Nc3+ Kd4
+10 +2.60 00:05.762 4811455 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 f4+ Ke4 Nxb5 a5 Nc3+ Kd4
+11 +2.64 00:16.020 13521099 Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5 a5 Kf2 g6 Nc3 Kd4
+HARD TIMER (20.2 sec) --> stop searching now
+move Qb5
+---------------------------------------------
+Searched for 20.2 seconds, saw 16777218 nodes (13737368 qnodes) (831574 nps).
+tellothers d11, +2.64, 20.2s, 832knps, PV=Qb5 Qxb5 c8=Q+ Kf7 Qxe6+ Kxe6 Nc7+ Ke5 Nxb5 a5 Kf2 g6 Nc3 Kd4
+Hashing percentages: (49.643 total, 23.838 useful)
+Pawn hash hitrate: 99.845 percent.
+Null move cutoff rate: 84.497 percent.
+First move beta cutoff rate was 97.183 percent.
+Eval percentages: ( 5.57 hash, 88.54 lazy, 5.89 full)
+Extensions: (998642 +, 365387 q+, 40580 1mv, 2227 !kmvs, 773 mult+, 194 pawn
+ 4448 threat, 0 zug, 8001 sing, 15206 endg, 10689 bm, 3168 recap)
+Problem "ECM.003" solved in 0.3 sec.
+Current suite score: 3 correct of 3 problems.
+SCRIPT> setboard 2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - -
+
+FEN: 2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - - 0 0
+
+
+ 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
+ +---------------------------------------+
+ 8 | |::::| *r |::::| *b |::::| *k |::::| 0x00
+ 7 |:.R:| |::::| |::::| *p |:*p:| | 0x10
+ 6 | |::::| |::::| *p |:*b:| |:*p:| 0x20
+ 5 |::::| *p |:.B:| *r |::::| |::::| | 0x30
+ 4 | |:.P:| *q |::::| |:.P:| |::::| 0x40
+ 3 |::::| |::::| .N |::::| |::::| | 0x50
+ 2 | |::::| .P |:.Q:| |::::| .P |:.P:| 0x60
+ 1 |::::| |::::| |::::| .R |:.K:| | 0x70
+ +---------------------------------------+
+ A B C D E F G H
+
+
+SCRIPT> solution Rcxc5
+
+SCRIPT> id "ECM.004"
+
+SCRIPT> go
+
+The root position is: 2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - - 0 0
+SetMoveTimer: Soft time limit 00:20.000 seconds.
+SetMoveTimer: Hard time limit 00:20.000 seconds.
+ 7 +1.28 00:00.241 128871 Bd4+ Bxd4 Qxd4+ Qf2 Rxc2 Qxd4 Rxd4 Rd1 f6
+ 7+ +1.90 00:00.406 230629 Bd4+ Bxd4 Qxd4+ Qf2 Rxc2 Qxd4 Rxd4 Rd1 f6 ++
+ 7 +3.31 00:00.473 269299 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 c3
+ 8 +3.54 00:00.762 457282 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Rd1 Bc6
+ 9 +3.45 00:01.279 775279 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 f5 e5 Re1
+10 +3.54 00:02.287 1455118 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Rd1 Qf2 Rf1 Qc5
+11 +3.38 00:03.973 2655301 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Qd6 g6 h3 Bd4 Rd1
+12 +3.54 00:07.504 5112945 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Qe4 Bd4 Rd1 Bc3 h3 Qf2
+13 +3.58 00:14.106 9751497 Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Qd6 Qa8 h3 Bc6 Rg1 Kh7 Qd3+ Be4 Qxb5 Bxc2
+SOFT TIMER (20.1 sec) --> stop searching now
+move Rcxc5
+---------------------------------------------
+Searched for 20.1 seconds, saw 14286848 nodes (11078116 qnodes) (710896 nps).
+tellothers d13, +3.58, 20.1s, 711knps, PV=Rcxc5 bxc5 Rxd3 Qxd3 Qxc5+ Kh1 Qxa7 Qd6 Qa8 h3 Bc6 Rg1 Kh7 Qd3+ Be4 Qxb5 Bxc2
+Hashing percentages: (54.802 total, 27.084 useful)
+Pawn hash hitrate: 99.661 percent.
+Null move cutoff rate: 80.447 percent.
+First move beta cutoff rate was 94.013 percent.
+Eval percentages: ( 7.93 hash, 81.56 lazy, 10.50 full)
+Extensions: (242731 +, 147017 q+, 10540 1mv, 11362 !kmvs, 273 mult+, 1569 pawn
+ 4886 threat, 25 zug, 3489 sing, 19 endg, 12049 bm, 5871 recap)
+Problem "ECM.004" solved in 0.5 sec.
+Current suite score: 4 correct of 4 problems.
+SCRIPT> setboard 6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - -
+
+FEN: 6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - 0 0
+
+
+ 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
+ +---------------------------------------+
+ 8 | |::::| |::::| |::::| *k |::::| 0x00
+ 7 |:*p:| |:*q:| *b |::::| *p |::::| *p | 0x10
+ 6 | |:*p:| |::::| |:*n:| *p |::::| 0x20
+ 5 |::::| |:*b:| |::::| *p |::::| | 0x30
+ 4 | |::::| .B |::::| |::::| |::::| 0x40
+ 3 |::::| |:.P:| |::::| |:.N:| | 0x50
+ 2 | .P |:.P:| |::::| .Q |:.P:| .P |:.P:| 0x60
+ 1 |::::| |::::| |:.N:| |:.K:| | 0x70
+ +---------------------------------------+
+ A B C D E F G H
+
+
+SCRIPT> solution Bxf2+
+
+SCRIPT> id "ECM.005"
+
+SCRIPT> go
+
+The root position is: 6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - - 0 0
+SetMoveTimer: Soft time limit 00:20.000 seconds.
+SetMoveTimer: Hard time limit 00:20.000 seconds.
+ 7 +0.99 00:00.173 97919 Bxf2+ Qxf2 Qxc4 Qd4 Qc6 Nf3 h6 c4
+ 8 +1.07 00:00.357 216878 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Nd5 Qe5 Qxe5 Nxe5
+ 9 +1.07 00:00.646 411939 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Nd5 Qe5 Qxe5 Nxe5
+10 +1.01 00:01.439 944061 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Nd5 c4 Qe3+ Qxe3 Nxe3 Ne5
+11 +1.02 00:02.977 2004691 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Nd5 c4 Qe3+ Qxe3 Nxe3 Ne5 Ba4
+12 +0.98 00:06.061 4098991 Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Ne8 b3 f6 c4 g5 Kh1 <TT> f4
+SOFT TIMER (20.0 sec) --> stop searching now
+move Bxf2+
+---------------------------------------------
+Searched for 20.0 seconds, saw 13631488 nodes (11086938 qnodes) (680902 nps).
+tellothers d12, +0.98, 20.0s, 681knps, PV=Bxf2+ Qxf2 Qxc4 Qd4 Qe6 Nf3 Ne8 b3 f6 c4 g5 Kh1 <TT> f4
+Hashing percentages: (31.320 total, 14.951 useful)
+Pawn hash hitrate: 98.692 percent.
+Null move cutoff rate: 75.182 percent.
+First move beta cutoff rate was 94.965 percent.
+Eval percentages: ( 6.34 hash, 78.69 lazy, 14.97 full)
+Extensions: (404449 +, 155342 q+, 9621 1mv, 17129 !kmvs, 998 mult+, 3515 pawn
+ 6103 threat, 15 zug, 5503 sing, 6067 endg, 12601 bm, 8911 recap)
+Problem "ECM.005" solved in 0.1 sec.
+Current suite score: 5 correct of 5 problems.
+SCRIPT> setboard 3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - -
+
+FEN: 3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - - 0 0
+
+
+ 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07
+ +---------------------------------------+
+ 8 | |::::| |:*q:| |::::| |::::| 0x00
+ 7 |:*p:| *p |::::| |::::| *p |:*k:| *p | 0x10
+ 6 | |::::| |::::| |:*n:| *p |:.N:| 0x20
+ 5 |::::| |:*b:| *p |:*r:| |:.B:| | 0x30
+ 4 | |::::| |::::| *r |::::| |::::| 0x40
+ 3 |::::| |:.P:| |::::| .Q |::::| | 0x50
+ 2 | .P |:.P:| |::::| |:.P:| .P |:.P:| 0x60
+ 1 |:.R:| |::::| |::::| .R |:.K:| | 0x70
+ +---------------------------------------+
+ A B C D E F G H
+
+
+SCRIPT> solution Bxf6+
+
+SCRIPT> id "ECM.006"
+
+SCRIPT> go
+
+The root position is: 3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - - 0 0
+SetMoveTimer: Soft time limit 00:20.000 seconds.
+SetMoveTimer: Hard time limit 00:20.000 seconds.
+ 7 +0.99 00:00.284 179093 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 dxe4
+ 8 +1.25 00:00.553 377491 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 Rad1
+ 9 +1.05 00:01.062 761451 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 Rad1 Re2
+10 +1.21 00:01.884 1386628 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 b4 Bb6 Rad1
+11 +0.97 00:03.816 2860869 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 b4 Bb6 Rad1 Re2
+12 +1.12 00:08.716 6383777 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 b4 Bb6 Kg2 Re2 Kf3
+13 +1.10 00:15.549 11572369 Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 Kg2 Re2 b4 Bb6 <TT> Rad1
+HARD TIMER (20.0 sec) --> stop searching now
+move Bxf6+
+---------------------------------------------
+Searched for 20.0 seconds, saw 14680066 nodes (11319222 qnodes) (732823 nps).
+tellothers d13, +1.10, 20.0s, 733knps, PV=Bxf6+ Qxf6 Ng4 Qxf3 gxf3 Rg5 fxe4 Rxg4+ Kh1 Rxe4 Kg2 Re2 b4 Bb6 <TT> Rad1
+Hashing percentages: (53.520 total, 26.213 useful)
+Pawn hash hitrate: 98.553 percent.
+Null move cutoff rate: 84.810 percent.
+First move beta cutoff rate was 96.523 percent.
+Eval percentages: ( 6.98 hash, 83.44 lazy, 9.58 full)
+Extensions: (375467 +, 183351 q+, 44761 1mv, 9029 !kmvs, 1761 mult+, 580 pawn
+ 3970 threat, 2 zug, 5124 sing, 5803 endg, 9894 bm, 7604 recap)
diff --git a/src/genetic/gen0_0.dna b/src/genetic/gen0_0.dna
new file mode 100644
index 0000000..17f913b
--- /dev/null
+++ b/src/genetic/gen0_0.dna
@@ -0,0 +1,57 @@
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8,
+7,7,7,7,7,7,7,7,7,6,6,6,6,5,5,4,3,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121
+0,-2,-6,-7,-14,-30,-44,-74,-88,
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5,
+-11
+0,0,190,130,72,42,21,15,0,0,0,15,21,42,72,130,190,0,
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0
+0,0,7,14,21,28,34,41,55
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+800
+0,-6,-10,-16,-22
+33
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-9,-9,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-9,-9,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9,
+-10,-4,1,3,4,5,5,5
+0,33,28,18,8,4,0,-10,-16
+8,8,8,7,7,6,6,5,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+0,15,12,9,4,0,0,0,0
+0,25,19,14,6,0,0,0,0
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12
+-17,-10,-6,0,3,5,7,8,8
+0,4,8
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27
+24,22,17,14,13,13,12,12
+13,12,10,10,9,9,9,7,
+10,9,9,9,7,7,7,6,
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+0,0,-23,-17,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-17,-23,0,
+-36,
+22
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+7
+4,
+-30,-25,-21,-15,-7,-2,0,4,8,12,16,18,20,22,23,
+-15,-6,0,4,8,8,8,8
+-26,-23,-19,-15,-9,-7,-3,-1,0,1,3,6,8,10,12,13,14,15,16,16,17,17,18,18,19,19,20,20,
+0,-14,-22,-26,-33
+0,40,33,25,22,20,18,17,
+7,
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,5,5,4,2,0,0,0,0,0,0,0,0,0,2,4,11,12,12,11,4,2,0,0,0,0,0,0,0,0,4,5,14,19,19,14,5,4,0,0,0,0,0,0,0,0,4,5,14,19,19,14,5,4,0,0,0,0,0,0,0,0,2,4,11,12,12,11,4,2,0,0,0,0,0,0,0,0,0,2,4,5,5,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-19,
+# mutate ./baseline.dna -> ./gen0_seed0.dna
diff --git a/src/genetic/gen0_seed0.dna b/src/genetic/gen0_seed0.dna
new file mode 100644
index 0000000..393454c
--- /dev/null
+++ b/src/genetic/gen0_seed0.dna
@@ -0,0 +1,57 @@
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+7,7,7,7,7,7,7,7,7,6,6,6,6,5,5,4,3,2,2,2,1,1,1,0,0,0,0,0,0,0,0,0,
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121
+0,-2,-6,-7,-14,-30,-44,-74,-88,
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5,
+-11
+0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0
+0,0,7,14,21,28,34,41,55
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+800
+0,-6,-10,-16,-22
+33
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9,
+-10,-4,1,3,4,5,5,5
+0,33,28,18,8,4,0,-10,-16
+9,9,9,8,8,7,7,6,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+0,15,12,9,4,0,0,0,0
+0,25,19,14,6,0,0,0,0
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12
+-17,-10,-6,0,3,5,7,8,8
+0,4,8
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27
+24,22,17,14,13,13,12,12
+12,11,9,9,8,8,8,7
+13,12,11,11,9,9,9,8
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+0,0,-23,-17,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-17,-23,0,
+-36,
+22
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+7
+4
+-30,-25,-21,-15,-7,-2,0,4,8,12,16,18,20,22,23,
+-15,-6,0,4,8,8,8,8
+-26,-23,-19,-15,-9,-7,-3,-1,0,1,3,6,8,10,12,13,14,15,16,16,17,17,18,18,19,19,20,20,
+0,-14,-22,-26,-33
+0,40,33,25,22,20,18,17,
+7,
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,5,5,4,2,0,0,0,0,0,0,0,0,0,2,4,11,12,12,11,4,2,0,0,0,0,0,0,0,0,4,5,14,19,19,14,5,4,0,0,0,0,0,0,0,0,4,5,14,19,19,14,5,4,0,0,0,0,0,0,0,0,2,4,11,12,12,11,4,2,0,0,0,0,0,0,0,0,0,2,4,5,5,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-23
+# mutate ./baseline.dna -> ./gen0_seed0.dna
diff --git a/src/genetic/gen0_seed1.dna b/src/genetic/gen0_seed1.dna
new file mode 100644
index 0000000..ec279f8
--- /dev/null
+++ b/src/genetic/gen0_seed1.dna
@@ -0,0 +1,57 @@
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,0,0,0,0,0,0,-7,0,0,0,0,0,0,0,0,-7,0,4,4,4,4,0,-7,0,0,0,0,0,0,0,0,-7,0,4,8,8,4,0,-7,0,0,0,0,0,0,0,0,-7,0,4,8,8,4,0,-7,0,0,0,0,0,0,0,0,-7,0,4,4,4,4,0,-7,0,0,0,0,0,0,0,0,-7,0,0,0,0,0,0,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121
+0,-3,-7,-9,-16,-35,-50,-85,-100
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5
+-11
+0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,64,43,13,6,3,1,0,0,0,1,3,6,13,43,64,0,
+0,0,7,14,21,28,34,41,55
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+706,
+0,-6,-10,-16,-22
+33
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9
+-10,-4,1,3,4,5,5,5
+0,33,28,18,8,4,0,-10,-16
+10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+0,15,12,9,4,0,0,0,0
+0,25,19,14,6,0,0,0,0
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12,
+-17,-10,-6,0,3,5,7,8,8
+0,4,8
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27
+24,22,17,14,13,13,12,12,
+10,9,8,8,7,7,7,6,
+13,12,11,11,9,9,9,8
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0
+-40
+22
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+7,
+4
+-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22
+-15,-6,0,4,8,8,8,8
+-32,-28,-23,-18,-11,-8,-4,-2,-1,2,4,7,10,12,15,16,17,18,19,20,21,21,22,22,23,23,24,24,
+0,-14,-22,-26,-33
+0,34,28,22,19,17,16,15
+8
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-22,
+# mutate ./baseline.dna -> ./gen0_seed1.dna
diff --git a/src/genetic/gen0_seed2.dna b/src/genetic/gen0_seed2.dna
new file mode 100644
index 0000000..e9efe52
--- /dev/null
+++ b/src/genetic/gen0_seed2.dna
@@ -0,0 +1,57 @@
+0,78,70,63,58,53,49,45,43,43,43,43,43,43,43,43,0,0,108,101,94,86,78,72,67,61,57,57,57,57,57,57,57,0,0,130,114,107,100,94,88,81,75,66,66,66,66,66,66,66,0,
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36,
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121
+0,-3,-7,-9,-16,-35,-50,-85,-100
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5
+-11
+0,0,156,107,59,34,17,12,0,0,0,12,17,34,59,107,156,0,
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0
+0,0,7,14,21,28,34,41,55
+51,0,0,32,0,37,16,0,12,7,17,3,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+682,
+0,-6,-10,-16,-22
+34,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,-2,-3,-3,-3,-3,-3,-3,-2,0,0,0,0,0,0,0,0,-3,-4,-6,-7,-7,-6,-4,-3,0,0,0,0,0,0,0,0,-3,-4,-6,-7,-7,-6,-4,-3,0,0,0,0,0,0,0,0,-2,-3,-3,-3,-3,-3,-3,-2,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9
+-10,-4,1,3,4,5,5,5
+0,33,28,18,8,4,0,-10,-16
+10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+0,15,12,9,4,0,0,0,0
+0,22,17,12,5,0,0,0,0,
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12
+-17,-10,-6,0,3,5,7,8,8
+0,4,8
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27
+25,23,17,14,13,13,12,12,
+12,11,9,9,8,8,8,7
+13,12,11,11,9,9,9,8
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0
+-40
+22
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+6,
+4
+-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22
+-15,-6,0,4,8,8,8,8
+-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23
+0,-14,-22,-26,-33
+0,34,28,22,19,17,16,15
+8
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-23,
+# mutate ./baseline.dna -> ./gen0_seed2.dna
diff --git a/src/genetic/gen0_seed3.dna b/src/genetic/gen0_seed3.dna
new file mode 100644
index 0000000..dfe3e08
--- /dev/null
+++ b/src/genetic/gen0_seed3.dna
@@ -0,0 +1,57 @@
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-11,-8,-8,-10,-10,-8,-8,-11,0,0,0,0,0,0,0,0,-8,-6,-6,-8,-8,-6,-6,-8,0,0,0,0,0,0,0,0,-6,-5,-5,-6,-6,-5,-5,-6,0,0,0,0,0,0,0,0,-6,-5,-5,-6,-6,-5,-5,-6,0,0,0,0,0,0,0,0,-8,-6,-6,-8,-8,-6,-6,-8,0,0,0,0,0,0,0,0,-11,-8,-8,-10,-10,-8,-8,-11,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,-27,-55,-84,-114,-145,-177,-210,-248,0,-19,-40,-65,-92,-123,-157,-198,-248,0,-7,-16,-26,-39,-54,-73,-95,-122,0,-6,-11,-21,-33,-47,-62,-81,-103,
+0,-3,-7,-9,-16,-35,-50,-85,-100
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5
+-11
+0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,69,46,15,6,3,1,0,0,0,1,3,6,15,46,69,0,
+0,0,7,14,21,28,34,41,55
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+800
+0,-5,-9,-15,-20,
+33
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-25,-16,-11,-5,-1,0,1,3,4,5,7,8,9,10,
+-10,-4,1,3,4,5,5,5
+0,35,30,19,8,4,0,-10,-17,
+10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+0,15,12,9,4,0,0,0,0
+0,25,19,14,6,0,0,0,0
+0,13,12,10,6,3,0,0,0,0,0,0,0,3,6,10,12,13,
+-17,-10,-6,0,3,5,7,8,8
+0,4,8
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,10,12,13,15,17,19,22,24,24,25,25,26,26,27,27,28,28,30,31,
+24,22,17,14,13,13,12,12
+12,11,9,9,8,8,8,7
+13,12,11,11,9,9,9,8
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+0,0,-26,-18,-15,-10,-5,-3,0,0,0,-3,-5,-10,-15,-18,-26,0,
+-33,
+18,
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+6,
+4,
+-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22
+-15,-6,0,4,8,8,8,8,
+-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23
+0,-14,-22,-26,-33
+0,34,28,22,19,17,16,15,
+8
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-23
+# mutate ./baseline.dna -> ./gen0_seed3.dna
diff --git a/src/genetic/gen0_seed4.dna b/src/genetic/gen0_seed4.dna
new file mode 100644
index 0000000..4b6a92e
--- /dev/null
+++ b/src/genetic/gen0_seed4.dna
@@ -0,0 +1,57 @@
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-36,-12,0,2,5,8,12,17,23,-52,-20,0,3,7,11,15,20,26,-8,0,0,5,12,16,20,24,30,
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+7,7,7,7,7,7,6,6,6,5,6,4,3,4,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-3,-2,-2,-3,-3,-2,-2,-3,0,0,0,0,0,0,0,0,-3,-2,-2,-3,-3,-2,-2,-3,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-31,-63,-97,-131,-167,-203,-241,-285,0,-22,-46,-74,-106,-141,-181,-228,-285,0,-8,-18,-30,-45,-62,-84,-109,-140,0,-6,-12,-24,-38,-54,-71,-93,-119,
+0,-3,-7,-9,-16,-35,-50,-85,-100
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5
+-11,
+0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0
+0,0,7,14,21,28,34,41,55
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+800
+0,-6,-10,-16,-22
+33
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55,54,53,52,51,50,49,47,45,42,41,41,41,41,41,41,41,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9
+-10,-4,1,3,4,5,5,5
+0,33,28,18,8,4,0,-10,-16
+10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+0,15,12,9,4,0,0,0,0
+0,25,19,14,6,0,0,0,0
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12,
+-17,-10,-6,0,3,5,7,8,8
+0,4,8,
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,28,
+24,22,17,14,13,13,12,12
+9,9,7,7,6,6,6,5,
+13,12,11,11,9,9,9,8
+0,0,24,16,11,5,0,0,0,0,0,0,0,5,11,16,24,0,
+0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0
+-40
+22
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+7
+4
+-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22
+-15,-6,0,4,8,8,8,8
+-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23
+0,-14,-23,-27,-35,
+0,34,28,22,19,17,16,15
+8
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-23
+# mutate ./baseline.dna -> ./gen0_seed4.dna
diff --git a/src/genetic/gen0_seed5.dna b/src/genetic/gen0_seed5.dna
new file mode 100644
index 0000000..81b587b
--- /dev/null
+++ b/src/genetic/gen0_seed5.dna
@@ -0,0 +1,57 @@
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,5,6,6,6,6,6,6,6,6,6,6,6,6,
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121
+0,-3,-7,-9,-16,-35,-50,-85,-100
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5
+-11
+0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0
+0,0,7,14,21,28,34,41,55
+63,-1,-1,39,-1,45,20,-1,14,9,21,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+800
+0,-6,-10,-16,-22
+33
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9
+-10,-4,1,3,4,5,5,5
+0,38,32,20,9,4,0,-11,-18,
+10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+-9,-6,-6,-6,-6,-6,-6,-9,0,0,0,0,0,0,0,0,-6,-1,-1,0,0,-1,-1,-6,0,0,0,0,0,0,0,0,-6,-1,3,4,4,3,-1,-6,0,0,0,0,0,0,0,0,-6,-1,4,6,6,4,-1,-6,0,0,0,0,0,0,0,0,-6,-1,4,6,6,4,-1,-6,0,0,0,0,0,0,0,0,-6,-1,3,4,4,3,-1,-6,0,0,0,0,0,0,0,0,-6,-1,-1,0,0,-1,-1,-6,0,0,0,0,0,0,0,0,-9,-6,-6,-6,-6,-6,-6,-9,0,0,0,0,0,0,0,0,
+0,13,10,8,3,0,0,0,0,
+0,25,19,14,6,0,0,0,0
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12
+-16,-9,-5,0,2,4,6,7,7,
+0,4,8
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27
+24,22,17,14,13,13,12,12
+12,11,9,9,8,8,8,7
+13,12,11,11,9,9,9,8
+0,0,24,16,11,5,0,0,0,0,0,0,0,5,11,16,24,0,
+0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0
+-40
+22
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+7
+4
+-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22
+-15,-6,0,4,8,8,8,8
+-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23
+0,-11,-17,-21,-26,
+0,34,28,22,19,17,16,15
+7,
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,4,6,6,4,2,0,0,0,0,0,0,0,0,0,2,4,12,14,14,12,4,2,0,0,0,0,0,0,0,0,4,6,16,21,21,16,6,4,0,0,0,0,0,0,0,0,4,6,16,21,21,16,6,4,0,0,0,0,0,0,0,0,2,4,12,14,14,12,4,2,0,0,0,0,0,0,0,0,0,2,4,6,6,4,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-23
+# mutate ./baseline.dna -> ./gen0_seed5.dna
diff --git a/src/genetic/gen0_seed6.dna b/src/genetic/gen0_seed6.dna
new file mode 100644
index 0000000..0250961
--- /dev/null
+++ b/src/genetic/gen0_seed6.dna
@@ -0,0 +1,57 @@
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+7,7,7,7,7,7,6,6,6,5,6,4,3,4,3,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121
+0,-3,-7,-10,-18,-39,-56,-96,-113,
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5
+-11
+0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,79,61,39,17,8,4,0,0,0,4,8,17,39,61,79,0,
+0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0
+0,0,7,14,21,28,34,41,55
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+800
+0,-6,-10,-16,-22
+29,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,56,55,54,53,52,51,50,48,46,43,42,42,42,42,42,42,42,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9
+-10,-4,1,3,4,5,5,5
+0,33,28,18,8,4,0,-10,-16
+10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+0,15,12,9,4,0,0,0,0
+0,25,19,14,6,0,0,0,0
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12
+-17,-10,-6,0,3,5,7,8,8,
+0,4,8,
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,9,11,12,13,15,17,19,21,21,22,22,23,23,24,24,25,25,26,27
+24,22,17,14,13,13,12,12
+11,10,8,8,7,7,7,6,
+13,12,11,11,9,9,9,8
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+0,0,-21,-15,-12,-8,-4,-2,0,0,0,-2,-4,-8,-12,-15,-21,0,
+-40
+23,
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+7
+4
+-22,-19,-16,-11,-5,-1,0,3,6,9,12,13,15,17,18,
+-15,-6,0,4,8,8,8,8,
+-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23
+0,-14,-22,-26,-33
+0,34,28,22,19,17,16,15
+8
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,16,16,13,5,3,0,0,0,0,0,0,0,0,5,7,18,24,24,18,7,5,0,0,0,0,0,0,0,0,5,7,18,24,24,18,7,5,0,0,0,0,0,0,0,0,3,5,13,16,16,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-23
+# mutate ./baseline.dna -> ./gen0_seed6.dna
diff --git a/src/genetic/gen0_seed7.dna b/src/genetic/gen0_seed7.dna
new file mode 100644
index 0000000..c442968
--- /dev/null
+++ b/src/genetic/gen0_seed7.dna
@@ -0,0 +1,57 @@
+0,76,68,62,57,52,48,44,42,42,42,42,42,42,42,42,0,0,106,99,92,85,77,71,66,60,56,56,56,56,56,56,56,0,0,127,112,105,98,92,86,80,74,65,65,65,65,65,65,65,0,
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,10,10,5,0,-9,0,0,0,0,0,0,0,0,-9,0,5,5,5,5,0,-9,0,0,0,0,0,0,0,0,-9,0,0,0,0,0,0,-9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121
+0,-3,-7,-9,-16,-35,-50,-85,-100
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-5
+-11
+0,0,152,104,58,33,16,12,0,0,0,12,16,33,58,104,152,0,
+0,0,0,48,34,22,13,9,0,0,0,9,13,22,34,48,0,0
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,51,34,11,5,2,0,0,0,0,0,2,5,11,34,51,0,
+0,0,7,14,21,28,34,41,55
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+800
+0,-6,-10,-16,-22
+33
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-18,-11,-8,-4,0,0,0,2,3,4,4,5,6,7,
+-8,-3,0,2,3,4,4,4,
+0,31,26,17,7,3,0,-9,-15,
+10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0
+0,12,10,7,3,0,0,0,0,
+0,25,19,14,6,0,0,0,0
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12
+-19,-11,-6,0,3,5,8,9,9,
+0,4,8
+0,0,0,0,0,0,0,0,0,0,0,1,3,5,8,10,11,12,14,16,18,20,20,21,21,22,22,23,23,24,24,25,25,
+24,22,17,14,13,13,12,12
+11,10,8,8,7,7,7,6,
+13,12,11,11,9,9,9,8
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0
+-40
+25,
+55,51,44,38,33,27,22,16,7,1,-3,-6,-9,-12,-18,-22,-25
+7
+4
+-28,-24,-20,-14,-7,-2,0,4,8,12,15,17,19,21,22
+-15,-6,0,4,8,8,8,8
+-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23
+0,-14,-22,-26,-33
+0,34,28,22,19,17,16,15
+8
+1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-23
+# mutate ./baseline.dna -> ./gen0_seed7.dna
diff --git a/src/genetic/gen0_seed8.dna b/src/genetic/gen0_seed8.dna
new file mode 100644
index 0000000..de77bb3
--- /dev/null
+++ b/src/genetic/gen0_seed8.dna
@@ -0,0 +1,57 @@
+-1,90,81,73,67,62,57,52,50,50,50,50,50,50,50,50,-1,-1,125,117,109,100,91,84,78,71,66,66,66,66,66,66,66,-1,-1,150,132,124,116,109,102,94,87,77,77,77,77,77,77,77,-1
+-43,-15,0,3,6,10,15,21,28,-63,-25,0,4,9,14,19,25,32,-10,0,0,7,15,20,24,29,36
+0,0,0,0,0,0,0,0,0,1,1,1,1,1,2,3,4,5,6,6,7,7,7,7,8,8,8,8,8,8,8,8
+8,8,8,8,8,8,8,8,8,7,7,7,7,6,6,5,4,3,3,3,2,2,2,1,1,1,0,0,0,0,0,0
+8,8,8,8,8,8,7,7,7,6,7,5,4,5,4,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,9,9,5,0,-8,0,0,0,0,0,0,0,0,-8,0,5,5,5,5,0,-8,0,0,0,0,0,0,0,0,-8,0,0,0,0,0,0,-8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-4,-3,-3,-4,-4,-3,-3,-4,0,0,0,0,0,0,0,0,-5,-4,-4,-5,-5,-4,-4,-5,0,0,0,0,0,0,0,0,-7,-5,-5,-7,-7,-5,-5,-7,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-7,-6,-6,-7,-7,-6,-6,-7,0,0,0,0,0,0,0,0,-9,-7,-7,-9,-9,-7,-7,-9,0,0,0,0,0,0,0,0,-12,-9,-9,-11,-11,-9,-9,-12,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-32,-65,-99,-134,-170,-207,-245,-290,0,-23,-47,-76,-108,-144,-184,-232,-290,0,-9,-19,-31,-46,-64,-86,-111,-143,0,-7,-13,-25,-39,-55,-73,-95,-121
+0,-3,-7,-9,-16,-35,-50,-85,-100
+0,-7,-8,-9,-10,-10,-9,-8,-7
+-4,
+-11
+0,0,162,111,62,36,18,13,0,0,0,13,18,36,62,111,162,0
+0,0,0,50,35,23,13,9,0,0,0,9,13,23,35,50,0,0,
+0,0,96,74,48,21,10,5,0,0,0,5,10,21,48,74,96,0
+0,0,60,40,13,6,3,1,0,0,0,1,3,6,13,40,60,0
+0,0,7,14,21,28,34,41,55
+60,-1,-1,37,-1,43,19,-1,14,9,20,4,3,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+800
+0,-6,-10,-16,-22
+33
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53,52,51,50,49,48,47,45,43,41,40,40,40,40,40,40,40
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-7,-8,-10,-11,-11,-10,-8,-7,0,0,0,0,0,0,0,0,-6,-7,-9,-8,-8,-9,-7,-6,0,0,0,0,0,0,0,0,-4,-6,-7,-7,-7,-7,-6,-4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-4,-5,-7,-8,-8,-7,-5,-4,0,0,0,0,0,0,0,0,-3,-4,-4,-4,-4,-4,-4,-3,0,0,0,0,0,0,0,0,-1,-1,-2,-2,-2,-2,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+-22,-14,-10,-5,-1,0,1,3,4,5,6,7,8,9
+-10,-4,1,3,4,5,5,5
+0,33,28,18,8,4,0,-10,-16
+10,10,10,9,9,8,8,7,7,6,5,4,3,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,5,8,8,5,-2,-8,0,0,0,0,0,0,0,0,-8,-2,4,5,5,4,-2,-8,0,0,0,0,0,0,0,0,-8,-2,-2,0,0,-2,-2,-8,0,0,0,0,0,0,0,0,-12,-8,-8,-8,-8,-8,-8,-12,0,0,0,0,0,0,0,0,
+0,15,12,9,4,0,0,0,0
+0,25,19,14,6,0,0,0,0
+0,12,11,9,6,3,0,0,0,0,0,0,0,3,6,9,11,12
+-17,-10,-6,0,3,5,7,8,8
+0,4,8,
+0,0,0,0,0,0,0,0,0,0,1,2,4,6,10,12,13,14,16,19,21,23,23,24,24,25,25,26,26,28,28,29,30,
+24,22,17,14,13,13,12,12
+12,11,9,9,8,8,8,7
+13,12,11,11,9,9,9,8
+0,0,25,17,12,6,1,0,0,0,0,0,1,6,12,17,25,0
+0,0,-22,-16,-13,-9,-5,-3,0,0,0,-3,-5,-9,-13,-16,-22,0
+-40
+22
+62,58,50,43,37,30,25,18,8,1,-3,-6,-10,-13,-20,-25,-28,
+7
+4
+-31,-26,-22,-15,-7,-2,0,4,8,13,16,19,21,23,24,
+-15,-6,0,4,8,8,8,8
+-30,-26,-22,-17,-11,-8,-4,-2,-1,2,4,7,10,12,14,15,16,17,18,19,20,20,21,21,22,22,23,23
+0,-14,-22,-26,-33
+0,34,28,22,19,17,16,15
+8
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,3,3,3,3,3,3,3,3,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,5,7,17,23,23,17,7,5,0,0,0,0,0,0,0,0,3,5,13,15,15,13,5,3,0,0,0,0,0,0,0,0,1,3,5,7,7,5,3,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+0,-4,-8,-12,-16,-20,-25,-31,-38,-50,-63,-76,-90,-105,-120,-135,-150,-165,-180,-195,-210,-225,-240,-255,-270,-290,-310,-330,-350,-370,-390,-410,-440,-470,-500,-500,-500,-500,-500,-500,-500,-500
+-23
+# mutate ./baseline.dna -> ./gen0_seed8.dna
diff --git a/src/genetic/main.cpp b/src/genetic/main.cpp
new file mode 100644
index 0000000..aa7ec73
--- /dev/null
+++ b/src/genetic/main.cpp
@@ -0,0 +1,918 @@
+/*
+ * INCLUDES
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <signal.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <math.h>
+#include <sys/wait.h>
+
+
+/*
+ * GLOBALS
+ */
+
+int start_time;
+bool pipe_logging = false;
+int only_opening = -1;
+FILE *pgn_log = NULL;
+FILE *match_log = NULL;
+
+
+
+
+/*
+ * Misc
+ */
+
+void strip_newline(char *s)
+{
+ int i;
+
+ for (i = 0;; ++i)
+ {
+ if (!s[i] || s[i] == '\r' || s[i] == '\n')
+ {
+ s[i] = 0;
+ return;
+ }
+ }
+}
+
+void copy_result(char *to, char *from)
+{
+ int i;
+
+ for (i = 0; i < strlen(from); ++i)
+ if (from[i] == '0' || from[i] == '1')
+ break;
+ strcpy(to, &from[i]);
+ for (i = 0; i < strlen(to); ++i)
+ if (to[i] == '}')
+ break;
+ to[i + 1] = 0;
+}
+
+
+
+
+/*
+ * MyLock
+ */
+
+#include <pthread.h>
+#include <semaphore.h>
+
+class MyLock
+{
+public:
+ MyLock();
+ void get();
+ void release();
+
+private:
+ pthread_mutex_t the_lock;
+};
+
+MyLock::MyLock()
+{
+ pthread_mutex_init(&the_lock, NULL);
+}
+
+void MyLock::get()
+{
+ for (;;)
+ {
+ if (pthread_mutex_lock(&the_lock) == 0) // EBUSY??
+ break;
+ usleep(1);
+ }
+}
+
+void MyLock::release()
+{
+ pthread_mutex_unlock(&the_lock);
+}
+
+MyLock glock;
+
+
+
+
+/*
+ * Settings
+ */
+
+class Settings
+{
+public:
+ Settings() { count = 0; };
+ bool read(char *filename);
+ char * get(char *name);
+
+private:
+ char map[20][2][1000];
+ int count;
+};
+
+Settings settings;
+
+bool Settings::read(char *filename)
+{
+ FILE *f;
+ char line[1000];
+ char var[1000];
+
+ printf("Reading settings file: %s\n", filename);
+ count = 0;
+ f = fopen(filename, "r");
+ if (!f)
+ {
+ printf("Couldn't open file.\n");
+ return false;
+ }
+ for (;;)
+ {
+ line[0] = 0;
+ fgets(line, 1000, f);
+ if (!line[0])
+ break;
+ strip_newline(line);
+ sscanf(line, "%s", var);
+ strcpy(map[count][0], var);
+ strcpy(map[count][1], line + strlen(var) + 1);
+ count++;
+ }
+ fclose(f);
+ return true;
+}
+
+char * Settings::get(char *name)
+{
+ int i;
+
+ for (i = 0; i < count; ++i)
+ if (!strcmp(map[i][0], name))
+ return map[i][1];
+ printf("Setting not found: %s\n", name);
+ exit(1);
+}
+
+
+
+
+/*
+ * ChildProc
+ */
+
+class ChildProc
+{
+public:
+ ChildProc();
+ virtual ~ChildProc();
+
+ virtual void start(char *cmd_line);
+ virtual void stop();
+ void send(char *line);
+ void receive(char *line, int size);
+ bool poll();
+ void flush();
+ char * get_cmd() { return cmd; }
+
+private:
+ void init();
+
+ char cmd[100];
+ bool running;
+
+ int pid;
+ int to_prog[2];
+ int from_prog[2];
+ FILE *to;
+ FILE *from;
+};
+
+ChildProc::ChildProc()
+{
+ init();
+}
+
+ChildProc::~ChildProc()
+{
+ stop();
+}
+
+void ChildProc::init()
+{
+ strcpy(cmd, "");
+ pid = 0;
+ to = NULL;
+ from = NULL;
+ running = false;
+}
+
+void ChildProc::start(char *cmd_line)
+{
+ char *argv[100];
+ char arg_buff[100][100];
+ int args = 0, i = 0, j = 0;
+
+ argv[0] = arg_buff[0];
+ for (;;)
+ {
+ argv[args][i] = cmd_line[j];
+ if (!argv[args][i] || argv[args][i] == ' ')
+ {
+ argv[args][i] = 0;
+ args++;
+ argv[args] = arg_buff[args];
+ i = -1; // will get incremented to 0
+ }
+ if (!cmd_line[j])
+ break;
+ i++;
+ j++;
+ }
+ argv[args] = NULL;
+
+ stop();
+ glock.get();
+ pipe(to_prog);
+ pipe(from_prog);
+ if ((pid = fork()) == 0) // what to do with glock here?
+ {
+ dup2(to_prog[0], 0);
+ dup2(from_prog[1], 1);
+ close(to_prog[0]);
+ close(to_prog[1]);
+ close(from_prog[0]);
+ close(from_prog[1]);
+ dup2(1, fileno(stderr)); // force stderr to the pipe
+ execvp(argv[0], argv);
+ perror(argv[0]);
+ exit(1);
+ }
+ if (pid == -1)
+ {
+ printf("fork() failed, command line: %s\n", cmd_line);
+ exit(1);
+ }
+ close(to_prog[0]);
+ close(from_prog[1]);
+ from = fdopen(from_prog[0], "r");
+ to = fdopen(to_prog[1], "w");
+ setbuf(from, NULL);
+ setbuf(to, NULL);
+ glock.release();
+
+ running = true;
+ strcpy(cmd, argv[0]);
+}
+
+void ChildProc::stop()
+{
+ int x;
+
+ if (!running)
+ return;
+ glock.get();
+ fclose(to);
+ fclose(from);
+ close(to_prog[1]);
+ close(from_prog[0]);
+ glock.release();
+ kill(pid, SIGTERM);
+ waitpid(pid, &x, 0);
+ init();
+}
+
+void ChildProc::send(char *line)
+{
+ char temp[1000];
+ int i;
+
+ if (!running)
+ return;
+ strcpy(temp, line);
+ strip_newline(temp);
+ glock.get();
+ fprintf(to, "%s\n", temp);
+ glock.release();
+ if (pipe_logging)
+ printf("%s send: %s\n", cmd, temp);
+}
+
+void ChildProc::receive(char *line, int size)
+{
+ int i;
+
+ line[0] = 0;
+ if (!running)
+ return;
+ if (!poll())
+ return;
+ glock.get();
+ fgets(line, size, from);
+ glock.release();
+ strip_newline(line);
+ if (pipe_logging)
+ printf("%s recv: %s\n", cmd, line);
+}
+
+bool ChildProc::poll()
+{
+ fd_set myset;
+ timeval mytime;
+ int r;
+
+ FD_ZERO(&myset);
+ FD_SET(from_prog[0], &myset);
+ mytime.tv_sec = 0;
+ mytime.tv_usec = 0;
+ glock.get();
+ r = select(from_prog[0] + 1, &myset, NULL, NULL, &mytime);
+ glock.release();
+ return (r > 0) ? true : false;
+}
+
+void ChildProc::flush()
+{
+ char line[1000];
+
+ while (poll())
+ {
+ receive(line, 1000);
+ if (!line[0])
+ break;
+ }
+}
+
+
+
+
+/*
+ * ChessEngine
+ */
+
+class ChessEngine : private ChildProc
+{
+public:
+ void start(char *cmd_line, char *init_str_arg);
+ void stop();
+ void new_game();
+ void send_move(char *move);
+ void get_move(char *move);
+ bool is_game_over() { return game_over; }
+ char * get_result() { return result; }
+
+private:
+ bool game_over;
+ char result[100];
+ char init_str[1000];
+};
+
+void ChessEngine::start(char *cmd_line, char *init_str_arg)
+{
+ ChildProc::start(cmd_line);
+ send("xboard\n");
+ strcpy(init_str, init_str_arg);
+}
+
+void ChessEngine::stop()
+{
+ send("quit\n");
+ ChildProc::stop();
+}
+
+void ChessEngine::new_game()
+{
+ char temp[1000];
+
+ // stop the engine and flush leftover output
+ // only necessary when reusing the engine
+ /*send("?\n");
+ usleep(100000);
+ flush();*/
+
+ send("new\n");
+ send("easy\n");
+ sprintf(temp, "%s\n", init_str);
+ send(temp);
+ send("force\n");
+
+ game_over = false;
+}
+
+void ChessEngine::send_move(char *move)
+{
+ char s[100];
+
+ if (game_over)
+ return;
+ sprintf(s, "%s\n", move);
+ send(s);
+}
+
+void ChessEngine::get_move(char *move)
+{
+ char line[1000];
+ char tok[1000];
+
+ move[0] = 0;
+ while (poll()) // does the engine think the game is over?
+ {
+ receive(line, 1000);
+ if (strchr(line, '{'))
+ {
+ game_over = true;
+ copy_result(result, line);
+ }
+ }
+ if (game_over)
+ return;
+ send("go\n");
+ for (;;)
+ {
+ receive(line, 1000);
+ if (!line[0])
+ {
+ usleep(1000);
+ continue;
+ }
+ if (strchr(line, '{'))
+ {
+ game_over = true;
+ copy_result(result, line);
+ break;
+ }
+ sscanf(line, "%s", tok);
+ if (!strcmp(tok, "move"))
+ {
+ sscanf(line, "move %s", move);
+ break;
+ }
+ }
+ if (!game_over)
+ send("force\n");
+}
+
+
+
+
+/*
+ * WorkItems
+ */
+
+const int max_work_items = 5000;
+const int max_game_ply = 400;
+
+struct WorkItem
+{
+ volatile int status;
+ bool printed;
+
+ int white_engine;
+ int opening_id;
+ char opening[200];
+ char move[max_game_ply + 2][10];
+ int moves;
+ char result[100];
+};
+
+WorkItem *work_item[max_work_items];
+int work_items;
+
+bool make_work_items(char *filename)
+{
+ FILE *f;
+ char line[1000];
+ int openings = 0;
+ WorkItem *w;
+
+ printf("Creating work items from file: %s\n", filename);
+ work_items = 0;
+ f = fopen(filename, "r");
+ if (!f)
+ {
+ printf("Couldn't open file.\n");
+ return false;
+ }
+ for (;;)
+ {
+ line[0] = 0;
+ fgets(line, 1000, f);
+ if (!line[0])
+ break;
+ strip_newline(line);
+ openings++;
+
+ if (only_opening != -1 && openings != only_opening)
+ continue;
+
+ w = new WorkItem;
+ w->status = 0;
+ w->opening_id = openings;
+ strcpy(w->opening, line);
+ w->white_engine = 1;
+ work_item[work_items++] = w;
+
+ w = new WorkItem;
+ w->status = 0;
+ w->opening_id = openings;
+ strcpy(w->opening, line);
+ w->white_engine = 2;
+ work_item[work_items++] = w;
+ }
+ fclose(f);
+ printf("%d work items created.\n", work_items);
+ return true;
+}
+
+void print_game(WorkItem *w)
+{
+ char white_name[100];
+ char black_name[100];
+ char line[1000];
+ char short_result[100];
+ char *temp;
+ int m, i, line_break;
+
+ if (w->white_engine == 1)
+ {
+ strcpy(white_name, settings.get("engine1"));
+ strcpy(black_name, settings.get("engine2"));
+ }
+ else
+ {
+ strcpy(white_name, settings.get("engine2"));
+ strcpy(black_name, settings.get("engine1"));
+ }
+ sprintf(line, "Opening: %d, %s vs. %s, result: %s\n",
+ w->opening_id,
+ white_name,
+ black_name,
+ w->result);
+ printf(line);
+ fprintf(match_log, line);
+ fflush(match_log);
+
+ strcpy(short_result, w->result);
+ temp = strchr(short_result, ' ');
+ if (temp)
+ *temp = 0;
+ fprintf(pgn_log, "[Round \"%d.%d\"]\n", w->opening_id, w->white_engine);
+ fprintf(pgn_log, "[White \"%s\"]\n", white_name);
+ fprintf(pgn_log, "[Black \"%s\"]\n", black_name);
+ fprintf(pgn_log, "[Result \"%s\"]\n", short_result);
+ fprintf(pgn_log, "\n");
+ m = 0;
+ line_break = 0;
+ for (i = 1;; ++i)
+ {
+ if (m == w->moves)
+ {
+ fprintf(pgn_log, "%s\n", w->result);
+ break;
+ }
+ fprintf(pgn_log, "%d. %s ", i, w->move[m++]);
+ if (m < w->moves)
+ fprintf(pgn_log, "%s ", w->move[m++]);
+ if (m > line_break + 8)
+ {
+ fprintf(pgn_log, "\n");
+ line_break = m;
+ }
+ }
+ fprintf(pgn_log, "\n");
+ fflush(pgn_log);
+
+ w->printed = true;
+}
+
+void print_stats(int items)
+{
+ int i;
+ int win = 0, lose = 0, draw = 0;
+ int games = 0;
+ double percent;
+ double elo;
+ char elo_sign = '+';
+ int elapsed_time;
+ int min, sec;
+ double spg = 10.0;
+ double percent_done;
+ double eta;
+ int eta_min, eta_sec;
+
+ for (i = 0; i < items; ++i)
+ {
+ if (work_item[i]->status != 2) // shouldn't happen
+ break;
+ if (strstr(work_item[i]->result, "1-0"))
+ {
+ if (work_item[i]->white_engine == 1)
+ win++;
+ else
+ lose++;
+ }
+ if (strstr(work_item[i]->result, "0-1"))
+ {
+ if (work_item[i]->white_engine == 1)
+ lose++;
+ else
+ win++;
+ }
+ if (strstr(work_item[i]->result, "1/2-1/2"))
+ draw++;
+ }
+ games = win + lose + draw;
+
+ percent = (double)win + (0.5 * (double)draw);
+ percent /= (double)games;
+ if (percent > 0.99999)
+ elo = 400.0;
+ else if (percent < 0.00001)
+ elo = -400.0;
+ else
+ elo = -400.0 * log(1.0 / percent - 1.0) / log(10.0);
+ if (elo < 0.0)
+ {
+ elo_sign = '-';
+ elo = -elo;
+ }
+ elapsed_time = time(NULL) - start_time;
+ sec = elapsed_time;
+ min = sec / 60;
+ sec -= min * 60;
+ if (elapsed_time)
+ spg = (double)(time(NULL) - start_time) / (double)games;
+ percent_done = (double)games / (double)work_items;
+ eta = (double)work_items - (double)games;
+ eta *= spg;
+ eta_sec = (int)eta;
+ eta_min = eta_sec / 60;
+ eta_sec -= eta_min * 60;
+
+ printf("%s vs. %s: +%d -%d =%d, %.2f%c, ELO: %c%d\n",
+ settings.get("engine1"),
+ settings.get("engine2"),
+ win, lose, draw,
+ (float)(percent * 100.0), '%',
+ elo_sign, (int)elo);
+ printf("%d games in %d:%02d, %.2f seconds/game, %.1f%c done, ETA: %d:%02d\n",
+ games, min, sec, (float)spg,
+ (float)(percent_done * 100.0), '%',
+ eta_min, eta_sec);
+ printf("\n");
+}
+
+
+
+/*
+ * WorkerThread
+ */
+
+class WorkerThread
+{
+public:
+ void do_work(int id_arg);
+ void do_item(WorkItem *w);
+
+private:
+ void do_opening(WorkItem *w);
+ void add_move(WorkItem *w, char *move);
+
+ int id;
+ ChessEngine engine1, engine2;
+};
+
+void WorkerThread::do_work(int id_arg)
+{
+ int i;
+
+ id = id_arg;
+ for (;;)
+ {
+ glock.get();
+ for (i = 0; i < work_items; ++i)
+ if (work_item[i]->status == 0)
+ break;
+ if (i != work_items)
+ work_item[i]->status = 1;
+ glock.release();
+
+ if (i == work_items)
+ break;
+ do_item(work_item[i]);
+ }
+}
+
+void WorkerThread::do_item(WorkItem *w)
+{
+ char move[100];
+ ChessEngine *etm; // engine to move
+ ChessEngine *etw; // engine to wait
+ ChessEngine *temp;
+
+ w->printed = false;
+ w->moves = 0;
+
+ engine1.start(settings.get("cmd1"), settings.get("init1"));
+ engine2.start(settings.get("cmd2"), settings.get("init2"));
+ engine1.new_game();
+ engine2.new_game();
+ do_opening(w);
+
+ etm = &engine1;
+ etw = &engine2;
+ if ((w->moves & 1) == 1 && w->white_engine == 1)
+ {
+ etm = &engine2;
+ etw = &engine1;
+ }
+ if ((w->moves & 1) == 0 && w->white_engine == 2)
+ {
+ etm = &engine2;
+ etw = &engine1;
+ }
+ for (;;)
+ {
+ etm->get_move(move);
+ if (etm->is_game_over())
+ {
+ strcpy(w->result, etm->get_result());
+ break;
+ }
+ etw->send_move(move);
+ add_move(w, move);
+ if (w->moves >= max_game_ply)
+ {
+ strcpy(w->result, "1/2-1/2 {Game too long}");
+ break;
+ }
+ temp = etm;
+ etm = etw;
+ etw = temp;
+ }
+
+ engine1.stop();
+ engine2.stop();
+ w->status = 2;
+}
+
+void WorkerThread::do_opening(WorkItem *w)
+{
+ char move[100];
+ int i = 0, j = 0;
+
+ for (;;)
+ {
+ move[i] = w->opening[j];
+ if (!move[i] || move[i] == ' ')
+ {
+ move[i] = 0;
+ engine1.send_move(move);
+ engine2.send_move(move);
+ add_move(w, move);
+ i = -1;
+ }
+ if (!w->opening[j])
+ break;
+ i++;
+ j++;
+ }
+}
+
+void WorkerThread::add_move(WorkItem *w, char *move)
+{
+ strcpy(w->move[w->moves++], move);
+}
+
+
+
+
+/*
+ * threads
+ */
+
+WorkerThread *worker[100];
+pthread_t *mythread[100];
+volatile int thread_count = 0;
+
+void * thread_proc(void *arg)
+{
+ int id;
+
+ glock.get();
+ id = thread_count++;
+ glock.release();
+ worker[id] = new WorkerThread;
+ worker[id]->do_work(id);
+ delete worker[id];
+ pthread_exit(&mythread[id]);
+ delete mythread[id]; // ?
+}
+
+void start_threads(int count)
+{
+ int i;
+ int x = 0;
+
+ printf("Starting threads...\n");
+ for (i = 0; i < count; ++i)
+ {
+ mythread[i] = new pthread_t;
+ pthread_create(mythread[i], NULL, thread_proc, (void *)&x);
+ }
+ printf("Started %d threads.\n", i);
+}
+
+
+
+
+/*
+ * main
+ */
+
+main(int argc, char *argv[])
+{
+ int i;
+ char settings_filename[100];
+ int threads = 1;
+
+ start_time = time(NULL);
+ strcpy(settings_filename, "settings.txt");
+
+ for (i = 1;;)
+ {
+ if (i >= argc)
+ break;
+ if (!strcmp(argv[i], "-l"))
+ {
+ pipe_logging = true;
+ }
+ else if (!strcmp(argv[i], "-o"))
+ {
+ only_opening = atoi(argv[++i]);
+ }
+ else if (!strcmp(argv[i], "-t"))
+ {
+ threads = atoi(argv[++i]);
+ }
+ else if (argv[i][0] == '-')
+ {
+ printf("Usage: shiai [options] [settings file]\n");
+ printf("\n");
+ printf(" -h : Display this screen\n");
+ printf(" -l : Display I/O with engines (\"log\")\n");
+ printf(" -o # : Run opening number #\n");
+ printf(" -t # : Run with # threads\n");
+ printf("\n");
+ exit(0);
+ }
+ else
+ {
+ strcpy(settings_filename, argv[i]);
+ }
+ i++;
+ }
+
+ if (!settings.read(settings_filename))
+ exit(1);
+ if (!make_work_items(settings.get("openings")))
+ exit(1);
+
+ pgn_log = fopen(settings.get("pgnlog"), "w");
+ if (!pgn_log)
+ {
+ printf("Couldn't open %s for writing.\n", settings.get("pgnlog"));
+ exit(1);
+ }
+ match_log = fopen(settings.get("matchlog"), "w");
+ if (!match_log)
+ {
+ printf("Couldn't open %s for writing.\n", settings.get("matchlog"));
+ exit(1);
+ }
+
+ if (threads <= 0 || threads > 16)
+ threads = 1;
+ start_threads(threads);
+ for (i = 0; i < work_items; ++i)
+ {
+ while (work_item[i]->status != 2)
+ sleep(1);
+ print_game(work_item[i]);
+ print_stats(i + 1);
+ }
+
+ fclose(pgn_log);
+ fclose(match_log);
+ return 0;
+}
diff --git a/src/genetic/mutate.pl b/src/genetic/mutate.pl
new file mode 100755
index 0000000..ea4f38e
--- /dev/null
+++ b/src/genetic/mutate.pl
@@ -0,0 +1,31 @@
+#!/usr/bin/perl
+
+open(FILE, $ARGV[0]) || die $!;
+open(OUT, ">$ARGV[1]") || die $!;
+$mutation_chance = 0.20;
+$mutation_allowed = 1;
+
+while(<FILE>) {
+ next if (/^\s*$/);
+ if (/^\s*#/) {
+ $mutation_allowed = 1 if (/^#\s*BEGIN MUTATION ALLOWED/);
+ $mutation_allowed = 0 if (/^#\s*END MUTATION ALLOWED/);
+ print OUT;
+ next;
+ }
+ $should_mutate = rand() < $mutation_chance;
+ $mutation_amount = (rand() - 0.5) / 2.7;
+ if (($should_mutate) && ($mutation_allowed)) {
+ @arr = split(/,/);
+ for $a (@arr) {
+ $x = ($a * $mutation_amount);
+ $x += $a;
+ $x = int($x);
+ print OUT "$x,";
+ }
+ print OUT "\n";
+ } else {
+ print OUT;
+ }
+}
+exit 0;
diff --git a/src/genetic/org/guru/wannabe/genetic/GeneticDriver.class b/src/genetic/org/guru/wannabe/genetic/GeneticDriver.class
new file mode 100644
index 0000000..4845848
--- /dev/null
+++ b/src/genetic/org/guru/wannabe/genetic/GeneticDriver.class
Binary files differ
diff --git a/src/genetic/org/guru/wannabe/genetic/GeneticProcess.class b/src/genetic/org/guru/wannabe/genetic/GeneticProcess.class
new file mode 100644
index 0000000..3db2b55
--- /dev/null
+++ b/src/genetic/org/guru/wannabe/genetic/GeneticProcess.class
Binary files differ
diff --git a/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1ChessGame.class b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1ChessGame.class
new file mode 100644
index 0000000..2a23c9b
--- /dev/null
+++ b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1ChessGame.class
Binary files differ
diff --git a/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1FileAndScore.class b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1FileAndScore.class
new file mode 100644
index 0000000..c73b2a7
--- /dev/null
+++ b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$1FileAndScore.class
Binary files differ
diff --git a/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$2FileAndScore.class b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$2FileAndScore.class
new file mode 100644
index 0000000..8223691
--- /dev/null
+++ b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess$2FileAndScore.class
Binary files differ
diff --git a/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess.class b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess.class
new file mode 100644
index 0000000..83e165a
--- /dev/null
+++ b/src/genetic/org/guru/wannabe/genetic/ParallelChessGeneticProcess.class
Binary files differ
diff --git a/src/genetic/position.bin b/src/genetic/position.bin
new file mode 100644
index 0000000..1f52dce
--- /dev/null
+++ b/src/genetic/position.bin
Binary files differ
diff --git a/src/genetic/position.lrn b/src/genetic/position.lrn
new file mode 100644
index 0000000..aed44ce
--- /dev/null
+++ b/src/genetic/position.lrn
@@ -0,0 +1,11 @@
+position
+[White "unknown"]
+[Black "Crafty 19.13"]
+[Date "2007.06.18"]
+setboard 1r1r/1b2kpp/2pRp2p/p3P/2B/2PR2P/P1P2P1P/2K/ b
+{-140 6314 780}
+[White "unknown"]
+[Black "Crafty 19.13"]
+[Date "2007.06.19"]
+setboard /4k/1n1p1p1p/n2Pp1pP/2p1P1P/N1P2P/1P1KB// b
+{-280 15604 1020}
diff --git a/src/genetic/score_histogram.pl b/src/genetic/score_histogram.pl
new file mode 100755
index 0000000..facc71a
--- /dev/null
+++ b/src/genetic/score_histogram.pl
@@ -0,0 +1,43 @@
+#!/usr/bin/perl
+
+$gen = $ARGV[0];
+opendir(DIR, ".");
+@files = readdir(DIR);
+closedir(DIR);
+
+$min_score = 999999999; $max_score = 0;
+$total = 0;
+$best = "";
+for $file(@files) {
+ if ($file =~ m/gen(\d+)_\d+\.log/) {
+ $score = 0;
+ next if $1 != $gen;
+ open(FILE, $file) || die $!;
+ $total++;
+ while(<FILE>) {
+ chop;
+ if (m/ correct solutions\s+\:\s+(\d+)/) {
+ $score = $1;
+ last;
+ }
+ }
+ $score = int($score);
+ $scores[$score] += 1;
+ $names{$score} .= "$file ";
+ if ($score > $max_score) {
+ $max_score = $score;
+ $best = $file;
+ }
+ $min_score = $score if ($score < $min_score);
+ close(FILE);
+ }
+}
+
+for ($x = $min_score; $x <= $max_score; $x++) {
+ next if $scores[$x] == 0;
+ printf "%4u : ", $x;
+ print "*" x int($scores[$x] / $total * 60);
+ print " ($scores[$x], $names{$x})\n";
+}
+print "Best was $best\n";
+system "tail -22 $best";
diff --git a/src/genetic/trial.ep_ b/src/genetic/trial.ep_
new file mode 100644
index 0000000..a98e32f
--- /dev/null
+++ b/src/genetic/trial.ep_
@@ -0,0 +1,3520 @@
+st 20
+easy
+setboard 2q1r1k1/1ppb4/r2p1Pp1/p4n1p/2P1n3/5NPP/PP3Q1K/2BRRB2 w - -
+solution f7+
+id "ECM.001"
+go
+setboard 7r/1p2k3/2bpp3/p3np2/P1PR4/2N2PP1/1P4K1/3B4 b - -
+solution Bxf3+
+id "ECM.002"
+go
+setboard 4k3/p1P3p1/2q1np1p/3N4/8/1Q3PP1/6KP/8 w - -
+solution Qb5
+id "ECM.003"
+go
+setboard 2r1b1k1/R4pp1/4pb1p/1pBr4/1Pq2P2/3N4/2PQ2PP/5RK1 b - -
+solution Rcxc5
+id "ECM.004"
+go
+setboard 6k1/p1qb1p1p/1p3np1/2b2p2/2B5/2P3N1/PP2QPPP/4N1K1 b - -
+solution Bxf2+
+id "ECM.005"
+go
+setboard 3q4/pp3pkp/5npN/2bpr1B1/4r3/2P2Q2/PP3PPP/R4RK1 w - -
+solution Bxf6+
+id "ECM.006"
+go
+setboard 3rr1k1/pb3pp1/1p1q1b1p/1P2NQ2/3P4/P1NB4/3K1P1P/2R3R1 w - -
+solution Rxg7+
+id "ECM.007"
+go
+setboard r1b1r1k1/p1p3pp/2p2n2/2bp4/5P2/3BBQPq/PPPK3P/R4N1R b - -
+solution Bg4
+id "ECM.008"
+go
+setboard 3r4/1b2k3/1pq1pp2/p3n1pr/2P5/5PPN/PP1N1QP1/R2R2K1 b - -
+solution Rxh3
+id "ECM.009"
+go
+setboard 2r4k/pB4bp/6p1/6q1/1P1n4/2N5/P4PPP/2R1Q1K1 b - -
+solution Qxc1
+id "ECM.010"
+go
+setboard 1r5r/3b1pk1/3p1np1/p1qPp3/p1N1PbP1/2P2PN1/1PB1Q1K1/R3R3 b - -
+solution Nxg4
+id "ECM.011"
+go
+setboard 5rk1/7p/p1N5/3pNp2/2bPnqpQ/P7/1P3PPP/4R1K1 w - -
+solution Ne7+
+id "ECM.012"
+go
+setboard rnb2rk1/pp2np1p/2p2q1b/8/2BPPN2/2P2Q2/PP4PP/R1B2RK1 w - -
+solution Nd5
+id "ECM.013"
+go
+setboard 2k4r/1pp2ppp/p1p1bn2/4N3/1q1rP3/2N1Q3/PPP2PPP/R4RK1 w - -
+solution Nd5
+id "ECM.014"
+go
+setboard r3kb1r/pp2pppp/3q4/3Pn3/6b1/2N1BN2/PP3PPP/R2QKB1R w KQkq -
+solution Nxe5
+id "ECM.015"
+go
+setboard 2rr2k1/1b3p1p/p4qpb/2R1n3/3p4/BP2P3/P3QPPP/3R1BKN b - -
+solution Rxc5
+id "ECM.016"
+go
+setboard r1b1k3/5p1p/p1p5/3np3/1b2N3/4B3/PPP1BPrP/2KR3R w q -
+solution Rxd5
+id "ECM.017"
+go
+setboard r3rbk1/1pq2ppp/2ppbnn1/p3p3/P1PPN3/BP1BPN1P/2Q2PP1/R2R2K1 w - -
+solution Nxd6
+id "ECM.018"
+go
+setboard b7/2q2kp1/p3pbr1/1pPpP2Q/1P1N3P/6P1/P7/5RK1 w - -
+solution Rxf6+
+id "ECM.019"
+go
+setboard 1rr1nbk1/5ppp/3p4/1q1PpN2/np2P3/5Q1P/P1BB1PP1/2R1R1K1 w - -
+solution Bxa4
+id "ECM.020"
+go
+setboard r7/5kp1/2p1p2p/1p1n3P/2rP4/2P3R1/PK2RPP1/2B5 b - -
+solution Rxc3
+id "ECM.021"
+go
+setboard r1r3k1/p3qpp1/b1P4p/3p4/3Nn3/4P3/P1Q2PPP/1BR1K2R b K -
+solution Qb4+
+id "ECM.022"
+go
+setboard rn3rk1/4bppp/1q2p3/p2pP3/8/1PN2B1P/P4PP1/2RQ1RK1 w - -
+solution Bxd5
+id "ECM.023"
+go
+setboard 6rk/1p1br2p/pqp5/3pNP2/3Pp3/P5PR/5PKR/Q7 w - -
+solution Rxh7+
+id "ECM.024"
+go
+setboard 2b3k1/5p1p/7b/p2B3p/3P4/P2Q1N1P/1q3PP1/6K1 w - -
+solution Bxf7+
+id "ECM.025"
+go
+setboard r1b5/4k3/p7/3p1n2/3Bp3/2P2r1P/PPBK1P2/4R2R w - -
+solution Bc5+
+id "ECM.026"
+go
+setboard r4rk1/1b3Npp/p7/1p3Q2/3P4/1B2q3/P5PP/3n1R1K b - -
+solution Bxg2+
+id "ECM.027"
+go
+setboard r1b2rk1/2q2ppp/2pbp3/p7/4Nn2/3B4/PPPBQ1PP/R4R1K w - -
+solution Rxf4
+id "ECM.028"
+go
+setboard 3r2k1/1q1P1ppp/r2R2n1/p4Q2/1ppB2R1/6P1/PP3PP1/6K1 w - -
+solution Rgxg6
+id "ECM.029"
+go
+setboard r2q1rk1/p3b1pp/2p5/1pn5/1n1Bp1b1/1P6/PQ1PPP2/2RNKBNR b K -
+solution Bxe2
+id "ECM.030"
+go
+setboard 3r2k1/p2r1p1p/1p2p1p1/q4n2/3P4/PQ1R3P/1P2NPP1/3R2K1 b - -
+solution Nxd4
+id "ECM.031"
+go
+setboard 2bnr1k1/2q2ppp/p7/2p1b3/2N1B3/R7/1P2QPPP/2B3K1 w - -
+solution Nxe5
+id "ECM.032"
+go
+setboard r1b2r1k/3nN2p/p2Q1p2/8/4PP2/1R6/q1PK2PP/4R3 w - -
+solution Qd5
+id "ECM.033"
+go
+setboard 1nk1r1r1/pp2n1pp/4p3/q2pPp1N/b1pP1P2/B1P2R2/2P1B1PP/R2Q2K1 w - -
+solution Nf6
+id "ECM.034"
+go
+setboard 2r2bk1/4qp2/3n2p1/2R1p1Np/2p1N3/r6P/1Q3PP1/3R2K1 w - -
+solution Rxc8
+id "ECM.035"
+go
+setboard br1r2k1/1q4p1/p2ppb1p/2p2p2/2P1n3/Pn2P2P/QPR2PPB/2NRNBK1 b - -
+solution Nxc1
+id "ECM.036"
+go
+setboard 2k4r/ppp1n1p1/2n2qb1/2N5/Q1P3p1/P2r3P/1P3PB1/R1B2RK1 w - -
+solution Qb5
+id "ECM.037"
+go
+setboard 8/6bk/1B1R4/6p1/2bNP3/4KP2/1r6/8 b - -
+solution Be5
+id "ECM.038"
+go
+setboard r1b1rnk1/1p3pb1/1qpp2p1/2n5/2PNP2p/1PN3PP/3R1PBK/BR1Q4 b - -
+solution Rxa1
+id "ECM.039"
+go
+setboard r1b2rk1/pp2b3/2pn1n1p/3pNppq/3P4/BP1N2P1/P3PPBP/R1Q2RK1 w - -
+solution Nxc6
+id "ECM.040"
+go
+setboard 5rk1/1b3ppp/p3p3/1p1q2N1/4n3/6P1/PP2PPBP/2Q2RK1 b - -
+solution Nxg3
+id "ECM.041"
+go
+setboard 2kr3r/pppq2p1/1bn1R3/6N1/1P6/1QN1B1p1/P4PP1/R5K1 b - -
+solution gxf2+
+id "ECM.042"
+go
+setboard 2rr4/5pk1/p1q3p1/3bpP1p/1p4nR/1N4Q1/PPP3PP/3NR2K b - -
+solution Bxg2+
+id "ECM.043"
+go
+setboard r4rk1/pp4pp/2nqb3/3p4/8/2NB4/PP1Q1PPP/4RRK1 w - -
+solution Bxh7+
+id "ECM.044"
+go
+setboard 3rk1r1/3b1p1p/p2BpQ2/8/2q5/2P5/PP3PPP/3R2K1 b - -
+solution Rxg2+
+id "ECM.045"
+go
+setboard 3r1rk1/4pp1p/p1Q1b1p1/3N4/3b4/5B2/Pq3PPP/R4RK1 b - -
+solution Bxd5
+id "ECM.046"
+go
+setboard 5bk1/1bqn1r1p/p3Q1p1/4p3/1PN1Pp2/P1N4P/5PP1/R1BR2K1 w - -
+solution Qxf7+
+id "ECM.047"
+go
+setboard 3rkb1r/1p3p2/p1n1p3/q5pp/2PpP3/1P4P1/P1Q1BPKP/R2N3R b k -
+solution d3
+id "ECM.048"
+go
+setboard 5rk1/1r1qbnnp/R2p2p1/1p1Pp3/1Pp1P1N1/2P1B1NP/5QP1/5R1K w - -
+solution Qxf7+
+id "ECM.049"
+go
+setboard 2kr1b1R/1b3pp1/p2pp3/1pq3P1/2nQPP2/P1N5/1PP1BB2/1K6 w - -
+solution Rxf8
+id "ECM.050"
+go
+setboard 1k1r1b1r/p1p1q3/2p1p3/4Ppp1/4nP2/P2BQ3/1PP3PB/2KR3R b - -
+solution Rxh2
+id "ECM.051"
+go
+setboard r3nb1Q/p1q2kr1/2p3p1/2ppnpP1/1P3N2/4P3/PB1P4/1R2KB1R w K -
+solution Qxf8+
+id "ECM.052"
+go
+setboard r1bq1rk1/pp3pbp/2pp1np1/2n3B1/2PNP3/2N2P2/PP1QB1PP/R4RK1 b - -
+solution Nfxe4
+id "ECM.053"
+go
+setboard 1rb1qn2/1p2nrbk/p2p2p1/P2Pp1Pp/NP2P2P/2RNB3/2QKB3/1R6 w - -
+solution Ba7
+id "ECM.054"
+go
+setboard 5r2/1b2k2p/3bp3/5PP1/Bn1Q3P/1N6/1Pr5/1K3R2 b - -
+solution Rxb2+
+id "ECM.055"
+go
+setboard r1b1r1k1/pp4bp/5np1/2qPB3/8/6NP/PPP1Q1B1/R4R1K w - -
+solution Rxf6
+id "ECM.056"
+go
+setboard r1b2r1k/1pq3bp/8/3Qp2n/1P1n1pp1/2NP2P1/3BPPBP/1R2NRK1 b - -
+solution Qxc3
+id "ECM.057"
+go
+setboard 4qk2/pp3pp1/1nbr3p/2p5/5N2/2P1Q3/PPB2PPP/2K1R3 w - -
+solution Ng6+
+id "ECM.058"
+go
+setboard 3q2k1/pb3p1p/4pbp1/2r5/PpN2N2/1P2P2P/5PP1/Q2R2K1 b - -
+solution Rd5
+id "ECM.059"
+go
+setboard r4rk1/pp1b2pp/3bpq2/3p1p2/2PPn3/PP1B4/1BQN1PPP/R4RK1 b - -
+solution Bxh2+
+id "ECM.060"
+go
+setboard r4rk1/1b3ppp/p2q1n2/1p2N3/3P4/1B6/P1Q2PPP/2R1R1K1 w - -
+solution Nxf7
+id "ECM.061"
+go
+setboard 2rq1r2/pp3pnk/2n1b1pp/3pQ3/3P1N2/P1N5/1P3PPP/1BR2RK1 w - -
+solution Bxg6+
+id "ECM.062"
+go
+setboard 4nk2/r1r1bppp/pN2p3/2np4/8/BPN3PP/P3PPK1/2RR4 w - -
+solution Ncxd5
+id "ECM.063"
+go
+setboard r4r1k/2pqn1b1/p1bp2pp/1p2pn2/4N3/2PP1PPQ/PPB4P/R1B1RNK1 b - -
+solution Nd4
+id "ECM.064"
+go
+setboard r1bQ1nk1/bp3ppp/p7/3B4/1P6/P3P1P1/2P4P/q1B2RK1 b - -
+solution Bxe3+
+id "ECM.065"
+go
+setboard 3r1rk1/1b2bppp/2q1pn2/pp4Q1/3B1P2/PBN5/1PP3PP/R2R3K b - -
+solution Rxd4
+id "ECM.066"
+go
+setboard 2nq2k1/2r3pp/p1p1rp2/PpQ1N3/1P1PR3/8/5PPP/2R3K1 w - -
+solution Nf7
+id "ECM.067"
+go
+setboard r1b2rk1/1p2bppp/p3pn2/4B3/1qBR4/2N5/P3QPPP/R5K1 w - -
+solution Bd3
+id "ECM.068"
+go
+setboard 3r4/p2nrpkp/2B1p3/2P2pP1/3R3Q/q7/6PP/6RK w - -
+solution g6
+id "ECM.069"
+go
+setboard 5r1k/p6p/1p1p1qp1/2pQpr2/8/2PP2P1/PP2RPKP/5R2 b - -
+solution e4
+id "ECM.070"
+go
+setboard b1n1r1k1/2q2p1p/p4Pp1/1pBP4/4B1P1/2P1Q3/P4K1P/4R3 w - -
+solution Qh6
+id "ECM.071"
+go
+setboard 2r2rk1/5pbp/p5p1/3P2q1/1QbN4/5P2/P4BPP/2RR2K1 b - -
+solution Bf1
+id "ECM.072"
+go
+setboard r1bqnrk1/pp2ppb1/1np3pp/4P1N1/5P2/2NBB3/PPP3PP/R2Q1RK1 w - -
+solution Nh7
+id "ECM.073"
+go
+setboard 3nk3/3q1p2/1B3pr1/4p3/bP2P2p/r2B4/2Q2RPP/3R2K1 w - -
+solution Bb5
+id "ECM.074"
+go
+setboard 3rnr1k/pp3ppp/4b3/2p1qNP1/P2pPR2/1P1P2Q1/2P3BP/5RK1 w - -
+solution Nh6
+id "ECM.075"
+go
+setboard r1b2kr1/1p1p1pNp/p1n1p1p1/5P2/3QP3/2N5/PqP1B1PP/R4RK1 w - -
+solution fxg6
+id "ECM.076"
+go
+setboard 5rk1/3r1p1p/3b2pQ/8/4q3/4B2P/3R1PP1/4R1K1 w - -
+solution Rxd6
+id "ECM.077"
+go
+setboard 4rrk1/1bp2ppp/p1q2b1B/1pn2B2/4N1Q1/2P4P/PP3PP1/3RR1K1 w - -
+solution Nxc5
+id "ECM.078"
+go
+setboard 2rnrbnk/3q1ppp/p1p5/3p1P2/1p1PPN2/4BQ1R/PP1N2PP/3R2K1 w - -
+solution Ng6+
+id "ECM.079"
+go
+setboard 5r1k/pb2r1bp/1p2B1p1/n7/4qNQ1/4B3/P4PPP/2RR2K1 w - -
+solution Rd4
+id "ECM.080"
+go
+setboard Q7/p1r1ppk1/1qP4p/2Rb2p1/8/3N2P1/4PP1P/6K1 b - -
+solution Qb1+
+id "ECM.081"
+go
+setboard 1r3rk1/5pp1/1n2qn1p/1p1pPNb1/2pP2QP/2P5/1PB3P1/R1B1R1K1 w - -
+solution exf6
+id "ECM.082"
+go
+setboard r2qr1k1/pp3pbp/3p1np1/2pP1bB1/2P1N3/3Q1PN1/PP4PP/R4RK1 b - -
+solution Nxe4
+id "ECM.083"
+go
+setboard 4r1k1/1b4pp/p7/1prP3q/2P1B3/5P2/P3Q2P/3RR2K w - -
+solution Bg6
+id "ECM.084"
+go
+setboard r1br2k1/ppb1qpp1/2P4p/2n1p3/4B3/P1N2N2/1P3PPP/2RQ1RK1 w - -
+solution Nd5
+id "ECM.085"
+go
+setboard 2r3k1/1nqbrp2/p5pp/1p1Pp1N1/8/1P5P/P1B2PP1/2RQR1K1 w - -
+solution Nxf7
+id "ECM.086"
+go
+setboard 2r1rbk1/1b3ppp/pp6/2q1pNP1/Pn1RP3/2N5/1PP2QBP/5R1K w - -
+solution Nh6+
+id "ECM.087"
+go
+setboard r1b1rk2/3n1pbQ/2qp2p1/p2N2P1/2Bp3N/4P3/PP3PP1/2KR3R w - -
+solution Nxg6+
+id "ECM.088"
+go
+setboard r1r2qkb/4pp1p/pBbp3P/3Nn1P1/4Q3/1B6/PPP5/1K1R2R1 w - -
+solution g6
+id "ECM.089"
+go
+setboard r4k2/q4npp/P2P4/2p1R3/2N5/6PP/Q5K1/8 w - -
+solution Re7
+id "ECM.090"
+go
+setboard rn1q1r2/4bpk1/p3p3/1pN1N1np/2pP4/4PpBb/PPQ4P/1B1RK1R1 w - -
+solution Nc6
+id "ECM.091"
+go
+setboard 5rk1/6pp/8/2Q4q/N2pP3/4b1Pb/4PP1K/1R3R2 b - -
+solution Bxf1+
+id "ECM.092"
+go
+setboard 2r4k/pp2Q1pp/5r2/P2P4/3Pb1P1/4Ppq1/1P1R3N/3R3K b - -
+solution Qe1+
+id "ECM.093"
+go
+setboard 1r1rb1k1/2p3pp/p2q1p2/3PpP1Q/Pp1bP2N/1B5R/1P4PP/2B4K w - -
+solution Qxh7+
+id "ECM.094"
+go
+setboard r1b4k/p2n1Bpp/1p1Q1n2/5p2/3P4/P3BqP1/1P3P1P/R4RK1 b - -
+solution Bb7
+id "ECM.095"
+go
+setboard rn1r2k1/p4ppp/2p3b1/3PQ3/1B2Np1q/1B3P2/P1P3PP/4R1K1 w - -
+solution Nf6+
+solution Qe8+
+id "ECM.096"
+go
+setboard 4r2k/5R1p/pp1Bq1pN/2p1P3/1n1b3Q/3P4/1P4KP/8 w - -
+solution Rxh7+
+id "ECM.097"
+go
+setboard r2nk1r1/pb3q1p/4p3/3p2pQ/8/BP6/P4PPP/2R1R1K1 w q -
+solution Rc7
+id "ECM.098"
+go
+setboard 6k1/1pqb1p2/5bpB/r2n4/4N1P1/1P3P2/1P1Q4/1K5R w - -
+solution Qxd5
+id "ECM.099"
+go
+setboard rr4k1/2p1ppb1/3pbnpp/q1pP4/4P3/1PNNBP1P/P1KR2P1/2Q4R b - -
+solution Qxc3+
+id "ECM.100"
+go
+setboard 1r3rk1/3Q2pp/p3p3/6B1/3np3/6R1/PqP1B2P/3K2R1 w - -
+solution Qxg7+
+id "ECM.101"
+go
+setboard 2r5/p4Q2/k1bBp3/4P3/p1nq4/5B2/2Pr2P1/1R1RK3 w - -
+solution Qb7+
+id "ECM.102"
+go
+setboard 5rk1/p1pb2pp/2p5/3p3q/2P3n1/1Q4BN/PP1Np1KP/R3R3 b - -
+solution Qxh3+
+id "ECM.103"
+go
+setboard 2r1nk2/4qpbQ/4b3/1p2RpP1/4P3/p7/PBP5/1K5R w - -
+solution Qxg7+
+id "ECM.104"
+go
+setboard 2kr4/1bpr3p/4R3/1pQ5/8/6B1/3q2PP/2R4K w - -
+solution Qxc7+
+id "ECM.105"
+go
+setboard r4rk1/1pbb2pp/p1p1p2q/2Pp4/1P1Pn3/P3B2P/2Q1BPP1/R4RNK b - -
+solution Qxe3
+id "ECM.106"
+go
+setboard r1k4r/ppp1b3/5Npp/4pb1Q/8/1B2B3/PqP2PPP/2RR2K1 w - -
+solution Qxf5+
+id "ECM.107"
+go
+setboard 6r1/p4rkp/3RQ1n1/1pp1p1B1/2p1P3/2P3R1/P4qPK/8 w - -
+solution Qxe5+
+id "ECM.108"
+go
+setboard 2kr1r2/1pp3pp/1n2p1b1/pN2B3/P1q5/1Q1p3P/5PP1/R4R1K w - -
+solution Rac1
+id "ECM.109"
+go
+setboard 2kr1bnr/1ppq4/p3bp2/6pp/4p3/2N2NBP/PP3PP1/2RQ1RK1 w - -
+solution Na4
+id "ECM.110"
+go
+setboard r2q2rk/p3bp1p/4b1p1/3pP2R/1p1B4/3BQ3/PPP3PP/5R1K w - -
+solution Rxf7
+id "ECM.111"
+go
+setboard r1b1Q3/6pk/p6p/1pq1n3/4N3/8/PPP3PP/R6K b - -
+solution Qc6
+id "ECM.112"
+go
+setboard q6r/pp3pkp/5np1/4Q3/4P3/6N1/P4PPP/5RK1 w - -
+solution Nh5+
+id "ECM.113"
+go
+setboard r1b1rk2/pp3ppQ/1np5/4q3/2B4N/4P3/PP3PP1/2R2K1R w - -
+solution Qg8+
+id "ECM.114"
+go
+setboard r1bn1rk1/pp3p1p/6p1/2bR2N1/2B2B2/q1P1P3/2Q2PPP/4K2R w K -
+solution Nxh7
+id "ECM.115"
+go
+setboard r3r1k1/p2N1pp1/1pn1p3/q1n5/2PQ4/P3B3/4PPKP/R5R1 w - -
+solution Nf6+
+id "ECM.116"
+go
+setboard 4qbk1/1R5n/p2pr1p1/2pQpNPp/P1P1P3/2P2P2/3B4/5K2 w - -
+solution Ne7+
+id "ECM.117"
+go
+setboard 3qr1k1/1p1bppbp/p2p2p1/2rPn3/P2N4/4BP2/1PPQ2PP/R2R1BK1 w - -
+solution Ne6
+id "ECM.118"
+go
+setboard 2b2r2/1p2q1k1/r3pppp/4n2P/p3N3/1B4Q1/PPP3P1/3R1R1K w - -
+solution Rxf6
+id "ECM.119"
+go
+setboard 8/R5p1/6k1/pr2p1b1/4K3/7P/5P2/6R1 w - -
+solution h4
+id "ECM.120"
+go
+setboard 5rk1/1b1r1p2/p1q1pQp1/1p2P2p/8/1BP1NR2/PP1n2PP/5R1K w - -
+solution Bxe6
+id "ECM.121"
+go
+setboard 6k1/p1p2r2/1p1p1P1Q/3P4/2P5/5qr1/PP4RP/6RK w - -
+solution Qh3
+id "ECM.122"
+go
+setboard 2b1rr1k/1p5p/1Ppp2q1/p3bN2/2P1n3/5R2/PBQ3BP/3R2K1 w - -
+solution Nxd6
+id "ECM.123"
+go
+setboard 3b2rk/7p/p7/2pbqNrn/Pp1p1R2/1P1Q2P1/1BPN1R1P/6K1 w - -
+solution Rxd4
+id "ECM.124"
+go
+setboard 1rbr2k1/1pq1bp1p/p1pNn1p1/2n1p3/2B1P2P/1NQ1BP2/PP4P1/1K1R3R w - -
+solution Nxf7
+id "ECM.125"
+go
+setboard r4rk1/1pp1b1pp/p1q5/3pPp2/3Pn3/P3N3/1P3PPP/R1BQR1K1 w - -
+solution Qb3
+id "ECM.126"
+go
+setboard rbbq1rk1/p3nppp/1p2p3/8/1B1pN3/P2B4/1P3PPP/2RQ1RK1 w - -
+solution Nf6+
+id "ECM.127"
+go
+setboard rn2qbr1/2p4k/p2p1nb1/1p1Pp2p/2P4P/2NBBPN1/PP1Q4/2KR2R1 w - -
+solution Nxh5
+id "ECM.128"
+go
+setboard 5r1k/1p2qp1p/p4R1Q/P1p5/2Prp3/7P/1P4P1/5R1K w - -
+solution Re6
+id "ECM.129"
+go
+setboard r1bq1rk1/pp2bp1p/2p2np1/3p2B1/3P4/2NQ2N1/PPP2PPP/4RRK1 w - -
+solution Rxe7
+id "ECM.130"
+go
+setboard 2rq1rk1/pp2bppp/1npp1n2/3PpN1b/2P5/2N3PP/PP2PPB1/R1BQ1RK1 w - -
+solution c5
+id "ECM.131"
+go
+setboard rnbq1rk1/pp2b1pp/5n2/2pPp3/2P1N3/3B1N2/PP4PP/R1BQK2R w KQ -
+solution d6
+id "ECM.132"
+go
+setboard 2n1rbk1/5pp1/7p/qP1pp3/4b1Q1/1B5P/1P1N1PP1/2B1R1K1 w - -
+solution Rxe4
+id "ECM.133"
+go
+setboard 4k3/2R2p2/5p1p/8/rb6/1N6/5PPP/5K2 w - -
+solution Rc4
+id "ECM.134"
+go
+setboard 2k3r1/pp2rp2/1np5/2Np1p2/P2P3p/1R2P1Pq/2Q2P1P/1R4K1 w - -
+solution Nxb7
+id "ECM.135"
+go
+setboard 2r1k3/p3nrR1/1p1p4/2p1p1p1/2P1B3/2PP1P2/P5K1/7R w - -
+solution Rh8+
+id "ECM.136"
+go
+setboard 8/1Qp3pk/7p/5p2/5Pqn/1P1r4/P5PP/2B2RK1 b - -
+solution c6
+id "ECM.137"
+go
+setboard 2rr1bk1/5p1p/pPN2np1/3Bp3/2Q1n3/1P2B1Pq/P3PP2/R2R2K1 b - -
+solution Rxd5
+id "ECM.138"
+go
+setboard 3r2k1/1p4pp/p1q1p3/3p1B2/bP1B2P1/P4Q2/5PKP/2b2R2 w - -
+solution Rxc1
+id "ECM.139"
+go
+setboard rnb1r1k1/pp5p/2pp2p1/4b3/2P1P2q/1NN1BPp1/PP1QB1P1/3RR1K1 b - -
+solution Bf4
+id "ECM.140"
+go
+setboard 5n1r/1p2kp2/rB1Nb3/4p1Pp/4p2P/1PP5/8/1K1R1R2 w - -
+solution Rxf7+
+id "ECM.141"
+go
+setboard b3r3/q2B2k1/3Q2p1/1p5p/3pP3/5P2/1p4PP/5RK1 b - -
+solution d3+
+id "ECM.142"
+go
+setboard 4r1k1/3R1ppp/p2p4/5PP1/2q2P2/2n2B2/P1P3QP/1r3R1K w - -
+solution Rxb1
+id "ECM.143"
+go
+setboard 2r3k1/pp2n3/6pQ/4q3/8/2P1p1P1/P5BP/3R2K1 w - -
+solution Bd5+
+id "ECM.144"
+go
+setboard 6k1/4ppbp/p5p1/1B1Q4/2P2Pn1/8/qr4PP/2B2RK1 b - -
+solution Bd4+
+id "ECM.145"
+go
+setboard 8/p3q1kp/1p2Pnp1/3pQ3/2pP4/1nP3N1/1B4PP/6K1 w - -
+solution Ba3
+id "ECM.146"
+go
+setboard r2b1rk1/5qp1/2p2P2/2p3Pp/p6P/2Q5/PPP5/2KR2R1 w - -
+solution g6
+id "ECM.147"
+go
+setboard 5r2/1b3pk1/pqrpp1p1/4n1Nn/1p2PP1P/8/PPPQB3/1NKR2R1 b - -
+solution Rfc8
+id "ECM.148"
+go
+setboard 1r2k2r/p5bp/4p1p1/q2pn3/1p2N1P1/6QP/PPP5/1KBR3R w k -
+solution Bh6
+id "ECM.149"
+go
+setboard rn1q1rk1/pp3p1p/2p5/3p4/5Q1P/2NP3R/PPP3P1/4RK2 w - -
+solution Rg3+
+id "ECM.150"
+go
+setboard 7r/kppQP1pp/p7/2qp1R2/4n3/1P2b2P/P1P3PK/R7 b - -
+solution Re8
+id "ECM.151"
+go
+setboard r1b1kb1Q/qp2pp2/p3n1p1/2nN2Pp/2B4P/7N/PPP5/2KRR3 w q -
+solution Nc7+
+id "ECM.152"
+go
+setboard 8/1bq3kp/p5p1/1pb1p3/4P2P/2PQ2P1/1P5B/5N1K b - -
+solution Qd8
+id "ECM.153"
+go
+setboard 2r1q1r1/6bk/p2pN1pp/1p1N4/4P3/3R3Q/PnP4P/1K4R1 w - -
+solution Nf6+
+id "ECM.154"
+go
+setboard 4r3/Q2bppkp/3p2p1/3Nn3/4P3/6PP/1qr2PB1/R3R1K1 b - -
+solution Ra8
+id "ECM.155"
+go
+setboard 6k1/p1q2pp1/2n2b2/3B2Pp/2P2P2/5N1P/Pr1Q2K1/4R3 w - -
+solution Re8+
+id "ECM.156"
+go
+setboard r1r3k1/p4n2/3p4/5NpR/8/2q2P2/P1PQ4/2K4R w - -
+solution Rh8+
+id "ECM.157"
+go
+setboard 8/p5Q1/2ppq2p/3n1ppk/3B4/2P2P1P/P5P1/6K1 w - -
+solution g4+
+id "ECM.158"
+go
+setboard r1r3k1/1p1b1nq1/6p1/pN1p4/P2Np2R/1P2P3/1Q3PP1/1K5R w - -
+solution Nd6
+id "ECM.159"
+go
+setboard 1r2k2r/3q2pp/p3pp2/P7/2P1Q3/8/1nB3PP/1R3R1K w k -
+solution Ba4
+id "ECM.160"
+go
+setboard r1bq3k/ppp2Qp1/2n1p2p/6N1/2BPN3/2P1n3/PP4PP/R5K1 w - -
+solution Nf6
+id "ECM.161"
+go
+setboard 3R4/1p2kp2/p1b1nN2/6p1/8/6BP/2r1qPPK/Q7 w - -
+solution Rd7+
+id "ECM.162"
+go
+setboard 6k1/p5p1/1p1p1nN1/1B1P4/4PK2/8/2r3b1/7R w - -
+solution Rh8+
+id "ECM.163"
+go
+setboard 8/5P2/4K1kP/4R3/8/8/8/5r2 w - -
+solution Rg5+
+id "ECM.164"
+go
+setboard 3r1rk1/p1p1qp1p/2p1b1p1/8/P2PRP2/2P1NQ2/6PP/R5K1 w - -
+solution f5
+id "ECM.165"
+go
+setboard 6k1/pr3ppp/1p3qn1/5NQ1/2p5/8/P4PPP/4R1K1 w - -
+solution Re8+
+id "ECM.166"
+go
+setboard Q7/1pq2kpp/4bp2/3r4/2B5/P3P3/1r3PPP/2R1K2R b K -
+solution Rd1+
+id "ECM.167"
+go
+setboard 4r1k1/p4ppp/4q2r/1Q6/4p3/4P1P1/P4P1P/2RR2K1 w - -
+solution Rd6
+id "ECM.168"
+go
+setboard 8/5p1k/4p1p1/3p2K1/3P1Q1P/P4P2/7q/8 b - -
+solution f6+
+id "ECM.169"
+go
+setboard r4r2/6k1/3p4/2pPp2p/4Pqp1/3P1P2/1R2Q1KP/5R2 b - -
+solution Ra1
+id "ECM.170"
+go
+setboard 4r1k1/1np1r1pp/1ppp1q2/6N1/1P3P2/4RQP1/7P/4R1K1 w - -
+solution Qh5
+id "ECM.171"
+go
+setboard r4rk1/pp3p1p/3pq1p1/2nNp3/3R1P2/7Q/PP4PP/5RK1 w - -
+solution f5
+id "ECM.172"
+go
+setboard 3qn2k/1p3Bp1/rbn4p/2p5/p1P2p2/P2b2PP/1BQNRP2/1R4K1 w - -
+solution Qxd3
+id "ECM.173"
+go
+setboard 3r1rk1/1pp4p/1q3bp1/p3p3/P2n1P2/2BB3P/1PP2QP1/R4RK1 b - -
+solution Bh4
+id "ECM.174"
+go
+setboard 4rrk1/2p2ppp/p2b4/1p1P4/3P2nq/2P4P/PPQ1RPP1/RNB3K1 b - -
+solution Qxf2+
+id "ECM.175"
+go
+setboard 1q6/2rk1p2/p1n1b1rN/3p2p1/8/3Q4/PP1B1PPP/2R1R1K1 w - -
+solution Nxf7
+id "ECM.176"
+go
+setboard r3kb1r/2q2p2/3p4/ppp1n1B1/P6P/1B3pQ1/1PP3b1/2KRR3 w kq -
+solution Bd5
+id "ECM.177"
+go
+setboard r1b2rk1/1p4pp/p1n3q1/4ppN1/7Q/2P1B3/P1P2PPP/R2R2K1 w - -
+solution Rd6
+id "ECM.178"
+go
+setboard 1rb2r2/1pR1N2p/p2R2pk/5p2/4pP2/1P1nP3/P4P1P/5BK1 w - -
+solution Rf6
+id "ECM.179"
+go
+setboard r1b3k1/ppp2r2/6p1/3n3p/6qP/3BQ3/PBP5/2KR3R w - -
+solution Bd4
+id "ECM.180"
+go
+setboard 3r2k1/p2q1r1p/1p1N2p1/1PpP4/3b1Bn1/1Q4Pb/1P2RP1P/R5KB b - -
+solution Qxd6
+id "ECM.181"
+go
+setboard 4r1k1/1pbb3p/2pp2q1/p1n5/2P2R2/1PN1n1P1/PB2Q1B1/5RK1 w - -
+solution Qxe3
+id "ECM.182"
+go
+setboard 3r2k1/p2r1p1p/1pR1p1qP/3P1pP1/3R4/1P2Q3/P4K2/8 w - -
+solution dxe6
+id "ECM.183"
+go
+setboard 3r3k/p1Q3bp/2p3p1/8/2P1BRn1/1P4Pb/P1N1q2P/6BK b - -
+solution Nf2+
+id "ECM.184"
+go
+setboard r4k2/p1pr1ppp/2q5/3PR2P/3Q4/8/6P1/5RK1 w - -
+solution Re7
+id "ECM.185"
+go
+setboard 1R3b2/3r3k/2p1bp1p/r1q1pNpQ/2PpP2P/6B1/P4PP1/1R4K1 w - -
+solution Nxh6
+id "ECM.186"
+go
+setboard r1b4r/pp2ppk1/2np1np1/3N3p/2B1P3/q3BP2/P1PQ2PP/1R3RK1 w - -
+solution Nxe7
+id "ECM.187"
+go
+setboard r3k2r/pb1n1pbp/4p1p1/q1n1P3/Bp1N1N2/4B3/PP3PPP/R2Q1RK1 w kq -
+solution Ndxe6
+id "ECM.188"
+go
+setboard 5rk1/Q2nqppp/5n2/2p5/8/1B2PP1P/Pr1B1P2/R3K2R b KQ -
+solution Ne4
+id "ECM.189"
+go
+setboard 5rk1/5pbp/b5p1/p1nNN3/1p2n3/1P4PP/P4PB1/2BR2K1 w - -
+solution Nd7
+id "ECM.190"
+go
+setboard 2k1r1r1/ppb2p2/6b1/2qP4/2P2P2/4pP1p/P3Q2P/2RBRN1K b - -
+solution Bd3
+id "ECM.191"
+go
+setboard 5r1k/pp1n1p1p/1b1qpP2/8/1PrN4/P1N1Q1P1/7P/3R1R1K w - -
+solution Qh6
+id "ECM.192"
+go
+setboard r2r1bk1/3qp2p/3pp1p1/p2n2N1/2N3Q1/BP4P1/P4PP1/2R3K1 w - -
+solution Nb6
+id "ECM.193"
+go
+setboard 1r3rk1/p4pbp/q1p2pp1/3p1b2/1n1P1P1B/PB3N2/1PPQR1PP/2KR4 b - -
+solution Bxc2
+id "ECM.194"
+go
+setboard 1rbr2k1/4qp2/p1n2bpp/1pp1p1N1/4P3/2P1BQ1P/PPB2PP1/3RR1K1 w - -
+solution Bxc5
+id "ECM.195"
+go
+setboard 2r2rk1/1p1q1ppp/1p3n2/3p1N2/4n3/1N3Q2/PPP2PPP/R2R2K1 w - -
+solution Rxd5
+id "ECM.196"
+go
+setboard rn3rk1/pp2ppbp/6p1/2R3N1/2B3b1/q3B3/P1P1Q1PP/5RK1 w - -
+solution Rxf7
+id "ECM.197"
+go
+setboard r1k3r1/pppnb1p1/4N3/3QP2p/3P3q/4B3/PPP2P2/R3KB2 w Q -
+solution Ba6
+id "ECM.198"
+go
+setboard r1nqr2k/1p1b1Q1p/p5p1/P1pPb3/5B2/2N5/BP4PP/R4RK1 w - -
+solution Qf8+
+id "ECM.199"
+go
+setboard 8/k3r1b1/Pp2rpp1/1qpQ4/4nB2/2P2NP1/7P/R4RK1 w - -
+solution Bb8+
+id "ECM.200"
+go
+setboard 1k1r4/ppq2p2/8/2pPb1r1/2P1Q1B1/6P1/PP3PK1/R4R2 b - -
+solution f5
+id "ECM.201"
+go
+setboard r1b2nk1/2qn1p1p/1ppR2p1/8/1PP1NP2/4r1PP/1Q2N1B1/3R2K1 w - -
+solution b5
+id "ECM.202"
+go
+setboard 8/5pk1/3q2p1/8/7P/5Q1K/6B1/6b1 b - -
+solution Qh2+
+id "ECM.203"
+go
+setboard 6r1/ppp4k/3p2rp/3Pb3/PPP1Np1q/5P1b/3QRRBP/6K1 b - -
+solution Bd4
+id "ECM.204"
+go
+setboard 4br1k/pR4bp/2r1B1pN/4npB1/3p4/P7/5PPP/4R1K1 w - -
+solution Rxg7
+id "ECM.205"
+go
+setboard r1bq1rk1/pppn2bp/3p2p1/3N1p2/8/BP1BRQ1P/P1PP1PP1/4R1K1 w - -
+solution Nxc7
+id "ECM.206"
+go
+setboard r6r/1p2kp2/3p1b2/pPpPpQ1P/1nP1P2P/6R1/1P2K3/1B6 w - -
+solution Rg6
+id "ECM.207"
+go
+setboard 2q1r1k1/1b3pbp/3p2p1/1Ppn3n/5P2/5B2/1P1B2PP/R2NNQ1K b - -
+solution Ndxf4
+id "ECM.208"
+go
+setboard 2r1r1k1/pp3pp1/3p3B/P2P1P2/2nb4/7R/1q3PQP/1B3R1K w - -
+solution Rb3
+id "ECM.209"
+go
+setboard r2qr1n1/p4pk1/1p1p2p1/4p3/4PQ2/1PN2P2/1PP3P1/2KR3R w - -
+solution Rh7+
+id "ECM.210"
+go
+setboard r4rk1/ppp3b1/3p1qp1/3Pp3/2P1Bn2/4BP2/PP1Q4/2K3RR w - -
+solution Rxg6
+id "ECM.211"
+go
+setboard 1k1r2r1/pp3p1p/B2q1n2/8/3Pb1p1/2Q5/PR3PPP/2B1R1K1 w - -
+solution Bf4
+id "ECM.212"
+go
+setboard k3r3/pR5p/PppR1p1p/4nP2/1PP5/8/4B1rP/2K5 w - -
+solution Re7
+id "ECM.213"
+go
+setboard 1q3rk1/r5b1/pNp1bn1p/2Pp1n2/1P2p3/1N2P2P/PBQKB3/3R3R b - -
+solution Nxe3
+id "ECM.214"
+go
+setboard r4n1r/ppq1nk2/1bpRpN2/4PpQ1/8/2B4P/PPP2PP1/2KR4 w - -
+solution Rd7
+id "ECM.215"
+go
+setboard 3r2k1/p5pp/bpP1p3/3n1p2/2NQpP1q/P3P3/1B1R1R2/4KBr1 b - -
+solution Rxf1+
+id "ECM.216"
+go
+setboard 1rq1r2k/5Rbp/p2p1p1B/2p1p3/2P1P2Q/1P6/P5PP/3b3K w - -
+solution Bxg7+
+id "ECM.217"
+go
+setboard 5Q2/5p1p/3p2p1/4p1k1/4P1P1/3R1P1K/r6P/4q3 w - -
+solution f4+
+id "ECM.218"
+go
+setboard 2b2r1k/ppq3pp/3b3r/n3NpN1/Q2PpP1B/2P1R3/PP5P/4R1K1 w - -
+solution Ngf7+
+id "ECM.219"
+go
+setboard 2r1r1k1/1R4bp/p5p1/2pqn3/8/2B5/1PQ1B1PP/5RK1 w - -
+solution Bc4
+id "ECM.220"
+go
+setboard 7k/pp1q2pp/3Nr1n1/3B2Q1/2pP4/B3P1Pb/P6P/6K1 w - -
+solution Qd8+
+id "ECM.221"
+go
+setboard r5k1/5p1p/bq1p2p1/r2Pp3/1p2N1P1/1P3P2/1KPQ3P/3R3R b - -
+solution Ra2+
+id "ECM.222"
+go
+setboard 5Bk1/pr2pp1p/2b3pQ/2p1q3/8/2P4P/PP4P1/1B1Rb1K1 w - -
+solution Bg7
+id "ECM.223"
+go
+setboard 5nk1/2b1q1p1/2p5/3pP1pQ/1r1P2P1/3B1R2/5PP1/6K1 w - -
+solution Rxf8+
+id "ECM.224"
+go
+setboard 1k1r3r/1pp2p2/p2b4/4n1p1/N3q1P1/1B2B3/PP3RP1/4RQK1 b - -
+solution Rh1+
+id "ECM.225"
+go
+setboard rnb1kr2/p4pQ1/8/1ppPpP2/2p1P3/N6P/Pq4B1/3R1RK1 w q -
+solution Nxb5
+id "ECM.226"
+go
+setboard 5r1k/2p3pp/3pQ3/3P1rN1/pp5q/5PR1/P4PKP/B7 w - -
+solution Bxg7+
+id "ECM.227"
+go
+setboard 8/pR3Bk1/3p2p1/5b1p/2P4P/6P1/P4bQK/4q3 b - -
+solution Bg1+
+id "ECM.228"
+go
+setboard r1b1Rnk1/6pp/p4q2/1pp2P2/3r4/2NB4/PP1Q2PP/4R1K1 w - -
+solution Nd5
+id "ECM.229"
+go
+setboard 1Q6/pb3pk1/1p3qp1/1N3p1p/2Pr3P/3BR1PK/r7/6R1 b - -
+solution Rh2+
+id "ECM.230"
+go
+setboard rq3r1k/p2n1p2/1pbb1np1/2p2BB1/8/2N2N2/PP3QPP/3R1RK1 w - -
+solution Rxd6
+id "ECM.231"
+go
+setboard 2kr3r/Qpp1n1p1/2b2pp1/4b3/8/6N1/PPP2P2/R1B2RK1 b - -
+solution Rh1+
+id "ECM.232"
+go
+setboard 8/2p2Q1p/1rp5/p3q1kp/P7/2P2RP1/5PK1/8 w - -
+solution Rf5+
+id "ECM.233"
+go
+setboard 1r2b3/1p2q1bk/p1p1p1p1/P1PpP2r/1P1KpPQP/4P2N/6R1/4B2R b - -
+solution Rxe5
+id "ECM.234"
+go
+setboard 6k1/3b1p1p/6p1/2BPR3/8/4Q2P/1q3rPK/8 w - -
+solution Re8+
+id "ECM.235"
+go
+setboard 2R5/4ppkp/6p1/p2P4/4P2P/p3B1P1/qbR2PK1/8 w - -
+solution Rg8+
+id "ECM.236"
+go
+setboard 3rr1k1/1b5p/p6p/1p3N2/6Pb/P1Q1p3/1PP4P/R5K1 b - -
+solution Bf2+
+id "ECM.237"
+go
+setboard 6k1/p4pq1/2n1p1p1/1p1pP1N1/3P1QPP/8/P3K3/8 w - -
+solution Qc1
+id "ECM.238"
+go
+setboard 3r1rk1/1pq1nppp/p7/2pB3Q/P4P2/1P2P3/6PP/2RR2K1 w - -
+solution Bf3
+solution Rxc5
+id "ECM.239"
+go
+setboard 8/p1r2q1k/1p1p3p/1Pp1nP2/P1P5/3R2PP/1Q4BK/8 w - -
+solution Rxd6
+id "ECM.240"
+go
+setboard 6k1/1pp2p2/p2p2q1/2PPb3/4r3/Pr4PK/2R5/2Q2NR1 b - -
+solution Rh4+
+id "ECM.241"
+go
+setboard 3r4/1pQ4R/p1b2kp1/P6p/2q5/7P/2P3P1/6K1 b - -
+solution Rd1+
+id "ECM.242"
+go
+setboard 6rr/1b3k1p/pbqppPn1/1p5Q/4PN2/P6R/1PP3BP/2B2R1K w - -
+solution Qxh7+
+id "ECM.243"
+go
+setboard 4rrk1/3b1ppp/pb6/1pqP4/P1p1PP2/1P2NK2/3QB2P/R2R4 b - -
+solution Rxe4
+id "ECM.244"
+go
+setboard 2r1r1k1/1p4bp/p2p1qp1/1n1P4/2P1B2P/1N1Q4/PP2R3/1K5R b - -
+solution Rxc4
+id "ECM.245"
+go
+setboard 6rr/ppqb1pkp/2pb1pn1/3p3Q/3P1P1N/3B1RN1/PPP3PP/5RK1 w - -
+solution Qh6+
+id "ECM.246"
+go
+setboard r2qr1k1/1pnb1pp1/p1n1p2p/8/P2P3P/B2B1NP1/6P1/R2Q1RK1 w - -
+solution Bh7+
+id "ECM.247"
+go
+setboard r2q1rk1/1b1nbpp1/p1p1p2p/1pPpN3/3P1N2/P2BP3/1PQ2PPP/R4RK1 w - -
+solution Bh7+
+id "ECM.248"
+go
+setboard 2r2rk1/pb4pp/1p2p3/4Npq1/3P1n2/5P2/PP1R2PP/RB2Q1K1 b - -
+solution Rc1
+id "ECM.249"
+go
+setboard 2r1rbk1/5pp1/bq5p/1pnBPN2/6Q1/N7/5PPP/R2R2K1 w - -
+solution Bxf7+
+id "ECM.250"
+go
+setboard 1k1r1r2/2b2R2/Bppp2p1/2q4p/Q2pP3/P2P4/2P3PP/1R4K1 w - -
+solution Bb7
+id "ECM.251"
+go
+setboard r5k1/pp2ppb1/4qn2/r3B1p1/3P4/3QNP1R/PP2K1P1/7R w - -
+solution Bxf6
+id "ECM.252"
+go
+setboard 1R2br1k/5r1p/p2p1P2/6RQ/3p1P2/4p2B/q6P/5N1K w - -
+solution Rxe8
+id "ECM.253"
+go
+setboard kr1r4/7p/2bqp1p1/p7/1Pp1PP1P/K1B1nNPB/PP5R/RN2Q3 b - -
+solution Qxb4+
+id "ECM.254"
+go
+setboard 5r1r/1pkb4/5pB1/2P5/p3R2P/Pq6/1PQ2Pn1/K2R4 w - -
+solution Rxd7+
+id "ECM.255"
+go
+setboard kn5r/p2r2p1/1pqBp1np/1Q1pPp2/R2P4/1N6/2P2PPP/R5K1 w - -
+solution Rxa7+
+id "ECM.256"
+go
+setboard 4Rnk1/2p2pp1/3r3p/p2P4/P5Q1/1B5P/5PK1/q7 w - -
+solution Rxf8+
+id "ECM.257"
+go
+setboard 4r3/2k1p2q/pp1nR1p1/2pP1pP1/2P2P2/1P6/P1K3B1/4Q3 w - -
+solution Rxd6
+id "ECM.258"
+go
+setboard 2b3k1/p4ppp/7q/2Q5/8/P3r1P1/1r4BP/R3R1K1 b - -
+solution Rxg2+
+id "ECM.259"
+go
+setboard r1b1rbk1/7p/2p1pBp1/p2pP1P1/5P2/1PqB4/P1P1Q3/1K4RR w - -
+solution Rxh7
+id "ECM.260"
+go
+setboard 2rq4/5rbk/3p1n1p/p2Pp2P/1p2b3/4BNR1/PP1Q1P2/3BK1R1 w - -
+solution Bxh6
+id "ECM.261"
+go
+setboard r2q1rkb/pp2p3/2p2pp1/3pPb2/3P3R/2N3P1/PPPQBPK1/3R4 w - -
+solution Rxh8+
+id "ECM.262"
+go
+setboard 3r2k1/p4rPp/1b1q3Q/n1p1pP2/1p6/3B1NR1/P4P1P/6RK w - -
+solution Qxh7+
+id "ECM.263"
+go
+setboard r1bqrnk1/p4p2/1p5p/3pB1p1/P2P2n1/1P1B2N1/2Q3PP/R4RK1 w - -
+solution Bh7+
+id "ECM.264"
+go
+setboard r2rn1k1/1bqn1ppp/p7/2bpP1P1/1p1N1Q2/1P3B2/PBP1NR1P/3R2K1 w - -
+solution Qxf7+
+id "ECM.265"
+go
+setboard r2r2k1/1bqpbpp1/ppn1p2p/2p1P1N1/P1B2B2/2P5/1PPRQPPP/3R2K1 w - -
+solution Nxf7
+id "ECM.266"
+go
+setboard r1b1r1k1/1p1n1p2/p1nBp1p1/q2pP1Np/P7/R2B3Q/2P2PPP/5RK1 w - -
+solution Nxf7
+id "ECM.267"
+go
+setboard r1b1k2r/ppp3pp/1qp5/2b1Pp2/3Qn3/5N2/PPPBNPPP/2KR3R w kq -
+solution Qd8+
+id "ECM.268"
+go
+setboard 1k6/1p4p1/P1p5/5Q2/2q2r2/P7/8/4R2K w - -
+solution Re8+
+id "ECM.269"
+go
+setboard 6k1/1p3p2/4r1p1/1PPrbq1p/2QN4/P2R1P1P/R4KP1/8 b - -
+solution Bg3+
+id "ECM.270"
+go
+setboard 4n1q1/1k1b4/2p4R/2Pp4/1p1N1rpQ/3B4/PPP2P2/2K5 w - -
+solution Nxc6
+id "ECM.271"
+go
+setboard r2qk2r/1pp2ppp/p3pnn1/6N1/1B1P2P1/1Q2P2P/PP3PK1/R6R b kq -
+solution Nh4+
+id "ECM.272"
+go
+setboard 2kr2r1/R2p3p/2n2p2/1R3P2/2P1p3/4BQ2/1Pq4P/4K3 w - -
+solution Ra8+
+id "ECM.273"
+go
+setboard r3r1k1/pp3pp1/2bb1q2/3p4/4n1Pp/2P1BB1P/PP2NPK1/R1Q4R b - -
+solution Qxf3+
+id "ECM.274"
+go
+setboard r1br4/ppq2pk1/3bpN2/8/2P5/3n2B1/PP2QPPP/R4K1R w - -
+solution Qg4+
+id "ECM.275"
+go
+setboard 6kb/B1p2p2/5r2/1r1p2pR/6q1/3P2P1/P1P2PP1/2KR3Q b - -
+solution Rb1+
+id "ECM.276"
+go
+setboard rn4k1/pp2p1b1/4b3/q2p2Q1/2B2P2/8/P1P1K1P1/R6R w - -
+solution Rh8+
+id "ECM.277"
+go
+setboard 3k2r1/pp1b3Q/1b2pP1p/3pN2q/5B2/7B/PP2nP1K/2R5 b - -
+solution Rg2+
+id "ECM.278"
+go
+setboard 2r2rk1/pp3qpp/8/3P1b2/3Q4/P1N1B3/5PKP/R2R4 b - -
+solution Rxc3
+id "ECM.279"
+go
+setboard r1b2rk1/1pqp1ppp/p1n1pn2/5N2/8/2PBB3/P1P2PPP/R2QR1K1 w - -
+solution Nxg7
+id "ECM.280"
+go
+setboard 4k2r/1bqnbppp/p3p3/1p2P1N1/2r2BB1/8/PPP3PP/R2Q1R1K w k -
+solution Nxf7
+id "ECM.281"
+go
+setboard 5r1k/1pqb3p/2n5/p1pB4/2Pp1r1P/1P5P/R2N2K1/3Q1R2 b - -
+solution Bxh3+
+id "ECM.282"
+go
+setboard r4r2/pp2qk2/4pnp1/3pQ3/2p2P2/3B4/PPP2P2/2KR3R w - -
+solution Bxg6+
+id "ECM.283"
+go
+setboard 3bq3/p1n2rk1/1pp1p1p1/3pPnPp/1P1P1N1P/2PN3K/P2BQR2/8 w - -
+solution Nxg6
+id "ECM.284"
+go
+setboard b6r/2q2k2/4pPp1/1p1n2Bp/2pPB1PP/2P2Q2/8/4R1K1 w - -
+solution Bxg6+
+id "ECM.285"
+go
+setboard r1b2r2/3pNpkp/3pn1p1/2pN3P/2PnP3/q3QP2/4BKP1/1R5R w - -
+solution Qh6+
+id "ECM.286"
+go
+setboard 4k3/p4ppp/nb1P4/4p3/1P6/P4BP1/3q1r1P/2R2QKR w - -
+solution Qb5+
+id "ECM.287"
+go
+setboard r2q1rk1/pp2pp2/3pb3/3Qb2R/4P1p1/1BN1Bn2/PPP2P2/2K4R w - -
+solution Rh8+
+id "ECM.288"
+go
+setboard 2r1r1k1/pp1nbpp1/4pn1p/q3NN1P/P1pP1B2/2P5/1PQ2PP1/R3R1K1 w - -
+solution Nxg7
+id "ECM.289"
+go
+setboard 1rbk2nr/p1pp2b1/7p/2qP1pp1/2Bn4/2NKBP2/PP2N1PP/R2Q3R b - -
+solution Qxc4+
+id "ECM.290"
+go
+setboard 1r3rk1/6p1/p1pb1qPp/3p4/4nPR1/2N4Q/PPP4P/2K1BR2 b - -
+solution Rxb2
+id "ECM.291"
+go
+setboard 5rk1/ppp1q2p/1n1p1np1/3P2N1/1P1R2P1/2Q4P/P3r1B1/5RK1 b - -
+solution Rxg2+
+id "ECM.292"
+go
+setboard 6k1/pp2p2p/3p2p1/4b1r1/2Pn1r1q/2B1N3/PP4B1/R3QRK1 b - -
+solution Qh2+
+id "ECM.293"
+go
+setboard r2qnr2/pp3kbQ/2npb1p1/2pN1pP1/4P3/8/PPP1BP2/R1B1K1NR w KQ -
+solution Qxg6+
+id "ECM.294"
+go
+setboard r2k3r/2pb1ppp/p1p1q3/2Q5/5B2/2N5/PPP2PPP/3R2K1 w - -
+solution Bxc7+
+id "ECM.295"
+go
+setboard 2r2r2/2N2pkp/2Q5/1N2p1b1/1p6/3P1qPb/PPR2P1P/4R1K1 b - -
+solution e4
+id "ECM.296"
+go
+setboard 2r1qrk1/pp1b1ppp/4pn2/n1b5/8/2NQ1NP1/PP1BPPBP/R2R2K1 w - -
+solution b4
+id "ECM.297"
+go
+setboard 2b1qr1k/7p/p1pR2p1/1pP1p1Q1/4P3/1B6/PP4PP/6K1 w - -
+solution Re6
+id "ECM.298"
+go
+setboard 1r2k2r/2p2p1b/q1Pppb1N/p2p2P1/Q2P4/P3B3/1P5P/2KRR3 b k -
+solution Rb4
+id "ECM.299"
+go
+setboard 8/2b2k1p/2N2pp1/P2p4/3KnP2/6BP/P5P1/8 w - -
+solution Kxd5
+id "ECM.300"
+go
+setboard 4b1r1/1p3ppk/3r3p/p1p1qP1B/3pPN2/3P3R/nPPQ3P/6RK w - -
+solution Ne6
+id "ECM.301"
+go
+setboard 4b2k/7p/3q3P/1p1pRpr1/1P1B4/2P2Q2/7K/8 w - -
+solution Qg3
+id "ECM.302"
+go
+setboard 2kr2r1/pbp4p/1p4p1/1NqpNp2/4nQ2/8/PPPR1PPP/2K1R3 w - -
+solution Nc6
+id "ECM.303"
+go
+setboard 1rr3k1/1p1bqpbp/1R1p2p1/pN1P4/P3P1n1/1Q6/3NB1PP/2B1R1K1 b - -
+solution Rc3
+id "ECM.304"
+go
+setboard r1br4/1p3k2/p2q1p2/3N1Pp1/3Q4/8/PP4P1/4RR1K w - -
+solution Re6
+id "ECM.305"
+go
+setboard r3kbnr/p4ppp/2p1p3/8/Q1B3b1/2N1B3/PP3PqP/R3K2R w KQkq -
+solution Bd5
+id "ECM.306"
+go
+setboard 3r1rk1/2p1qp1p/pnP3p1/4n3/PP1NpR2/1BQ4P/6P1/5RK1 w - -
+solution Ne6
+id "ECM.307"
+go
+setboard r1bq1k2/5pb1/p2p1n2/2pPrP2/2p4B/3B2R1/PP1Q2PP/R5K1 w - -
+solution Qg5
+id "ECM.308"
+go
+setboard 2bq1rk1/p4pbp/p2p2p1/3P4/2p1QP2/2Pr3P/PP1N2P1/R1B2RK1 b - -
+solution Bd4+
+id "ECM.309"
+go
+setboard r5rk/1p1bqpnp/3p1b1B/pBnPp2P/4P3/2N2Q2/PP3P2/R3KNR1 b Q -
+solution Nf5
+id "ECM.310"
+go
+setboard r3rk2/p2q1b1p/1pnP1Qp1/5pN1/2p2P2/P1P5/7P/4RRK1 w - -
+solution Re7
+id "ECM.311"
+go
+setboard r3r1k1/p1q2pp1/2p4p/7n/BPPP2N1/3Q1N2/P3n1P1/R1B4K b - -
+solution Nhg3+
+id "ECM.312"
+go
+setboard r2qrbk1/1p4pb/2n2p1p/pNpn4/2N5/PP1PPQPB/1B5P/2R2RK1 w - -
+solution Nbd6
+id "ECM.313"
+go
+setboard 5r1k/1p1b1p1p/p2ppb2/5P1B/1q6/1Pr3R1/2PQ2PP/5R1K w - -
+solution Qh6
+id "ECM.314"
+go
+setboard r1b2rk1/p3bppp/2q5/8/2p1NR2/PnB1P3/1PB1Q1PP/3R2K1 w - -
+solution Rd6
+id "ECM.315"
+go
+setboard r1rbb3/1R3pkp/2pBp1p1/p3P3/q6P/6P1/P2Q1P2/1R3BK1 w - -
+solution R1b4
+id "ECM.316"
+go
+setboard 4r3/pp1b3k/2p2qpp/2Pp4/1P6/PBbP1N1P/2R3P1/3Q3K b - -
+solution Re1+
+id "ECM.317"
+go
+setboard 1rb2rk1/p1p2ppp/2q5/3R4/2P1N3/bP4B1/P1Q2P1P/1K5R w - -
+solution Bd6
+id "ECM.318"
+go
+setboard 8/5k1p/5PpB/3PR3/2r4P/1p3K2/2b5/8 b - -
+solution Re4
+id "ECM.319"
+go
+setboard 4r2k/3b3p/p2p4/2pP1p2/q1B2Q1P/2PK1P2/Pr1R4/7R b - -
+solution Re4
+id "ECM.320"
+go
+setboard rnb2rk1/pp2bppp/2p5/q7/4NN2/4B1QP/PPP3P1/2KR3R w - -
+solution Rd5
+id "ECM.321"
+go
+setboard 2R5/2R4p/5p1k/6n1/8/1P2QPPq/r7/6K1 w - -
+solution Rxh7+
+id "ECM.322"
+go
+setboard r1b1r1kb/p1qn1pnp/2p1p1p1/4P1N1/2p1NPP1/4B3/PPPQ3P/3RK2R w K -
+solution Qxd7
+id "ECM.323"
+go
+setboard 5k1r/ppqnnp2/3b2p1/2pB2Qp/3p3N/1P1P2P1/P1P2P2/2B1R1K1 w - -
+solution Rxe7
+id "ECM.324"
+go
+setboard 5rk1/5p1p/8/3pNp2/RPrqn3/1Q5P/1P3PP1/4R1K1 w - -
+solution Rxe4
+id "ECM.325"
+go
+setboard 2rr2k1/4qppp/bn6/p1bB4/4N3/6P1/PB2PP1P/2RQ1RK1 w - -
+solution Rxc5
+id "ECM.326"
+go
+setboard 3r1rk1/pbqn1pp1/1pp2n1p/2b1p1B1/P1B1P2N/2N4P/1PP1QPP1/3R1RK1 w - -
+solution Rxd7
+id "ECM.327"
+go
+setboard 5rk1/r2nqpp1/p3p3/1p2P3/4N1pP/8/PPP3Q1/1K1R3R w - -
+solution Rxd7
+id "ECM.328"
+go
+setboard 1rr3k1/4ppb1/2q1bnp1/1p2B1Q1/6P1/2p2P2/2P1B2R/2K4R w - -
+solution Qh6
+id "ECM.329"
+go
+setboard 2r2r1k/1pq1b1p1/p1b1Qn1p/8/3B4/2NB4/PPP3PP/3R1R1K w - -
+solution Rxf6
+id "ECM.330"
+go
+setboard 3rqb2/1pR3pk/p3n1pp/3p4/3B4/PP6/1P4PP/4RQK1 w - -
+solution Rxe6
+id "ECM.331"
+go
+setboard rkb2qr1/1p5p/pQ1bp3/3p2B1/5n2/3B1N2/PP3PPP/2R2RK1 w - -
+solution Rxc8+
+id "ECM.332"
+go
+setboard 2r2rk1/1bq2ppp/p7/1p1pNN2/1b1PnB2/3Q3P/PP3PP1/R3R1K1 w - -
+solution Rxe4
+id "ECM.333"
+go
+setboard r3r1k1/1p3pPp/p1p5/3bb2N/7q/1P1Q4/2PB2PP/4RRK1 w - -
+solution Rxe5
+id "ECM.334"
+go
+setboard 8/5p2/4p1k1/4P1p1/2rBRbK1/5P2/r4P2/7R b - -
+solution Rxd4
+id "ECM.335"
+go
+setboard r1bqr1k1/pp3pp1/2p4p/3PN1n1/3P1b2/2NB4/PPQ2PPP/3R1RK1 b - -
+solution Rxe5
+id "ECM.336"
+go
+setboard r3r1k1/pbqn1ppp/1p3n2/1Pb5/2p5/5N1P/PBQ1BPP1/1N1R1RK1 b - -
+solution Rxe2
+id "ECM.337"
+go
+setboard 2r2rbk/6bp/5qp1/1N1p1n2/4p3/1p5P/1P3PP1/RBBQ1RK1 b - -
+solution Ng3
+id "ECM.338"
+go
+setboard r1b1r1k1/pp3p1p/1q2p1pQ/2b1P1B1/8/P2B3P/1P3PP1/2R1R1K1 w - -
+solution Rxc5
+id "ECM.339"
+go
+setboard 1k2r2r/1bpQN2p/1p6/P3p2q/4np2/2P2N2/2P2PPP/R3R1K1 b - -
+solution Rxe7
+id "ECM.340"
+go
+setboard r1k2n1r/2pb4/1p1p1qpp/p2P1p2/3N1P1P/2Q3P1/PPP1R3/2K1RB2 w - -
+solution Re8+
+id "ECM.341"
+go
+setboard r1b2r1R/1p2bpk1/4p1p1/4P1N1/p2p4/5Q2/qPP2PP1/1NKR4 w - -
+solution Qf6+
+id "ECM.342"
+go
+setboard rnb2rk1/3n1ppp/p3p3/1p2P1q1/3N4/1BN5/PPP3PP/R2Q1RK1 w - -
+solution Nxe6
+id "ECM.343"
+go
+setboard 4q1r1/5kpp/2p1nb2/2PpQp2/r4P2/1N3P2/1BP1R2P/6RK w - -
+solution Rxg7+
+id "ECM.344"
+go
+setboard 2r1k2r/1pq1bppp/p3bn2/4N3/2pPN3/2P5/P3QPPP/R1B1R1K1 w k -
+solution Nxf6+
+id "ECM.345"
+go
+setboard 1r3k1r/4Rn1p/pb1p1P2/1p1q2P1/5p2/7Q/PPP1B1RP/2K5 w - -
+solution Rxf7+
+id "ECM.346"
+go
+setboard 4rrk1/ppn3pp/2pb1n1q/3p4/1P1P4/P3BNP1/2P1BPKP/R2Q1R2 b - -
+solution Rxe3
+id "ECM.347"
+go
+setboard 2b1r2k/2Q4p/4q3/1pp5/3b4/4NP2/1P3BP1/3R2K1 w - -
+solution Rxd4
+id "ECM.348"
+go
+setboard r3r1k1/pp3ppp/1qp5/2bbNQ2/5B2/2P5/PP3PPP/3RR1K1 w - -
+solution Rxd5
+id "ECM.349"
+go
+setboard 7r/3qbk1r/3p1n2/p1pPp1p1/Pp1nPpP1/1P1Q1P1B/1NP3K1/R3B2R b - -
+solution Nxg4
+id "ECM.350"
+go
+setboard r2qn1k1/1p1b3p/2pp1b2/6pQ/p1P1P3/P1N3PB/1P6/3R1R1K w - -
+solution Rxf6
+id "ECM.351"
+go
+setboard 2rq3r/5p2/p3pkbQ/3p4/3N4/2P4R/P4PP1/4R1K1 w - -
+solution Rf3+
+id "ECM.352"
+go
+setboard r4k1r/pp2pp2/3p1b2/q2PnQpp/3N4/1BP3P1/PP3PP1/3RR1K1 w - -
+solution Rxe5
+id "ECM.353"
+go
+setboard 5rk1/2p3pp/p1p4r/2P1p3/3pPnq1/1P3R1P/PN1Q3K/R5N1 b - -
+solution Qxf3
+id "ECM.354"
+go
+setboard r1b3rk/pp1n3p/2p2b1n/4pp1q/2P5/1P3NPP/PBQ1NPB1/3RR1K1 w - -
+solution Rxd7
+id "ECM.355"
+go
+setboard 2r2rk1/p3p1bp/3qP1p1/1Q1p4/P4P2/3R4/1P4PP/2B2RK1 b - -
+solution Rxc1
+id "ECM.356"
+go
+setboard r3r1k1/4pp1p/b5pB/q1pP4/3b4/2N4P/PP4P1/R2RQ2K w - -
+solution Rxd4
+id "ECM.357"
+go
+setboard 1r6/3b1pk1/pr1p1q1p/2pPb1p1/2B1P1P1/2N2PP1/1PQ3K1/RR6 b - -
+solution Rxb2
+id "ECM.358"
+go
+setboard 2r2rk1/5ppp/1p2p3/p7/1n1R4/P1NnPN2/1P3PPP/1R4K1 b - -
+solution Nxb2
+id "ECM.359"
+go
+setboard 2r3k1/p1r1ppb1/2bp1np1/q5N1/1p1BP2Q/3P4/PP2N1PP/2R2R1K w - -
+solution Bxf6
+id "ECM.360"
+go
+setboard r3r1k1/p4ppp/2pp1b2/8/q2n1P2/2BQ3P/PPP3P1/1K1R2NR b - -
+solution Re3
+id "ECM.361"
+go
+setboard rn1kr3/pppb4/3p1q2/3P1pNn/2P2P1p/1P2Q2P/P2NR1B1/4R1K1 w - -
+solution Qxe8+
+id "ECM.362"
+go
+setboard r2q1rk1/ppp1b1pp/1nn1p3/4P3/2PP4/2N1B2P/PP1Q4/2KR1B1R b - -
+solution Rxf1
+id "ECM.363"
+go
+setboard r3k3/1pqb1p2/p3p3/4n2r/3N1Q2/2P5/PP4B1/4RRK1 w q -
+solution Rxe5
+id "ECM.364"
+go
+setboard 1rb2bk1/q4r2/pB1p1nn1/3Pp3/N3PpP1/8/1PQ1BNP1/R1R3K1 b - -
+solution Rxb6
+id "ECM.365"
+go
+setboard 2rbr2k/1pq2ppp/p3bn2/4p1B1/P3P3/2N3Q1/1PP1B1PP/3R1R1K w - -
+solution Rxd8
+id "ECM.366"
+go
+setboard r4rk1/5p2/p1b1pQpq/8/1B2P3/2NR4/PPP3PP/1K6 w - -
+solution Rd5
+id "ECM.367"
+go
+setboard 3nr1k1/p6p/2n1pRpB/3pP3/2pP2P1/q1P4P/6BK/5Q2 w - -
+solution Rxg6+
+id "ECM.368"
+go
+setboard 2rr2k1/5ppp/p1b1pn2/q1p5/P1B1PQ2/R1PN1P2/6PP/1R4K1 b - -
+solution Rxd3
+id "ECM.369"
+go
+setboard 1r2r1k1/1pqb2pp/p2bp1n1/2p3BQ/3pN3/1P1P2P1/P1P3BP/4RRK1 w - -
+solution Bd8
+id "ECM.370"
+go
+setboard 1k2rb1r/pbp1q1pp/2pp4/2PnpP2/Q7/1P3NP1/PB5P/2KR1B1R w - -
+solution Rxd5
+id "ECM.371"
+go
+setboard 7k/p1p1r2p/1p1pnr1q/5pp1/2PPPp2/2PB1P1P/P2Q1PRK/7R b - -
+solution g4
+id "ECM.372"
+go
+setboard 5qk1/p4p2/1p3Pp1/2p4Q/3rr3/7R/PP6/6RK b - -
+solution Rh4
+id "ECM.373"
+go
+setboard 5r1k/5Bb1/3p2Pp/p1pP4/1p2Q3/4P1P1/q7/3K3R w - -
+solution Rxh6+
+id "ECM.374"
+go
+setboard 2b4B/1pp2k2/1p6/3P3n/5p1P/1P4p1/P2r2P1/R5KR b - -
+solution f3
+id "ECM.375"
+go
+setboard r3k2N/pppbq1pp/5n2/3Ppn2/2BP4/2P3bP/PP2Q1P1/RNB2K1R b q -
+solution Bh2
+id "ECM.376"
+go
+setboard r2q1r2/p1pbppbk/1p3npp/n2P2B1/7Q/2NB1N2/PPP3PP/4RRK1 w - -
+solution d6
+id "ECM.377"
+go
+setboard 5n2/3bp1r1/1r1p3k/p1p2pNp/1nP2P1P/1PN1PB1K/P5R1/6R1 w - -
+solution Nf7+
+id "ECM.378"
+go
+setboard r3bb2/P1q3k1/Q2p3p/2pPp1pP/2B1P3/2B5/6P1/R5K1 w - -
+solution Bxe5+
+id "ECM.379"
+go
+setboard r1b1qbk1/7p/4p1p1/1p2Bp2/p1B2Q2/P3P3/1P3PPP/3R2K1 w - -
+solution Bc3
+id "ECM.380"
+go
+setboard 2r1k2r/3b1pb1/p2ppp2/2q2P2/2p1P2p/P1N2N2/1PP1Q1PP/3R1R1K w k -
+solution e5
+id "ECM.381"
+go
+setboard 3r1rk1/1pq1bppp/p7/n2RN3/P7/1P6/1B2QPPP/R5K1 w - -
+solution Nd7
+id "ECM.382"
+go
+setboard q1r3k1/2r4p/2p3pP/2Qp1p2/PRn5/4P1P1/5PB1/1R4K1 w - -
+solution Rxc4
+id "ECM.383"
+go
+setboard r3bknr/1p4pp/p3Q3/q4pb1/P1Bn4/8/1PP2PPP/R1B1R1K1 w - -
+solution Qd6+
+id "ECM.384"
+go
+setboard r1b1nrk1/p2n3p/2pp4/8/2P2q1N/1PB4P/P4PB1/R2QR1K1 w - -
+solution Bd5+
+id "ECM.385"
+go
+setboard 7k/5rp1/p1bQB2p/1p4nN/4P3/1Pq5/P5PP/3R3K b - -
+solution Bxe4
+id "ECM.386"
+go
+setboard r4r1k/1bq4p/p4bp1/3pn3/NP6/Q1PBB2P/6P1/3R1RK1 b - -
+solution d4
+id "ECM.387"
+go
+setboard r2r2k1/1bq2pb1/6pp/2P1p3/1nBpN2N/6PP/2Q2P2/3RR1K1 w - -
+solution Nf6+
+id "ECM.388"
+go
+setboard r3rbk1/p1q2pp1/1n5p/2pp4/4N3/1PQ3P1/PB2PP1P/3R1RK1 w - -
+solution Nf6+
+id "ECM.389"
+go
+setboard 2k1r3/Qp3pb1/2p4p/6q1/8/1P4PN/PBPn1P2/K2R4 b - -
+solution Qe5
+id "ECM.390"
+go
+setboard r3r1k1/1pp2p1b/7p/2Q5/2PP2p1/2P1NpPq/P2R1P1P/6RK b - -
+solution Rxe3
+id "ECM.391"
+go
+setboard 5bk1/5p1p/Q5p1/1B4n1/8/2q1p3/6PP/3R2K1 b - -
+solution e2
+id "ECM.392"
+go
+setboard r5k1/1p3pp1/1p3q1p/1P1bQ3/P2P3n/8/3B1PPP/R3R1K1 b - -
+solution Nf3+
+id "ECM.393"
+go
+setboard 2k2r1r/1pp1nqbp/p2p1p2/5P2/2PBN3/1P3Q2/1P4PP/R4RK1 w - -
+solution Rxa6
+id "ECM.394"
+go
+setboard r5kr/p3PR1p/1p1p2pq/4n3/8/3B4/P4QPP/4R1K1 w - -
+solution Rxe5
+id "ECM.395"
+go
+setboard 2bq1b2/1p3k2/1r1p1p1p/pNpP1PpP/P1P3P1/6B1/1P5Q/2K1R3 w - -
+solution Re6
+id "ECM.396"
+go
+setboard 2kr3r/pp3p1p/2b1p3/q3Q3/5P2/2P1B3/P1P3PP/1R3RK1 b - -
+solution Rhg8
+id "ECM.397"
+go
+setboard 2br1rk1/2qnQ2p/p4pp1/4p3/P1p1P1N1/2Pn1N1P/2B2PP1/1R1R1K2 w - -
+solution Rxd3
+id "ECM.398"
+go
+setboard 2r2nk1/6pp/p1rPqp2/1pP1p3/1P6/2B3R1/1P2Q1PP/5RK1 w - -
+solution Rxf6
+id "ECM.399"
+go
+setboard 3r2k1/pb3p1p/1q4p1/2b1P3/1Pp5/2P1p1P1/P3Q1BP/R1B4K b - -
+solution Qc6
+id "ECM.400"
+go
+setboard r2rnbk1/pp3ppp/1q4n1/3p1N2/5P2/1PQB4/PBP3PP/4RR1K w - -
+solution Nh6+
+id "ECM.401"
+go
+setboard r3nrk1/p1pb1qpp/3p1p2/2pP1N2/2P1PR2/P1PB4/4Q1PP/5RK1 w - -
+solution e5
+id "ECM.402"
+go
+setboard r1b2rk1/pp2qp2/2nRp1p1/6Pn/1Pp5/P1N1P3/1BQ2PP1/2K2B1R w - -
+solution Rxh5
+id "ECM.403"
+go
+setboard 5rr1/pp1kq1bp/2bppn2/2p3B1/4N3/2NP2P1/PPP4P/R3QRK1 b - -
+solution Nxe4
+id "ECM.404"
+go
+setboard 1r1q1k2/R4pp1/5p1r/1p1p1n1p/3Pb2N/1BP5/2P1Q1PP/4R1K1 w - -
+solution Qxe4
+id "ECM.405"
+go
+setboard R2b2k1/2rq1n1p/3p2p1/1p1Ppp1n/1P6/1B1PQN1P/1B3PP1/6K1 w - -
+solution Nxe5
+id "ECM.406"
+go
+setboard r1b3kr/bp3ppp/p1nNp3/4P3/P1Q2P2/BBP5/5qPP/R2R3K w - -
+solution Nxc8
+id "ECM.407"
+go
+setboard 6k1/5rb1/6pp/1p2p3/2b5/4B1P1/r4PBP/1RR3K1 w - -
+solution Rxc4
+id "ECM.408"
+go
+setboard 4r1k1/1p5p/5ppP/1qnP4/r4R2/P6P/1B1Q2K1/5R2 w - -
+solution Rxf6
+id "ECM.409"
+go
+setboard r2q1rnk/1p1bb1pp/p2p4/3NP1P1/P2Bp3/3Q3R/1PP1B2P/6RK w - -
+solution e6
+id "ECM.410"
+go
+setboard r4rk1/1b4bp/p1npq1P1/R3p3/8/1N2BP2/1PPQ2P1/4KB1R w K -
+solution Qxd6
+id "ECM.411"
+go
+setboard 6k1/pbq2pp1/4r2p/8/3prb2/1P1Q3P/PN2BPP1/3RRK2 b - -
+solution Bd2
+id "ECM.412"
+go
+setboard 6k1/2p3p1/2b4p/p4P2/2pR2PK/2P1r2P/1B6/8 b - -
+solution Bg2
+id "ECM.413"
+go
+setboard r1b2rk1/pp2ppbp/2np1np1/q7/4P3/2N1BN2/PPPQBPPP/2KR3R b - -
+solution Nxe4
+id "ECM.414"
+go
+setboard 3r1rk1/p1q4p/1p3bp1/3bnp2/3B4/1NPB3P/P1PQ2P1/1R2R2K b - -
+solution Nf3
+id "ECM.415"
+go
+setboard r2q1rk1/p5pp/bn1p1p2/2pP4/1bP1NP2/3B1R2/PBQ3PP/R5K1 w - -
+solution Ng5
+id "ECM.416"
+go
+setboard 1r1q2k1/7p/2p3p1/1P1n1b1r/2BQ4/4B3/P6P/1R3RK1 w - -
+solution bxc6
+id "ECM.417"
+go
+setboard r3kbnr/1ppb3p/p1q1pp2/3p4/3P4/2N2N2/PPP2PPP/R1BQ1RK1 w kq -
+solution Ne5
+id "ECM.418"
+go
+setboard r1b1qbk1/pp3r1p/2pR1np1/5p2/2P1pP2/1PN1Q1PP/PB2P1B1/5RK1 w - -
+solution Rxf6
+id "ECM.419"
+go
+setboard 3rr1k1/1p1qb2p/pP4p1/2p2p2/4RQ2/3P4/1PPB2PP/4R1K1 w - -
+solution Bc3
+id "ECM.420"
+go
+setboard 2b2r2/rpp2pkp/3pq3/2pR2P1/2n1P1N1/2P2B2/1P3Q1P/1K5R b - -
+solution Qxd5
+id "ECM.421"
+go
+setboard 6k1/rnqb3p/5ppQ/2pPp3/p1N1P3/2PB3P/5PP1/1R4K1 w - -
+solution f4
+id "ECM.422"
+go
+setboard 7r/pp4k1/3pn1p1/q1pB1b2/2P5/5NR1/1P3PP1/2Q3K1 w - -
+solution b4
+id "ECM.423"
+go
+setboard 5r2/4prkp/3q2p1/2pP1n2/N1Q2R2/1P4PP/P5K1/4R3 b - -
+solution g5
+id "ECM.424"
+go
+setboard B1b1rbk1/5ppp/pq6/1p2n3/2p2P2/6PP/PPQ4K/R1BR4 b - -
+solution Ng4+
+id "ECM.425"
+go
+setboard 8/2R4p/2R3bk/8/5N1P/1p3PP1/2pqP1K1/8 w - -
+solution g4
+id "ECM.426"
+go
+setboard 6k1/p4p1p/3pqp2/2p1r3/2Pnr1N1/P6P/1P1Q1PP1/3R1RK1 b - -
+solution Ne2+
+id "ECM.427"
+go
+setboard 1kqr3r/p1p4p/RpQP4/2P1p3/4B3/4Bp2/P4P1P/6K1 b - -
+solution Rdg8+
+id "ECM.428"
+go
+setboard 6k1/3Q1pp1/4p2p/p2pP3/1p1P2P1/nP1R1N2/q1r2PKP/8 w - -
+solution Qe8+
+id "ECM.429"
+go
+setboard 6k1/5pp1/p5r1/3Np2q/4P2p/1r3P1Q/n4P1P/3R2RK w - -
+solution Rxg6
+id "ECM.430"
+go
+setboard nr2rb2/3q1kpp/3p4/pnpPpNBP/2N1P3/3Q4/PP3P2/2K3RR w - -
+solution Nh6+
+id "ECM.431"
+go
+setboard r3k1r1/1pp2ppp/pb1p1qn1/4p2b/2B1P3/N1PP1NPP/PP2QPK1/R4R2 b q -
+solution Nh4+
+id "ECM.432"
+go
+setboard 1n2n1r1/r3qppk/p2p3p/3PpP1P/1P2P3/3B2RQ/3B1P1K/6R1 w - -
+solution Bxh6
+id "ECM.433"
+go
+setboard r2b4/pb2q1k1/np1p2r1/1N1Pp2Q/PPN1Pp2/8/2R2BPp/2R4K w - -
+solution Ncxd6
+id "ECM.434"
+go
+setboard r7/2qnb1kp/p2p1nP1/1p1Pp1p1/6N1/3BB2Q/PPP4P/5RK1 w - -
+solution Qxh7+
+id "ECM.435"
+go
+setboard n1rqk3/1p2p3/1n1pP1p1/pP1P1p1r/3B3P/1BN3p1/3Q4/R3K2R w KQ -
+solution Qg5
+id "ECM.436"
+go
+setboard rn2kr2/pp1b1pQp/3Pp3/qB1n4/3N4/P7/1PP2PPP/2KR3R w q -
+solution Nxe6
+id "ECM.437"
+go
+setboard 3r1r2/1b4bk/p1n3pp/1p2p3/4P3/q1P1QNB1/B4RPP/5RK1 w - -
+solution Bh4
+id "ECM.438"
+go
+setboard r1r3kb/1pqbpp2/p2p1npB/n7/3NP3/1BN2P2/PPPQ2P1/2KR3R w - -
+solution Bf8
+id "ECM.439"
+go
+setboard 4rr1k/pbp3bp/3p4/1p5q/3n4/1B1Q2B1/PP1N1N1P/4RRK1 b - -
+solution Rf3
+id "ECM.440"
+go
+setboard r3k2r/pp2ppbp/1qp5/2n2b2/2P5/4BN2/PP1QBP1P/2KR3R b kq -
+solution Nb3+
+id "ECM.441"
+go
+setboard 4qn1k/1b3rpp/pb2pB2/1pp1P2P/3p1NQ1/P2P2PB/1PP4K/5R2 w - -
+solution Ng6+
+id "ECM.442"
+go
+setboard 2b5/2qrrpk1/5Rp1/2p4p/1pB1PR1P/1P1P2P1/5Q1K/8 w - -
+solution Qb2
+id "ECM.443"
+go
+setboard 2r3k1/n3qppp/1B1r1n2/N7/N4P2/1Q4PP/P5B1/R1b4K b - -
+solution Qe1+
+id "ECM.444"
+go
+setboard 7r/2p1q1k1/1p3r1p/p1pPpPp1/2P1P1P1/PP6/3Q2KR/7R w - -
+solution Qxg5+
+id "ECM.445"
+go
+setboard rnb2k2/ppbp2p1/2p2pB1/8/1PN5/2P5/P4PPP/R1B3K1 w - -
+solution Bf4
+id "ECM.446"
+go
+setboard 2k5/1p1b4/2n1p1r1/7q/4RP2/3BQN2/2P2K1P/8 w - -
+solution f5
+id "ECM.447"
+go
+setboard 2k3r1/1ppr3p/p1pB2q1/6n1/N3Pp2/8/PPP1Q1PP/3R1RK1 b - -
+solution f3
+id "ECM.448"
+go
+setboard r3q2r/2p1k1p1/p5p1/1p2Nb2/1P2nB2/P7/2PNQbPP/R2R3K b - -
+solution Rxh2+
+id "ECM.449"
+go
+setboard 6r1/6rk/3p3p/p2Rp3/R1PqPp1b/2N2Q2/6PP/7K b - -
+solution Rxg2
+id "ECM.450"
+go
+setboard 4r1k1/1p2rq1p/2bQpp2/p1Pp4/3P4/P3RN2/5PPP/4R1K1 w - -
+solution Ne5
+id "ECM.451"
+go
+setboard b2b1r1k/3R1ppp/4qP2/4p1PQ/4P3/5B2/4N1KP/8 w - -
+solution g6
+id "ECM.452"
+go
+setboard 1k4q1/1p2Rprp/p1p5/2Pp4/1P1Q3P/6P1/P5K1/8 w - -
+solution Qe5+
+id "ECM.453"
+go
+setboard r2r3k/ppq3pp/2p1n3/4NQ2/3P4/1B6/PP3PPP/6K1 w - -
+solution Ng6+
+id "ECM.454"
+go
+setboard r4r1k/p2bN2p/1p1p1p2/2q4P/3Q4/1P6/1PP3P1/1K2R2R w - -
+solution Ng6+
+id "ECM.455"
+go
+setboard 2kr3r/p5b1/Pp2R1p1/2q2p1p/2p2Pn1/2P2BP1/1PQB2P1/5R1K b - -
+solution h4
+id "ECM.456"
+go
+setboard r1b2k1r/1p2qp2/pN1p1n2/2pP2pp/P2bP1P1/2N5/1P2BPP1/R2Q1RK1 b - -
+solution hxg4
+id "ECM.457"
+go
+setboard 6nk/p4rrp/1p1p1p2/1q1Pp2R/4B1P1/1PP2Q1R/P6P/7K w - -
+solution g5
+id "ECM.458"
+go
+setboard r1b1k2r/6pp/p1p1p3/3np1B1/1b2N3/8/q1PQB1PP/3RK2R w Kkq -
+solution Qxb4
+id "ECM.459"
+go
+setboard 3qrbk1/1r3p2/p1bp1Pp1/1p2p1Pp/4P2R/1P2BB1Q/P1P4P/R6K w - -
+solution Bxh5
+id "ECM.460"
+go
+setboard 2r3k1/4qpp1/2p1r3/pbQpN1Pp/3P1P1P/4P3/PP6/1KR3R1 w - -
+solution Qxb5
+id "ECM.461"
+go
+setboard 4r2k/p2Q3p/2p1r1p1/4NpR1/3P4/2P1PP1b/P4q1P/6RK w - -
+solution Nxg6+
+id "ECM.462"
+go
+setboard 4r1kb/p2r4/1np1p1p1/3nP1Bp/1p3P1R/1B2qP2/PPPN3Q/2K4R w - -
+solution Rxh5
+id "ECM.463"
+go
+setboard 2rq2k1/pp1bpp1p/3p1np1/8/3NPPnQ/1BP5/P1P3P1/1K1R3R w - -
+solution e5
+id "ECM.464"
+go
+setboard r1b3k1/3nqp1p/p1n1p1pP/3pP1N1/Pp3QN1/1Pr3P1/2PR1P2/4RBK1 w - -
+solution Rxd5
+id "ECM.465"
+go
+setboard 2r1kr2/p1qbbp1Q/3pp3/5p2/1p1N1PB1/6P1/PPP4P/K2RR3 w - -
+solution Bxf5
+id "ECM.466"
+go
+setboard r6k/ppr1qpp1/4n2p/3pP3/3P2R1/3BQ2P/P5PK/5R2 w - -
+solution Rf6
+id "ECM.467"
+go
+setboard 2rr2k1/5pn1/1b2q1pp/pP1pP3/2pP1PP1/2R1B2P/2Q3B1/3R3K w - -
+solution f5
+id "ECM.468"
+go
+setboard 2Q2bkr/5p2/1rb5/1pN1n1qB/1P1pPN2/6P1/5P2/R1R3K1 w - -
+solution Nce6
+id "ECM.469"
+go
+setboard 2r4r/1q1kb1p1/4p2p/3pP3/np6/3RBP2/NPP2Q1P/1K2R3 b - -
+solution Nc3+
+id "ECM.470"
+go
+setboard 2r4r/3bk1b1/1q2pp2/3pPp1p/1p1N1P1P/1P1R1BP1/P2Q4/1K1R4 w - -
+solution Nxf5+
+id "ECM.471"
+go
+setboard 1rb3k1/2r2pbp/p2q1npn/P1pPp1N1/2B1P3/2P1B1NP/5QP1/3R1RK1 w - -
+solution Ne6
+id "ECM.472"
+go
+setboard r7/pp4pk/2n3qp/5p2/3p4/P4QB1/1PP1RPPP/6K1 b - -
+solution d3
+id "ECM.473"
+go
+setboard 2r2r1k/1p3p1p/p2p1Pp1/3Pp3/1q2Bn1Q/8/1PP3PP/4RR1K w - -
+solution Rxf4
+id "ECM.474"
+go
+setboard r4rk1/5ppp/p7/4PR2/P1qnp2Q/4B3/1P4PP/5RK1 w - -
+solution Rh5
+id "ECM.475"
+go
+setboard 4r3/pb3pk1/6p1/8/6P1/1PNrB2K/P4P1P/2R5 b - -
+solution Rexe3+
+id "ECM.476"
+go
+setboard 1r3kr1/p3q1b1/3p2Q1/2p2p2/2P2N2/4Pn2/PB6/K2R3R w - -
+solution Ne6+
+id "ECM.477"
+go
+setboard 5r1k/6bp/3p1q2/3Q1nP1/8/6P1/PP3BKP/R2N4 b - -
+solution Ne3+
+id "ECM.478"
+go
+setboard 1r1q1k1r/Q4ppp/2B2n2/8/Pbbp4/1P4P1/2PP1P1P/R1B1K2R b KQ -
+solution Qe8+
+id "ECM.479"
+go
+setboard 5rk1/p1p1R1p1/1p5p/8/2pP1P2/3n2P1/PP2Q2P/5KNq b - -
+solution Nxf4
+id "ECM.480"
+go
+setboard r5k1/1N3ppp/4b3/1Nq5/Pn3pn1/5B2/1PPQ3P/R6K b - -
+solution Qxb5
+id "ECM.481"
+go
+setboard 1r2k2r/1bq2pp1/pn2p2p/1p2P1b1/3N4/2N3Q1/PPP3PP/1K1R1BR1 w k -
+solution Bxb5+
+id "ECM.482"
+go
+setboard r1bqn1r1/p2k1pp1/1p5p/n1pPpN2/2P1P3/P1PBB2P/4Q1P1/R4RK1 w - -
+solution Nxh6
+id "ECM.483"
+go
+setboard 2r2r2/p4p1k/1p2pBpn/2p5/6N1/8/P4P2/R3R1K1 w - -
+solution Kg2
+id "ECM.484"
+go
+setboard r4rk1/p1p2pp1/bp1p1q1p/n1nPpN2/2P1P2P/2PB4/P2BQPP1/R3K2R w KQ -
+solution Bg5
+id "ECM.485"
+go
+setboard 3rn1k1/pp3ppp/6b1/2p1Q3/2P1P3/P4P2/1B1qBP1P/1R5K w - -
+solution Rd1
+id "ECM.486"
+go
+setboard 4r1k1/5ppp/p1q3b1/1ppNr3/2P1P3/1P4QP/P4PP1/4RRK1 w - -
+solution f4
+id "ECM.487"
+go
+setboard 2kr2r1/2pqbp1p/p1n1b3/1P1pP3/4n3/1BP1BN2/1P4PP/RN1Q1RK1 b - -
+solution Bh3
+id "ECM.488"
+go
+setboard 2b3k1/5qp1/p2r1n1p/3p4/3B4/1RP3QP/P2Nr1P1/3R2K1 b - -
+solution Ne4
+id "ECM.489"
+go
+setboard 6k1/5rp1/4Nb1p/2p5/4Q3/1r5P/q5P1/3R1R1K w - -
+solution Rxf6
+id "ECM.490"
+go
+setboard 1r2r1k1/p4ppb/q1pbnn1p/4p3/N1P1P3/pPB2NP1/2Q1RPBP/R5K1 b - -
+solution Nxe4
+id "ECM.491"
+go
+setboard r4r2/1pnqb2k/3p1p1p/p1pPpPpP/2P1N1P1/4BP2/PP1Q4/R2R2K1 w - -
+solution Bxc5
+id "ECM.492"
+go
+setboard rnb3kr/ppp2ppp/1b6/3q4/3pN3/Q4N2/PPP2KPP/R1B1R3 w - -
+solution Nf6+
+id "ECM.493"
+go
+setboard 6kr/1p1r1p1p/p2pnPpQ/3Np2R/2q1P3/5P2/PPP5/2KR4 w - -
+solution Rxe5
+id "ECM.494"
+go
+setboard 3Rq1k1/1pp1Ppbp/r1b3p1/p7/P1N5/1P4P1/1B2PP1P/2R3K1 w - -
+solution Nd6
+id "ECM.495"
+go
+setboard r2q1rk1/pp1n2pp/2pb4/1P1p3n/P1PPpP2/4P2b/1BNNBP1P/R2QR1K1 b - -
+solution Nxf4
+id "ECM.496"
+go
+setboard rq1r2k1/3nbp1p/p2p2p1/1p1Pp1P1/3B1P2/3B3Q/PPP4P/2KR2R1 w - -
+solution f5
+id "ECM.497"
+go
+setboard r4rk1/1bq1bppp/8/p2pPR2/3B4/1NnP3Q/1P4PP/4R1K1 w - -
+solution Rh5
+id "ECM.498"
+go
+setboard r4rk1/1nqb1pbn/6pB/pppPp2p/8/1PP2NNP/P1BQ2P1/R4RK1 w - -
+solution Nxh5
+id "ECM.499"
+go
+setboard r1b2rk1/pp4bp/2p3p1/4q2n/NQPN1p1P/1P5n/P3PPB1/2BRRK2 b - -
+solution f3
+id "ECM.500"
+go
+setboard 4rqk1/p5b1/3p3p/3Pn1p1/1pP1NrP1/4NP2/P3Q1P1/1K1RR3 b - -
+solution Nxf3
+id "ECM.501"
+go
+setboard r2qkr2/1p3pQp/2p1b3/1B1pN3/1p6/8/1P1K1PPP/2B1R3 w q -
+solution Nxc6
+id "ECM.502"
+go
+setboard r3rk2/pb2bpp1/1n5p/q1pP1B2/1p3B2/5N2/PPQ2PPP/R2R2K1 w - -
+solution Bc8
+id "ECM.503"
+go
+setboard r1bqr2k/ppp2p1p/5b2/3Pn1p1/1PP1Bp2/8/PB2N1PP/R2Q1RK1 w - -
+solution Nxf4
+id "ECM.504"
+go
+setboard 1q4k1/p3rppp/3b1n2/8/5P2/4P3/PP1B3P/RNQ3K1 b - -
+solution Bxf4
+id "ECM.505"
+go
+setboard r3k2r/1p1b1p2/p3p3/2b3p1/4N1n1/1B5P/PPP3P1/R1B2R1K b kq -
+solution Bc6
+id "ECM.506"
+go
+setboard r3kb1r/npqbpp1p/p3n1p1/P3P3/6N1/3B1NB1/1PP3PP/R3QRK1 w kq -
+solution Ng5
+id "ECM.507"
+go
+setboard 7k/p6p/4bppb/1N6/P2p1p2/1PrP2P1/2r1P2P/1R1Q2K1 b - -
+solution f3
+id "ECM.508"
+go
+setboard 2kr4/pp1r1pp1/4n1p1/4R3/2Pp1qP1/3P2QP/5PB1/1R4K1 w - -
+solution Rc5+
+id "ECM.509"
+go
+setboard 3r1qk1/5p1p/4b1pP/1pRp4/1P1Q4/r5P1/5P2/4RBK1 w - -
+solution Rxe6
+id "ECM.510"
+go
+setboard r2qkn1r/pb2bp2/1pp1p3/5p1p/2BPN3/5NQ1/PPP2PPP/1K1RR3 w kq -
+solution d5
+id "ECM.511"
+go
+setboard 2rr1nk1/pp2q1b1/4p1p1/5p2/1nB5/2B1N1QP/PP4P1/4RRK1 w - -
+solution Nxf5
+id "ECM.512"
+go
+setboard 3r3k/p4npp/1p2qpb1/4P3/5P2/P3N3/1B2QP1P/6RK w - -
+solution exf6
+id "ECM.513"
+go
+setboard 6rk/1b2bp1p/ppq1p3/2p1Pp2/P1Br1P2/1PNR2P1/2P1QK1P/6R1 b - -
+solution Rxf4+
+id "ECM.514"
+go
+setboard r3r1k1/p1q2pp1/b1pb3p/n7/B3n3/2P1BN2/PP1N1PPP/R2QK2R b KQ -
+solution Nxc3
+id "ECM.515"
+go
+setboard 4qrk1/pp1bbppp/4pn2/2r1Q1B1/7P/2N3R1/PPP2PP1/2KR1B2 w - -
+solution Bxf6
+id "ECM.516"
+go
+setboard r5n1/pppb1B2/2k1pb2/3p2B1/5P2/2N5/PPP3P1/2KR4 w - -
+solution Nxd5
+id "ECM.517"
+go
+setboard 2b2q2/r2n2kp/1n1p1pp1/p1pP4/1pP1NPN1/1P1B4/P5PP/Q3R1K1 w - -
+solution Nexf6
+id "ECM.518"
+go
+setboard 1k1r2r1/p1p3q1/2p2p2/3pn3/1P1b2bB/1QN5/P4PPP/1R2RBK1 b - -
+solution Nf3+
+id "ECM.519"
+go
+setboard r3k2r/1bq1bp1p/p2p1np1/1p2p3/3NP3/P1N2QB1/1PP2PPP/3RR1K1 w kq -
+solution Ndxb5
+id "ECM.520"
+go
+setboard r2q4/5p1P/2p1bR2/ppk1p1P1/3pB2Q/8/PPP5/6K1 w - -
+solution g6
+id "ECM.521"
+go
+setboard r3kb1r/pp1b1pp1/4p3/2q3Qp/5B2/2PB4/P4PPP/R3R1K1 w kq -
+solution Rxe6+
+id "ECM.522"
+go
+setboard 1rbr2k1/p4pp1/5b1p/2p1p3/3qPP2/1PNB2PP/PKP2Q2/5R1R b - -
+solution c4
+id "ECM.523"
+go
+setboard r3r1k1/p6p/bp4p1/2bPN3/6n1/6P1/PB2RPB1/3R2K1 w - -
+solution d6
+id "ECM.524"
+go
+setboard 2bk3r/3r2pp/p2nQ3/q2R2P1/1p6/8/PPP2P1P/1K3B1R b - -
+solution Qxd5
+id "ECM.525"
+go
+setboard 3r1k2/1q1r1pp1/3p2bp/p2N4/8/2P1RQ1P/P4PP1/4R1K1 w - -
+solution Nf6
+id "ECM.526"
+go
+setboard 3q3r/p2r1pkp/bp1N1np1/n2p4/5Q2/B1P5/P4PPP/R3R1K1 w - -
+solution Nf5+
+id "ECM.527"
+go
+setboard r4Nk1/1p2pp1p/p1np2p1/3N4/P3PPn1/8/1bPKBqPP/R2Q1R2 b - -
+solution Qd4+
+id "ECM.528"
+go
+setboard 1kb3rr/1p2n2q/1Np2p2/1p6/1P1N1P1p/8/2P1RQPP/R6K w - -
+solution Nxb5
+id "ECM.529"
+go
+setboard r3r1k1/p3Rp1p/1qp1bQ2/8/1p1P4/3R4/PP3PPP/6K1 w - -
+solution Rg3+
+id "ECM.530"
+go
+setboard rn4k1/pp2rpb1/2pNb1pp/4p3/P3Pq2/2P2N1P/1PB1QPP1/R3R1K1 w - -
+solution Nf5
+id "ECM.531"
+go
+setboard 3r1rk1/pp3ppp/8/2p5/4PB1n/P1P2qPP/Q3RP1K/6R1 b - -
+solution Qg2+
+id "ECM.532"
+go
+setboard r4rn1/ppp1q3/2bp2kp/6P1/3QpP2/2N5/PPP1B3/2KR3R w - -
+solution f5+
+id "ECM.533"
+go
+setboard 3qr2r/1p1bppk1/3p2p1/p1nP1PQp/3N3R/1P4PP/P1P3BK/4R3 w - -
+solution Ne6+
+id "ECM.534"
+go
+setboard 2rq1rk1/1b1nbpp1/1p5p/p2pNB2/3p1N2/4P3/PPQ2PPP/2RR2K1 w - -
+solution Bh7+
+id "ECM.535"
+go
+setboard 8/5pkp/2pp2p1/4P3/1P2P3/2QBq2P/2PnNnPK/8 b - -
+solution Nf1+
+id "ECM.536"
+go
+setboard r3r2k/pb2q1p1/1p2Nn1p/2b5/2B5/2P2P2/PPQ3PP/4RR1K w - -
+solution Nf4
+id "ECM.537"
+go
+setboard r1b2nk1/ppq2ppp/8/1BP1p1NQ/5p2/8/PP3PPP/3R2K1 w - -
+solution Rd7
+id "ECM.538"
+go
+setboard 6k1/5qp1/pN5p/3pRp2/3QnP2/2r4P/r5P1/6RK b - -
+solution Qh5
+id "ECM.539"
+go
+setboard 5r1n/r2q1pkp/3p1npN/NppPp2P/1P2P3/2P1Q1P1/5P2/R3K2R w KQ -
+solution Nf5+
+id "ECM.540"
+go
+setboard 6rk/p2b4/3p1Nqp/2pPpn2/P1P4p/5P1P/Q2B1NP1/6RK b - -
+solution Ng3+
+id "ECM.541"
+go
+setboard r4r1k/pppb2pp/8/3q4/2N5/P1P2nQ1/BP2R2P/R6K b - -
+solution Ne1+
+id "ECM.542"
+go
+setboard r5rk/1pp1n1pp/p1n1b1q1/3p1p2/7R/2QB1N2/PB3PPP/4R1K1 w - -
+solution Rxe6
+id "ECM.543"
+go
+setboard 8/4Ppk1/6p1/1p6/1Pb1Q3/6pq/8/6K1 w - -
+solution Qe5+
+id "ECM.544"
+go
+setboard 3R4/4Qpk1/4p1p1/7p/7K/5rP1/5P2/2q5 w - -
+solution Qf8+
+id "ECM.545"
+go
+setboard 8/5pk1/p6p/2R5/3q2p1/6P1/2Q3PK/4r3 w - -
+solution Rg5+
+id "ECM.546"
+go
+setboard 1Q4R1/8/P1b2p2/2p2k2/2P5/5p2/1r5P/4R1K1 b - -
+solution f2+
+id "ECM.547"
+go
+setboard 5r1k/1q2R3/8/6Q1/8/8/6P1/7K b - -
+solution Rf1+
+id "ECM.548"
+go
+setboard 8/4p3/8/3P3p/P2pK3/6P1/7b/3k4 w - -
+solution d6
+id "ECM.549"
+go
+setboard 3Q4/k3K3/q7/2N1P3/1P6/5r2/8/8 b - -
+solution Rf7+
+id "ECM.550"
+go
+setboard 3k4/p1p5/8/2p1p3/4P3/PpPP2K1/1P6/8 b - -
+solution c4
+id "ECM.551"
+go
+setboard 6r1/5p1k/4p3/3pQp2/1p1P1P1q/1P3RR1/7r/5K2 w - -
+solution Rxg8
+id "ECM.552"
+go
+setboard r1b2rk1/ppp2ppp/2n3q1/b2N2N1/2BP4/4p2P/PPP3P1/R2Q1RK1 w - -
+solution Nxf7
+id "ECM.553"
+go
+setboard 1r4k1/3qb2p/pr1pppn1/2p2N2/2P2PQ1/1P4P1/P2R2BP/R5K1 w - -
+solution Bd5
+id "ECM.554"
+go
+setboard r6r/pR1nqkpp/2p1p3/3p4/6Q1/2b4P/P1PP1PP1/2B1R1K1 w - -
+solution Rxe6
+id "ECM.555"
+go
+setboard 1k1r3r/ppq2pnp/1npbb1p1/3p4/3P1NP1/2NBP2P/PPQ2P1B/1KR4R w - -
+solution Nb5
+id "ECM.556"
+go
+setboard 5rk1/p1p1br2/1p1p2qp/4p3/2PPn1pP/3Q2P1/PPN1P1K1/2RR2B1 b - -
+solution Bxh4
+id "ECM.557"
+go
+setboard r5r1/4q2k/p2p3p/5p2/4p3/P2QR3/1PP2PPP/4R1K1 w - -
+solution Rxe4
+id "ECM.558"
+go
+setboard r1b2rk1/4bnpp/2p5/pp2q3/4N3/PQ2B1P1/1PP3BP/4RRK1 w - -
+solution Ng5
+id "ECM.559"
+go
+setboard 2rr2k1/1p3p2/p2n2p1/P2PnNq1/3QP1p1/1RN5/6PP/5RK1 b - -
+solution Nf3+
+id "ECM.560"
+go
+setboard r3k1r1/pb1qpp1p/1pnp1n1B/2p2R2/3PP3/2P3PN/P1P3BP/R2Q3K b q -
+solution Nxe4
+id "ECM.561"
+go
+setboard 2r2rk1/pp2bppp/3q1n2/3nNRB1/3P4/1B5Q/PP4PP/3R2K1 w - -
+solution Nxf7
+id "ECM.562"
+go
+setboard r1bq1rk1/1pp2ppn/1pnp3p/3N4/2B1PN2/3P4/PPP3PP/R2Q1RK1 w - -
+solution Ng6
+id "ECM.563"
+go
+setboard r1b2rk1/pp3p1p/2pq2pn/2nNN3/2B1QP2/8/P1PP2PP/R1B1K2R w KQ -
+solution Nxf7
+id "ECM.564"
+go
+setboard 1r2r1k1/1bn2pbp/pp1q1np1/2pPN1B1/P1B5/2N4P/1P1Q1PP1/R3R1K1 w - -
+solution Nxf7
+id "ECM.565"
+go
+setboard 1rb2bk1/2n2qp1/p2p3p/R1pP1p2/2B5/1PBQ1N1P/2P2PP1/6K1 w - -
+solution Rxc5
+id "ECM.566"
+go
+setboard r1b3k1/2pq2pp/p4p2/1p1Nr3/2n2R2/1B6/PPQ2PPP/R5K1 w - -
+solution Rxc4
+id "ECM.567"
+go
+setboard 2rq1rk1/3bbppp/p3pn2/1p1pN3/2nP1B2/P1NBP2Q/1P3PPP/2R2RK1 w - -
+solution Nxd5
+id "ECM.568"
+go
+setboard 2r1r1k1/pp1b1ppp/1q6/3P4/7N/Pn1Q4/1P3PPP/1RB2RK1 b - -
+solution Nxc1
+id "ECM.569"
+go
+setboard 1r4nk/3b2bp/3p4/3P3p/2pNPq2/P1N2p1P/1P3Q2/1R4KR b - -
+solution Rxb2
+id "ECM.570"
+go
+setboard 2r5/p3kpp1/P2p4/1P2pP1p/1P2PqnP/6R1/r2N2P1/3RQ1K1 b - -
+solution Rxd2
+id "ECM.571"
+go
+setboard 2br2k1/1p2qppp/r1n1p3/pQ1nN3/P2P4/2B3P1/1P3PBP/2RR2K1 w - -
+solution Qxa6
+id "ECM.572"
+go
+setboard 5rk1/3q2bp/3pb2r/1p1n1p2/3p1P2/P2B1QN1/1P1B2PP/2R1R1K1 w - -
+solution Nxf5
+id "ECM.573"
+go
+setboard 4r1k1/1ppQr1p1/1p1p1pP1/3P3p/7P/1P3q2/P1P5/1KRR4 w - -
+solution Re1
+id "ECM.574"
+go
+setboard 2Rr2k1/7p/4pqp1/p4p2/1p1P1Q1P/8/PP3PP1/6K1 w - -
+solution Qe5
+id "ECM.575"
+go
+setboard 4r1kb/5p1p/6pB/3Np3/4n3/P3Q1PP/2q2P2/R5K1 w - -
+solution Rc1
+id "ECM.576"
+go
+setboard 5rk1/bp4p1/p2rp2p/8/8/2PN4/PP1R1PPP/3R2K1 b - -
+solution e5
+id "ECM.577"
+go
+setboard 2q1rk2/QR3ppp/1pPpb3/1P2p1b1/4P3/6P1/3N1PBP/6K1 w - -
+solution Bh3
+id "ECM.578"
+go
+setboard n1bq3k/pp4bp/6p1/5pP1/3p1P2/1B1P4/PB3Q1P/4R1K1 w - -
+solution Bxd4
+id "ECM.579"
+go
+setboard r3r1k1/p2n4/3p1pp1/qnp3B1/1p2P1P1/1P3P2/PP2N2Q/1K1R1B2 w - -
+solution Nf4
+id "ECM.580"
+go
+setboard 6k1/pb3ppp/1p2p3/4P3/5P2/P1r5/1q4PP/1B2Q1RK b - -
+solution Rc1
+id "ECM.581"
+go
+setboard 2rq1kbR/4R1p1/3p3r/pp1P1Pp1/6P1/3B4/PPP1Q3/6K1 w - -
+solution f6
+id "ECM.582"
+go
+setboard 2r5/5kb1/4ppp1/pp1qB3/2rP4/1RP2R1Q/P4PP1/6K1 b - -
+solution Rh8
+id "ECM.583"
+go
+setboard 4k3/4Bp2/1p2nP1P/2p5/2K1b1B1/8/P7/8 w - -
+solution Bf3
+id "ECM.584"
+go
+setboard 3rr1k1/ppp1qp1p/3b2p1/4np1P/1P1N1Pn1/P1P4R/1B1NB3/R2Q1K2 b - -
+solution Nf3
+id "ECM.585"
+go
+setboard 1k1r3r/ppqb4/5Ppp/3p4/P2np3/3BR1Q1/2PB1PPP/R5K1 w - -
+solution Rxe4
+id "ECM.586"
+go
+setboard r2q1rk1/pb1nbpp1/1pp1pn1p/3pN3/2PPP3/2N1B1P1/PP3PBP/R2Q1RK1 w - -
+solution Nxc6
+id "ECM.587"
+go
+setboard 8/2R2pbk/6pp/1p2pq2/1P2Qn2/3P3P/3B1PP1/r3N1K1 b - -
+solution Nxd3
+id "ECM.588"
+go
+setboard 2r2rk1/pp2pp1p/2np2p1/q4P2/2PBP1b1/2N5/PP1Q2PP/R4RK1 w - -
+solution h3
+id "ECM.589"
+go
+setboard r2b1rnk/1p4qp/p1p1b1p1/2PpNp2/PP1PnP1Q/3BB2R/4N1PP/R6K w - -
+solution Qxh7+
+id "ECM.590"
+go
+setboard r1b2rk1/1p3pbp/2p3p1/p1q5/1P6/1Q4P1/1P2PPBP/R1B1R1K1 b - -
+solution Be6
+id "ECM.591"
+go
+setboard 4r1k1/r1q2p1p/p5pB/1pbBpN1n/1n2P3/5Q2/PP3PPP/R1R3K1 w - -
+solution Rxc5
+id "ECM.592"
+go
+setboard r1r3k1/ppnbb1pp/2ppp1q1/1P3p2/P1PPn3/2N2NP1/2Q1PPBP/1RB2RK1 w - -
+solution Nxe4
+id "ECM.593"
+go
+setboard r1b1k2r/2q1bppp/p3p3/1p1nP1B1/3Q4/2N5/PPP1B1PP/2KR3R w kq -
+solution Bxe7
+id "ECM.594"
+go
+setboard 1rb1r1k1/p1p1qppp/2pb4/8/2P3n1/4P1P1/PB2BP1P/R1QN1RK1 b - -
+solution Nxh2
+id "ECM.595"
+go
+setboard 2rqk1nr/pp3ppp/2n1p3/2b5/3N4/2NQB1P1/PP2PPKP/R4R2 w k -
+solution Nxe6
+id "ECM.596"
+go
+setboard rnb2rk1/pp4pp/2pb1n2/3N1p1q/2P5/3N2P1/P1Q1PPBP/R1B2RK1 w - -
+solution Bf4
+id "ECM.597"
+go
+setboard 8/8/1p1k4/5ppp/PPK1p3/6P1/5PP1/8 b - -
+solution f4
+id "ECM.598"
+go
+setboard 8/5pp1/7p/5P1P/2p3P1/2k5/5P2/2K5 w - -
+solution f6
+id "ECM.599"
+go
+setboard 7k/8/1p1ppp1p/1Pp5/2P2P2/8/3P2PP/6K1 w - -
+solution f5
+id "ECM.600"
+go
+setboard 8/p5k1/2p2p2/4p1p1/1p2P3/1P4PP/1PP5/5K2 b - -
+solution g4
+id "ECM.601"
+go
+setboard 8/5K2/kp6/p1p5/P2p4/1P3P2/2P5/8 b - -
+solution b5
+id "ECM.602"
+go
+setboard 8/2k3p1/2p4p/5P2/2K3PP/8/8/8 w - -
+solution g5
+id "ECM.603"
+go
+setboard 8/1kp1b3/1p4K1/4P2p/P1P3p1/5pP1/P4P2/4B3 b - -
+solution h4
+id "ECM.604"
+go
+setboard 8/8/4b1p1/2Bp3p/5P1P/1pK1Pk2/8/8 b - -
+solution g5
+id "ECM.605"
+go
+setboard 8/8/3K1k2/5p1p/4p1p1/4P1P1/5PP1/8 b - -
+solution f4
+id "ECM.606"
+go
+setboard r1b5/p2k1r1p/3P2pP/1ppR4/2P2p2/2P5/P1B4P/4R1K1 w - -
+solution Bxg6
+id "ECM.607"
+go
+setboard 6r1/1p3k2/pPp4R/K1P1p1p1/1P2Pp1p/5P1P/6P1/8 w - -
+solution Rxc6
+id "ECM.608"
+go
+setboard 1k2b3/4bpp1/p2pp1P1/1p3P2/2q1P3/4B3/PPPQN2r/1K1R4 w - -
+solution f6
+id "ECM.609"
+go
+setboard 2kr3r/ppp1qpp1/2p5/2b2b2/2P1pPP1/1P2P1p1/PBQPB3/RN2K1R1 b Q -
+solution Rh1
+id "ECM.610"
+go
+setboard 1r3qk1/pb3p1p/1pn2PpQ/2pN4/3r4/5B2/PPP4P/4RRK1 w - -
+solution Ne7+
+id "ECM.611"
+go
+setboard 4r1k1/5p1p/3q2p1/1p1P4/1P6/2p4P/2Q1nPB1/4RK2 b - -
+solution Ng3+
+id "ECM.612"
+go
+setboard 6k1/2q3p1/1n2Pp1p/pBp2P2/Pp2P3/1P1Q1KP1/8/8 w - -
+solution e5
+id "ECM.613"
+go
+setboard 5r2/pp1RRrk1/4Qq1p/1PP3p1/8/4B3/1b3P1P/6K1 w - -
+solution Qxf7+
+id "ECM.614"
+go
+setboard 6k1/1q2rpp1/p6p/P7/1PB1n3/5Q2/6PP/5R1K w - -
+solution b5
+id "ECM.615"
+go
+setboard r5r1/8/bRP1pk1p/3pNp2/5P2/7P/PR4P1/6K1 w - -
+solution Rxa6
+id "ECM.616"
+go
+setboard 3r2k1/p6p/b2r2p1/2qPQp2/2P2P2/8/6BP/R4R1K w - -
+solution Rxa6
+id "ECM.617"
+go
+setboard 8/p3q1k1/6p1/1p3nP1/2pp1QBr/P2P4/1PP2K2/R7 b - -
+solution Qe3+
+id "ECM.618"
+go
+setboard 7k/4b2p/5p1P/5PP1/1pNp1P2/1P1B4/2P2K2/r7 w - -
+solution g6
+id "ECM.619"
+go
+setboard 5r1k/1p1b2rP/p2p4/3P3B/P2P4/5pP1/1P2pP2/R3R1K1 b - -
+solution Rxg3+
+id "ECM.620"
+go
+setboard 6B1/2p2pp1/2p5/p3K3/1k6/nP4P1/5P1P/8 b - -
+solution Nc4+
+id "ECM.621"
+go
+setboard 3q1k2/5p2/p5pN/1b2Q2P/8/8/5PPK/8 w - -
+solution Qh8+
+id "ECM.622"
+go
+setboard 6k1/p3b1pp/4p3/4Pp2/Pp1r1P1P/1P4P1/2p2R2/5RK1 b - -
+solution Rc4
+id "ECM.623"
+go
+setboard 4r2k/3n1Qpp/1pRP1p2/p4P2/1p1P2P1/6rP/P3q1B1/6RK w - -
+solution Qe6
+id "ECM.624"
+go
+setboard 2r2rk1/p1N2p1p/2P1p1p1/1Pp3q1/3b4/5Q2/P1P3PP/4RR1K w - -
+solution Nxe6
+id "ECM.625"
+go
+setboard 3r1r2/pp1P3k/4Rbp1/1BP2p1p/8/7P/P4KP1/3R4 w - -
+solution Ba6
+id "ECM.626"
+go
+setboard 3rr1k1/pppRn1pp/4Pp2/1P5q/1QB5/4P3/P4P1P/4K1R1 w - -
+solution Qxe7
+id "ECM.627"
+go
+setboard rn1q2k1/pp3pb1/3p2pp/2pP2N1/3r1P2/7Q/PP4PP/R1B2RK1 w - -
+solution Nxf7
+id "ECM.628"
+go
+setboard 8/6Bp/6p1/2k1p3/4PPP1/1pb4P/8/2K5 b - -
+solution b2+
+id "ECM.629"
+go
+setboard 5bk1/r4ppp/1r1P1n2/2p2N2/b7/2B3P1/5PBP/R3R1K1 w - -
+solution Bxf6
+id "ECM.630"
+go
+setboard 8/8/8/P2k1p2/2N5/1pb2P2/4P3/2K5 w - -
+solution a6
+id "ECM.631"
+go
+setboard 3qr1k1/p4ppp/1p1P4/2r1nN2/4P2n/P7/1B4P1/3QRRK1 w - -
+solution d7
+id "ECM.632"
+go
+setboard 6k1/5pbp/6p1/2p1r3/1pPr4/3n2NP/1PB2PP1/1R1R2K1 b - -
+solution Nxb2
+id "ECM.633"
+go
+setboard 4r3/p4pk1/6p1/P1pB2Pp/2P3b1/2p1N1P1/Qb1r1P2/6K1 b - -
+solution Rxe3
+id "ECM.634"
+go
+setboard 2r1rbk1/p1Bq1ppp/Ppn1b3/1Npp4/B7/3P2Q1/1PP2PPP/R4RK1 w - -
+solution Nxa7
+id "ECM.635"
+go
+setboard r4rk1/ppq3pp/2p1Pn2/4p1Q1/8/2N5/PP4PP/2KR1R2 w - -
+solution Rxf6
+id "ECM.636"
+go
+setboard r3qr1k/1b4pp/p2RQ3/Bp2p3/4p3/6P1/PPP2P1P/3R2K1 b - -
+solution Qh5
+id "ECM.637"
+go
+setboard 8/6kP/6p1/1p1pP3/pP6/P1n2K2/2N5/8 w - -
+solution e6
+id "ECM.638"
+go
+setboard 8/Pb6/8/8/7K/5k1p/6pB/8 b - -
+solution g1=Q
+id "ECM.639"
+go
+setboard 8/pR4pk/1b6/2p5/N1p5/8/PP1r2PP/6K1 b - -
+solution Rxb2
+id "ECM.640"
+go
+setboard 6k1/p4pp1/Pp2r3/1QPq3p/8/6P1/2P2P1P/1R4K1 w - -
+solution cxb6
+id "ECM.641"
+go
+setboard 6k1/p4pbp/Bp2p1p1/n2P4/q3P3/B1rQP3/P5PP/5RK1 w - -
+solution dxe6
+id "ECM.642"
+go
+setboard 5r2/R4p2/5P1k/4PK2/1p6/8/8/8 w - -
+solution Rxf7
+id "ECM.643"
+go
+setboard 4r2k/pppb2pp/2np2q1/3B4/2P2P2/1PB1R1P1/PQ5P/6K1 w - -
+solution f5
+id "ECM.644"
+go
+setboard 1r6/3r1Pk1/p2p1np1/5q2/1p3P2/1B5R/PPP4Q/1K1R4 w - -
+solution Rh8
+id "ECM.645"
+go
+setboard 8/2k5/2p5/2pb2K1/pp4P1/1P1R4/P7/8 b - -
+solution Bxb3
+id "ECM.646"
+go
+setboard 2r5/1r5k/1P3p2/PR2pP1p/4P2p/2p1BP2/1p2n3/4R2K b - -
+solution Nd4
+id "ECM.647"
+go
+setboard 4r2k/p2qr1pp/1pp2p2/2p1nP1N/4R3/1P1P2RP/1PP2QP1/7K w - -
+solution Rxg7
+id "ECM.648"
+go
+setboard 6k1/p4p2/5Ppp/3RP3/Pr4P1/2p2K2/7P/8 w - -
+solution Rd8+
+id "ECM.649"
+go
+setboard 8/1R2P3/6k1/3B4/2P2P2/1p2r3/1Kb4p/8 w - -
+solution Be6
+id "ECM.650"
+go
+setboard 2kr2r1/pp2bQ1p/2b1P3/2qN4/8/1B2p2P/PPP3P1/3R1R1K b - -
+solution e2
+id "ECM.651"
+go
+setboard r1b2rk1/1p2qppp/p3p3/2n5/3N4/3B1R2/PPP1Q1PP/R5K1 w - -
+solution Bxh7+
+id "ECM.652"
+go
+setboard 3r1rk1/pp1q1ppp/3pn3/2pN4/5PP1/P5PQ/1PP1B3/1K1R4 w - -
+solution Bb5
+id "ECM.653"
+go
+setboard r2qrbk1/5ppp/pn1p4/np2P1P1/3p4/5N2/PPB2PP1/R1BQR1K1 w - -
+solution Bxh7+
+id "ECM.654"
+go
+setboard 6rk/3nrpbp/p1bq1npB/1p2p1N1/4P1PQ/P2B3R/1PP1N2P/5R1K w - -
+solution Nxh7
+id "ECM.655"
+go
+setboard 1rb2rk1/3nqppp/p1n1p3/1p1pP3/5P2/2NBQN2/PPP3PP/2KR3R w - -
+solution Bxh7+
+id "ECM.656"
+go
+setboard 2k5/ppp3pp/8/NQ2n2q/2Pp1n2/R4bP1/1P3P1P/4R1K1 b - -
+solution Qxh2+
+id "ECM.657"
+go
+setboard 5rrk/1p3qpp/p3pn2/2PpBp2/3P1P1Q/P1P1R2R/2b1B1PP/6K1 w - -
+solution Qxh7+
+id "ECM.658"
+go
+setboard r4rk1/1bq2ppp/p1p1p3/2b1P1B1/3p2Q1/3B4/PPP2PPP/R3R1K1 w - -
+solution Bxh7+
+id "ECM.659"
+go
+setboard r4rk1/pb1q1ppp/2N1p3/2Rn4/3P4/3BPQ2/1P3PPP/2R3K1 w - -
+solution Bxh7+
+id "ECM.660"
+go
+setboard r5rk/1p1q1p1p/5pn1/p2p1N1Q/3P2P1/PP2R3/5P1P/5RK1 w - -
+solution Qxh7+
+id "ECM.661"
+go
+setboard 2r2r2/p2qppkp/3p2p1/3P1P2/2n2R2/7R/P5PP/1B1Q2K1 w - -
+solution Rxh7+
+id "ECM.662"
+go
+setboard 1r1qr1k1/5p1p/1n2p1p1/pp1pP1P1/2pP1BB1/PnP3P1/1P3PK1/1R1Q3R w - -
+solution Rxh7
+id "ECM.663"
+go
+setboard 4rrk1/2q1bppp/p2p4/1p1Pn3/3B1R2/P2B2Q1/1PP3PP/5R1K w - -
+solution Bxh7+
+id "ECM.664"
+go
+setboard r1b2rk1/2q1bppp/p1n1p3/1p1np1P1/5P2/1NNBBQ2/PPP4P/R4RK1 w - -
+solution Bxh7+
+id "ECM.665"
+go
+setboard 5r1k/ppp2qnp/1n1p1N1Q/3Ppb2/2P4P/7B/PP6/2KR2R1 w - -
+solution Nxh7
+id "ECM.666"
+go
+setboard r4rk1/pp2q1p1/4b2p/2ppb3/6n1/2P3N1/PPQBBPPP/R4RK1 b - -
+solution Nxh2
+id "ECM.667"
+go
+setboard b3r1k1/2rN1ppp/2n1p3/p7/P3BP2/1R6/q1P2QPP/3R2K1 w - -
+solution Bxh7+
+id "ECM.668"
+go
+setboard 2r1qrk1/3n3p/b3pPp1/4P3/1pp1nBN1/pP4PQ/P1P2PK1/3RR3 w - -
+solution Qxh7+
+id "ECM.669"
+go
+setboard r1b1rnk1/pp1nb1pp/2p1pp2/q3N3/2PP1P2/3BP1N1/PBQ3PP/R4RK1 w - -
+solution Bxh7+
+id "ECM.670"
+go
+setboard 4r1k1/2q2r1p/p3bQ2/1p4Bp/2np4/8/PPB2PP1/3RR1K1 w - -
+solution Bxh7+
+id "ECM.671"
+go
+setboard 5rk1/pbrn1ppp/1ppN1q2/2P1p3/3P4/1PRB4/P3QPPP/5RK1 w - -
+solution Bxh7+
+id "ECM.672"
+go
+setboard 2rqr1k1/1p1bbppp/p3p3/n7/3P2Q1/2PB1N2/P4PPP/R1B1R1K1 w - -
+solution Bxh7+
+id "ECM.673"
+go
+setboard r1b2r1k/ppppq1pp/2n1n3/6N1/2B2P2/4B3/PPP3PP/R2Q1RK1 w - -
+solution Nxh7
+id "ECM.674"
+go
+setboard rn1q1rk1/pb1p1ppp/4p3/2pnP3/1bp5/2N2N2/PP3PPP/RBBQK2R w KQ -
+solution Bxh7+
+id "ECM.675"
+go
+setboard r2r2k1/p1p2p1p/4pPp1/1Pqb4/8/7R/1PB2PPP/3QR1K1 w - -
+solution Rxh7
+id "ECM.676"
+go
+setboard r1b2rk1/1pq2ppp/p1p1p3/2n1P3/2N2P2/3B4/PPP3PP/R2Q1RK1 w - -
+solution Bxh7+
+id "ECM.677"
+go
+setboard rnq3rk/4bp1p/p1p3pQ/1p1pP3/1P1N1B2/2P3R1/1P3PPP/R5K1 w - -
+solution e6
+id "ECM.678"
+go
+setboard rn3rk1/pp1bppbp/1qp3p1/4P1N1/PP1PB3/2P1B3/4Q1PP/R4RK1 w - -
+solution Nxh7
+id "ECM.679"
+go
+setboard 3rr1k1/1pq1nppp/p1p2b2/4pB2/2QPP3/P1P1B3/1P4PP/3R1RK1 w - -
+solution Bxh7+
+id "ECM.680"
+go
+setboard 1r2nrkb/2n2p1p/p2p1Pp1/P1pPp1P1/1pP1P1q1/1P1BB1N1/3Q4/2KR3R w - -
+solution Rxh7
+id "ECM.681"
+go
+setboard 2rrn1k1/2q2ppp/p2pp3/1p2P1P1/4B3/P5Q1/1PP3PP/R4R1K w - -
+solution Bxh7+
+id "ECM.682"
+go
+setboard r2q3r/2pkb1p1/p2p1n2/4p1p1/Pp2P1P1/1QP5/1P1P2PP/RNB2RK1 b - -
+solution Rxh2
+id "ECM.683"
+go
+setboard 2rq1rk1/pp1bnpbp/4p1p1/3pP1N1/3P2Q1/2PB4/P4PPP/R1B1R1K1 w - -
+solution Nxh7
+id "ECM.684"
+go
+setboard 2rq1bk1/1br2p1p/p2p2p1/1p1P4/4Q3/PP3N2/1BP5/1K1R3R w - -
+solution Rxh7
+id "ECM.685"
+go
+setboard r2qn1k1/pb4Pp/1pn5/2p5/2P2p2/P1PB4/5PPP/R2Q1RK1 w - -
+solution Bxh7+
+id "ECM.686"
+go
+setboard r4rk1/pp1n1ppp/3qp3/3nN1P1/b2P4/P2B1Q2/3B1P1P/1R2R1K1 w - -
+solution Bxh7+
+id "ECM.687"
+go
+setboard r2r2k1/ppqbbppp/4pn2/6N1/n1P4P/3B1N2/PP2QPP1/1KBR3R w - -
+solution Nxh7
+id "ECM.688"
+go
+setboard r5k1/6bp/2q1p1p1/p2pP3/3P4/1rP2QP1/3B1PK1/2R4R w - -
+solution Rxh7
+id "ECM.689"
+go
+setboard r6r/4ppk1/p2p1bp1/B2p4/3P2p1/QP2P3/P1R1qPPP/2R3K1 b - -
+solution Rxh2
+id "ECM.690"
+go
+setboard 4nrk1/r4p1p/p2p2pQ/2pPpNPP/qpn1P3/5P1R/PPP1N3/2K3R1 w - -
+solution Qxh7+
+id "ECM.691"
+go
+setboard r3k2r/1b1n1p2/pq1p1bp1/1p4p1/P3P3/1NN5/1PP3PP/R2QRB1K b kq -
+solution Rxh2+
+id "ECM.692"
+go
+setboard r2qrnk1/4bppp/b1p5/1p1p2P1/p2P1N1P/2NBP3/PPQ2P2/2K3RR w - -
+solution Bxh7+
+id "ECM.693"
+go
+setboard rn1q1rk1/pppbb1pp/4p3/3pP1p1/3P3P/2NB4/PPP2PP1/R2QK2R w KQ -
+solution Bxh7+
+id "ECM.694"
+go
+setboard 1r2nr1k/6pp/pp1p1p2/2pPnN2/q1P1PB2/5PR1/4K1P1/2Q4R w - -
+solution Bxe5
+id "ECM.695"
+go
+setboard 3r1rk1/4qp1p/p1bb2p1/2p5/3P4/1P6/PBQN1PPP/2R2RK1 b - -
+solution Bxh2+
+id "ECM.696"
+go
+setboard r2q1rk1/3n1ppp/8/1pbP2P1/p1N4P/PnBBPQ2/5P2/R3K2R w KQ -
+solution Bxh7+
+id "ECM.697"
+go
+setboard 2k3r1/ppq2p1p/n1Pb1p2/8/6r1/4BN1b/PPQ2PPP/R3RBK1 b - -
+solution Bxh2+
+id "ECM.698"
+go
+setboard 3qr1k1/1br2ppp/p2b4/8/PpNp4/3P4/1PP2PPP/R1BQ1RK1 b - -
+solution Bxh2+
+id "ECM.699"
+go
+setboard 3r2k1/p1R2p2/4pQp1/1q5p/5P1P/1PR5/2Pr2P1/6K1 b - -
+solution Rxg2+
+id "ECM.700"
+go
+setboard r1b4r/3p1kp1/pp3q1p/4RP2/8/B7/P5PP/4QRK1 w - -
+solution Qe4
+id "ECM.701"
+go
+setboard 1r2rnk1/2R2bpp/p2q4/1p1N2R1/5P2/1Q1B3P/PP4P1/7K w - -
+solution Rxg7+
+id "ECM.702"
+go
+setboard 3r2k1/pb5p/1p2qpp1/8/2p5/1P1nP3/P1N2PPP/1Q1R1R1K b - -
+solution Bxg2+
+id "ECM.703"
+go
+setboard 4rrk1/2qb2pp/p5P1/1p2p3/1b2P3/2N5/PPPQ4/1K1R2R1 w - -
+solution gxh7+
+id "ECM.704"
+go
+setboard 3q1k2/pp3ppn/2p1n2p/4pN1N/P3P2P/5Q2/1PP2PP1/6K1 w - -
+solution Nhxg7
+id "ECM.705"
+go
+setboard 2r2r1k/3b1pb1/p3pp1p/q2p1P1B/8/2N2RR1/P1PQ2PP/7K w - -
+solution Rxg7
+id "ECM.706"
+go
+setboard 5bk1/1p4p1/4N1R1/3p4/p1r2P1q/Pr1QP2P/1P6/1K4R1 w - -
+solution Rxg7+
+id "ECM.707"
+go
+setboard 2r1r1k1/5ppp/p3pn2/1pb1N3/2P5/1PQ3R1/PB2qPPP/3R2K1 w - -
+solution Rxg7+
+id "ECM.708"
+go
+setboard 7k/1bp1P1p1/3p2rp/1pb2p1q/5P2/1BP2N1P/1P4P1/R1B2R1K b - -
+solution Rxg2
+id "ECM.709"
+go
+setboard r1q1bk1r/1p3pp1/4pn1p/p3Q3/P1P2N2/1B4R1/1P3PPP/4R1K1 w - -
+solution Rxg7
+id "ECM.710"
+go
+setboard r4rk1/p2n2p1/1q1Qpn1p/1P6/P6B/2p5/2B1KP1P/R5R1 w - -
+solution Rxg7+
+id "ECM.711"
+go
+setboard r2qr1k1/1p3ppp/2pb4/2Np4/1P1P2bn/3BP3/2QN1PPP/1RR3K1 b - -
+solution Nxg2
+id "ECM.712"
+go
+setboard r3r1k1/pp3pp1/3p4/2q4p/2P5/1PB2Q1P/n4PP1/3R1RK1 w - -
+solution Bxg7
+id "ECM.713"
+go
+setboard r5k1/pn1q1rpp/2pp4/5R1N/bP6/4BQ2/P4PPP/2R3K1 w - -
+solution Nxg7
+id "ECM.714"
+go
+setboard 3r1rk1/5pp1/pq1n1n1p/2pPR3/2B2P2/1PBQ2RP/P5P1/6K1 w - -
+solution Rxg7+
+id "ECM.715"
+go
+setboard rn3rk1/ppq2ppp/2pb1nb1/5N2/2BP4/8/PPP1N1P1/R1B1QR1K w - -
+solution Nxg7
+id "ECM.716"
+go
+setboard r1qb1r1k/2p3pp/p1n1bp2/1p1Np2Q/P3P3/1BP3R1/1P3PPP/R1B3K1 w - -
+solution Rxg7
+id "ECM.717"
+go
+setboard r4rk1/5ppp/p2pbb2/3B3Q/qp2p3/4B3/PPP2P1P/2KR2R1 w - -
+solution Rxg7+
+id "ECM.718"
+go
+setboard 4q1k1/1b3r1p/p4pp1/1p6/2P2n2/1P3N2/1B3PPP/R2Q3K b - -
+solution Nxg2
+id "ECM.719"
+go
+setboard r2r3k/5bp1/2p2N2/5P1p/3q3Q/3B2R1/n5PP/3R3K w - -
+solution Rxg7
+id "ECM.720"
+go
+setboard 4rrk1/2pn2pb/p1p1qp2/1pb1pN2/P3P1PN/1P1P4/1BP2PK1/R2Q3R w - -
+solution Nxg7
+id "ECM.721"
+go
+setboard r3r1k1/p3bppp/q1b2n2/5Q2/1p1B4/1BNR4/PPP3PP/2K2R2 w - -
+solution Rg3
+id "ECM.722"
+go
+setboard r4rk1/1p1q1ppp/p1b4B/8/2R3R1/P2P4/1b1N1QPP/6K1 w - -
+solution Bxg7
+id "ECM.723"
+go
+setboard rq3rk1/3b1ppp/p2bp3/3pB2Q/8/1B5P/PP3PP1/2RR2K1 w - -
+solution Bxg7
+id "ECM.724"
+go
+setboard 4kbr1/pp1bpp1p/3p1p2/3N4/1PBQP3/q7/P1r2PPP/R4RK1 b - -
+solution Rxg2+
+id "ECM.725"
+go
+setboard 2r3k1/1p2R1p1/p3n2p/2pq4/7P/1P1P2P1/PB1Q3K/8 w - -
+solution Bxg7
+id "ECM.726"
+go
+setboard 2rr2k1/4bppp/p1n1p3/3q4/1p1P2N1/2P3R1/P3QPPP/2B2RK1 w - -
+solution Nh6+
+id "ECM.727"
+go
+setboard rq1r1bk1/1b3pp1/3pn2p/1n2BN1P/1P2P3/3R1NP1/3Q1PB1/2R3K1 w - -
+solution Bxg7
+id "ECM.728"
+go
+setboard r1b5/ppqn2bk/3R2pp/2p2p2/2P1rN2/4BN2/PPQ2PPP/4R1K1 w - -
+solution Rxg6
+id "ECM.729"
+go
+setboard 3q1r2/1p1b1pk1/pn5p/3pN1pQ/3P3P/2r3B1/P4PP1/3RR1K1 w - -
+solution Nxf7
+id "ECM.730"
+go
+setboard r1bqkbnr/pp2ppp1/2p4p/3n2N1/2BP4/5N2/PPP2PPP/R1BQK2R w KQkq -
+solution Nxf7
+id "ECM.731"
+go
+setboard r2qr1k1/1ppb1p1p/p1np2p1/7Q/3PP2b/1B2N2P/PP3PP1/R1B2RK1 w - -
+solution Bxf7+
+id "ECM.732"
+go
+setboard 2r3k1/pbq1np1p/1p1b1Bp1/8/6QP/2P2N2/B4PP1/4R1K1 w - -
+solution Bxf7+
+id "ECM.733"
+go
+setboard r3r1k1/1bqn1ppp/1pp2p2/8/3P4/1B4N1/PP3PPP/R2QR1K1 w - -
+solution Bxf7+
+id "ECM.734"
+go
+setboard r3r1k1/pp3ppp/8/1Nbp3q/3NnBn1/2P5/PPQ2PPP/3R1RK1 b - -
+solution Ngxf2
+id "ECM.735"
+go
+setboard r2r2k1/1b2qpp1/1p2n3/p1b1p2p/4P1n1/PP1B2PP/1B1NQP2/R3NRK1 b - -
+solution Nxf2
+id "ECM.736"
+go
+setboard r2qr1k1/1b2bp1p/p3p1p1/1p2N1Bn/3P4/P6Q/1P3PPP/RB2R1K1 w - -
+solution Nxf7
+id "ECM.737"
+go
+setboard r5k1/1pp3pp/1b1p1r2/pN1P1n2/P1P3nq/6N1/1P1B1PQP/4RRK1 b - -
+solution Nxf2
+id "ECM.738"
+go
+setboard 2rqnk1r/pp2bpp1/2p1pn1p/2P1N2P/3P1BP1/3BQ3/PP6/2K2R1R w - -
+solution Nxf7
+id "ECM.739"
+go
+setboard 2rq1rk1/1b2bppp/p1n5/1p1BN3/5B2/P7/1P3PPP/R2Q1RK1 w - -
+solution Nd7
+id "ECM.740"
+go
+setboard 3r1qrk/p1p5/bbp3pp/4p3/4Pp1N/2Pn3P/PPQN1PPB/R4RK1 b - -
+solution Nxf2
+id "ECM.741"
+go
+setboard r2qr1k1/pb2bp1p/1pn1p1pB/8/2BP4/P1P2N2/4QPPP/3R1RK1 w - -
+solution d5
+id "ECM.742"
+go
+setboard r3r1k1/1bq1nppp/p1np4/1ppBpN2/4P3/2PP1N2/PP3PPP/R2QR1K1 w - -
+solution Bxf7+
+id "ECM.743"
+go
+setboard r5k1/p4ppp/3qpb2/1P2N3/1nBP4/1P5P/4QPP1/4R1K1 w - -
+solution Nxf7
+id "ECM.744"
+go
+setboard r2qr1k1/1b1nbp1p/p3pp2/1p2N3/3P4/3B1N2/PP2QPPP/R2R2K1 w - -
+solution Nxf7
+id "ECM.745"
+go
+setboard r3k2r/p1qb1p2/1p2p2p/3pPpN1/P1nP3Q/8/2P2PPP/R1B1R1K1 w kq -
+solution Nxf7
+id "ECM.746"
+go
+setboard 3qNk2/5p1p/1r3p2/2p5/Q1pb4/3b2P1/P4PBP/4R1K1 b - -
+solution Bxf2+
+id "ECM.747"
+go
+setboard 2r1r1k1/1pq1bp1p/p3pnp1/P2n2N1/7R/2P4P/1PB1QPP1/2B1R1K1 w - -
+solution Nxf7
+id "ECM.748"
+go
+setboard r1bq2k1/pp1n1ppp/3b1n2/PQ1B3r/3N1P2/2N5/1PP3PP/R1B2RK1 w - -
+solution Bxf7+
+id "ECM.749"
+go
+setboard 2r1r1k1/5ppp/pq3b2/2pB1P2/2p2B2/5Q1P/Pn3PP1/2R1R1K1 w - -
+solution Bxf7+
+id "ECM.750"
+go
+setboard r4rk1/ppRn1p2/6pb/2P1pq1p/3N4/P1QPn1Pb/1B1NPP1P/4R1KB b - -
+solution Qxf2+
+id "ECM.751"
+go
+setboard r3kr2/1b2qp2/pp2p2N/4p2Q/8/2n5/P3B1PP/3R1R1K w q -
+solution Nxf7
+id "ECM.752"
+go
+setboard b2r1rk1/pq2bpp1/1p2p2p/4N2n/2P2R2/1PB2N2/1P2QPPP/4R1K1 w - -
+solution Rxf7
+id "ECM.753"
+go
+setboard rqb1k2r/1p1nbp1p/p4pp1/8/1PBN1P2/P1N1P3/7P/2RQ1RK1 w kq -
+solution Bxf7+
+id "ECM.754"
+go
+setboard r2r2k1/4ppbp/5np1/p1q5/QnB1P3/5N2/1P3PPP/R1B2RK1 w - -
+solution Bxf7+
+id "ECM.755"
+go
+setboard 1r2q1k1/p3pp2/3p1bp1/2pP2N1/8/P5PB/2Q2PK1/1rBR4 w - -
+solution Nxf7
+id "ECM.756"
+go
+setboard 2rqrbk1/pb1n1p1p/1p2pnp1/4N3/2BP1N2/1P2Q3/PB3PPP/3R1RK1 w - -
+solution Nxf7
+id "ECM.757"
+go
+setboard 1r4k1/p4pp1/bqnrpn1p/2ppN3/2P2P1B/P3P3/1P2B1PP/1Q1R1RK1 w - -
+solution Bxf6
+id "ECM.758"
+go
+setboard r1bqrbk1/5p1p/2pp2nB/pp5Q/4P3/PBNPR2P/1P4P1/R5K1 w - -
+solution Bxf7+
+id "ECM.759"
+go
+setboard r1bqkb1r/1p3ppp/pn1P1n2/4p3/2B5/2N2N2/PP3PPP/R1BQ1RK1 w kq -
+solution Bxf7+
+id "ECM.760"
+go
+setboard 2rqr1k1/pp2nppp/3p2b1/6B1/2BNn1Q1/P7/1PP2PPP/2KRR3 w - -
+solution Bxf7+
+id "ECM.761"
+go
+setboard r3r1k1/pbq1ppbp/1pp2np1/4N3/3P4/2P5/PPB1QPPP/R1B1R1K1 w - -
+solution Nxf7
+id "ECM.762"
+go
+setboard r1b2rk1/p6p/2p3Pb/3pp1q1/8/2PB4/PP3PP1/RN1Q1K1R b - -
+solution Rxf2+
+id "ECM.763"
+go
+setboard r2rn3/1p3pk1/p1pNn1pp/q3P3/P7/1PN4P/2QR1PP1/3R2K1 w - -
+solution Nxf7
+id "ECM.764"
+go
+setboard r1bqr1k1/1p1nnpb1/p5pp/2P1p1B1/B3N3/5N2/P4PPP/2RQR1K1 w - -
+solution Nd6
+id "ECM.765"
+go
+setboard r1b1r1k1/pp2qpbp/2p3p1/2P5/3NnB2/7P/PPQ1PPB1/2RR2K1 b - -
+solution Nxf2
+id "ECM.766"
+go
+setboard rn2r1k1/pp3p1p/3P2p1/2p1bbB1/2B5/2N5/Pq4PP/R2Q1RK1 w - -
+solution Bxf7+
+id "ECM.767"
+go
+setboard 5rk1/r2qnppp/p1nN4/2Q5/3PB3/4P3/6PP/R4RK1 w - -
+solution Nxf7
+id "ECM.768"
+go
+setboard 1bq2k2/1b1n1pp1/pp5p/2pBpN2/P3P2B/3Q1P2/1PP3PP/4K3 w - -
+solution Bxf7
+id "ECM.769"
+go
+setboard rnb2rk1/pp3pbp/2p3pB/2q5/4P3/1BN5/PPP3PP/R2Q1R1K w - -
+solution Rxf7
+id "ECM.770"
+go
+setboard 3qr1k1/1br1bp1p/p3p1pB/1p1nN3/3PB3/7Q/PP3PPP/3RR1K1 w - -
+solution Nxf7
+id "ECM.771"
+go
+setboard 1qr1b1k1/4bpp1/pn2p2p/1p1nN3/3P4/P2BBN1Q/1P3PPP/4R1K1 w - -
+solution Bxh6
+id "ECM.772"
+go
+setboard rr1q2k1/1p2bpp1/2p1p2p/P1Pn4/2NP4/3Q1RP1/5PKP/2B1R3 w - -
+solution Bxh6
+id "ECM.773"
+go
+setboard r2r2k1/pb1nbpp1/1qp1pn1p/1p2N3/3P1B2/P1N1P3/BPQ2PPP/2R2RK1 w - -
+solution Bxh6
+id "ECM.774"
+go
+setboard 2r5/1p4bk/3p2rp/4pN2/1P2P1pR/2P2q2/QP6/1K5R w - -
+solution Rxh6+
+id "ECM.775"
+go
+setboard r1b1r3/pp2Npbk/3pp2p/q5p1/2QNPP2/6P1/PPP3P1/2KR3R w - -
+solution Ndf5
+id "ECM.776"
+go
+setboard r1q3r1/1ppQ2pk/3bNp1p/p3pP2/P3P3/7R/1PP3PP/3R2K1 w - -
+solution Rxh6+
+id "ECM.777"
+go
+setboard 4r1k1/p1pq1pp1/2p5/3p1b2/Q7/2P1B2P/P1P1rPP1/2R2RK1 b - -
+solution Bxh3
+id "ECM.778"
+go
+setboard 1rbqnr2/5p1k/p1np3p/1p1Np3/4P2P/1Q2B3/PPP1BP2/2KR3R w - -
+solution Bxh6
+id "ECM.779"
+go
+setboard r1br2k1/p1q2pp1/4p1np/2ppP2Q/2n5/2PB1N2/2P2PPP/R1B1R1K1 w - -
+solution Bxh6
+id "ECM.780"
+go
+setboard 3r1r1k/p5p1/n1p2p1p/1qp2b2/N1R4R/1PB1P1P1/P2P3P/3Q2K1 w - -
+solution Rxh6+
+id "ECM.781"
+go
+setboard r4rk1/2q1b1p1/p4p1p/n3pP2/1p2Q1N1/4B3/PPP3PP/4RR1K w - -
+solution Nxh6+
+id "ECM.782"
+go
+setboard 6rk/3b1n1p/1p1q3b/1PpNp3/2P1Pp2/2Q2NrP/5RP1/2R2B1K b - -
+solution Bxh3
+id "ECM.783"
+go
+setboard r2q1rk1/ppp2pp1/1b2b2p/3n3Q/2Bp4/3P1N2/PPP2PPP/R1B1R1K1 w - -
+solution Bxh6
+id "ECM.784"
+go
+setboard r3rbk1/1bp1qpp1/p6p/np2p2Q/4P2N/1BP4P/PP3PP1/R1B1R1K1 w - -
+solution Bg5
+id "ECM.785"
+go
+setboard 4q3/p2r1ppk/R6p/3n4/3B1Q2/4P2P/5PP1/6K1 w - -
+solution Rxh6+
+id "ECM.786"
+go
+setboard 7r/1p2qk2/pQ1p2p1/3Ppp2/P4b2/2P2PrP/1P2R1B1/4R2K b - -
+solution Rhxh3+
+id "ECM.787"
+go
+setboard 5rk1/Qp5p/3pp1p1/4n3/2P1P2q/5r1P/P3NPP1/3R1RK1 b - -
+solution Rxh3
+id "ECM.788"
+go
+setboard 2r1r1k1/pb1n1pp1/1p1qpn1p/4N1B1/2PP4/3B4/P2Q1PPP/3RR1K1 w - -
+solution Bxh6
+id "ECM.789"
+go
+setboard 3q1rk1/p2bbpp1/1rn4p/1pp2P2/3pBBP1/3P3P/PPPQ3N/R4RK1 w - -
+solution Bxh6
+id "ECM.790"
+go
+setboard 2br2k1/4qppp/p5r1/2pBp3/2P1Pn2/4Q2P/RP3PPK/1N4R1 b - -
+solution Bxh3
+id "ECM.791"
+go
+setboard r2qr3/2p1b1pk/p5pp/1p2p3/nP2P1P1/1BP2RP1/P3QPK1/R1B5 w - -
+solution Bxh6
+id "ECM.792"
+go
+setboard r5r1/pbn4k/1p1p1Ppp/2pPn3/4BQq1/1PN3P1/PB3PK1/3R1R2 w - -
+solution Qxh6+
+id "ECM.793"
+go
+setboard r1b2rk1/pp2bpp1/4p2p/2q4Q/5nNB/2PB4/PP3PPP/2KR3R w - -
+solution Nxh6+
+id "ECM.794"
+go
+setboard 6k1/p4ppp/1pn1b1rr/8/PBpPp2q/2P1P1NP/5PP1/RR3QK1 b - -
+solution Bxh3
+id "ECM.795"
+go
+setboard r1b2rk1/1p3pp1/p5Pp/2bpPp1Q/3N4/1Pq1B1R1/2P4P/3R2K1 w - -
+solution Bxh6
+id "ECM.796"
+go
+setboard r2r2k1/pp1n1bp1/2p2p1p/b4N2/q2BR3/2QB2PP/1PP5/2KR4 w - -
+solution Nxh6+
+id "ECM.797"
+go
+setboard 3r2bk/1q4p1/p2P1N1p/2p1rP2/pb5R/7P/1P4P1/2Q2RK1 w - -
+solution Rxh6+
+id "ECM.798"
+go
+setboard 2b1rk2/r6p/1pP1p1p1/p2pNnR1/5Q2/P1B4q/1PP2P1P/1K4R1 w - -
+solution Nxg6+
+id "ECM.799"
+go
+setboard 6R1/6Q1/3q2p1/5p1p/P3p1k1/1P1r2P1/5PK1/8 b - -
+solution Rxg3+
+id "ECM.800"
+go
+setboard r6r/ppnqpk2/3pbpp1/5N2/1PP1P3/5RR1/P2QB1PP/6K1 w - -
+solution Nh6+
+id "ECM.801"
+go
+setboard 3r3r/p4pk1/5Rp1/3q4/1p1P2RQ/5N2/P1P4P/2b4K w - -
+solution Rfxg6+
+id "ECM.802"
+go
+setboard 2b2r1k/2p3pp/2Nb4/pP5q/2PP4/P4pP1/5P1P/R1BQ2K1 b - -
+solution Bxg3
+id "ECM.803"
+go
+setboard r1bq2k1/pp3r1p/2n1p1p1/3pP3/6Q1/2PB2P1/P4PK1/R1B4R w - -
+solution Bxg6
+id "ECM.804"
+go
+setboard 3q1rk1/2r4p/n1p1n1pQ/p2pP3/Np1P2R1/5PN1/PP3KP1/2R5 w - -
+solution Rxg6+
+id "ECM.805"
+go
+setboard 2Nq1rk1/6pp/b1p2b2/p6Q/np1p4/6P1/PB3PBP/R3R1K1 w - -
+solution Be4
+id "ECM.806"
+go
+setboard r2r4/p4pk1/2p3p1/1p1nPR2/5p1Q/2N5/PPPq4/1K4R1 w - -
+solution e6
+id "ECM.807"
+go
+setboard 2kr3r/pbq3p1/1p2pp2/2b4n/2P1B3/1P1N2Pp/PB2QP1P/R4RK1 b - -
+solution Nxg3
+id "ECM.808"
+go
+setboard r5k1/1p2Rpb1/3p1np1/2nP2B1/1qP5/1pN1Q2P/P5P1/1B4K1 w - -
+solution Bxg6
+id "ECM.809"
+go
+setboard 2rqr1k1/pb2bp1p/1pn1pnpB/4N3/3P4/P1N3R1/1P3PPP/RB1Q2K1 w - -
+solution Rxg6+
+id "ECM.810"
+go
+setboard 2r5/pp2qr1k/1nb3pp/2ppBp2/2P4P/3B2R1/P3QPP1/1R4K1 w - -
+solution Rxg6
+id "ECM.811"
+go
+setboard 3rr3/3q1p1k/p2P2pp/1bp1b3/5N2/6QP/P1B3P1/3RR1K1 w - -
+solution Bxg6+
+id "ECM.812"
+go
+setboard r2q1rk1/pp2ppb1/3pn1pQ/3R4/2P3B1/4BR2/PP4PP/6K1 w - -
+solution Qxg6
+id "ECM.813"
+go
+setboard 1n1b1rk1/r4p1p/p1p2qpQ/P3Np2/2BP4/2P1R3/5PPP/R5K1 w - -
+solution Rb1
+id "ECM.814"
+go
+setboard 6rk/pb3p1p/3bpPq1/3P4/1p1B3r/1B4P1/PPRQ1R1P/6K1 b - -
+solution Bxg3
+id "ECM.815"
+go
+setboard 3rr1k1/pb2bp1p/3qp1pB/1p2N3/3P2Q1/2P1R3/P4PPP/4R1K1 w - -
+solution Nxg6
+id "ECM.816"
+go
+setboard r2q1rk1/pb1nbp1p/1p2p1p1/4N1BQ/2PP4/P7/5PPP/RB2R1K1 w - -
+solution Nxg6
+id "ECM.817"
+go
+setboard 1Q4R1/r2qbp2/3p1kp1/3Bp2p/8/3PP1P1/5PKP/8 w - -
+solution Rxg6+
+id "ECM.818"
+go
+setboard r3r1k1/b1p2pn1/p2q1Bp1/1p1bN1Qp/3P4/2P4P/PPB2PP1/R3R1K1 w - -
+solution Nxg6
+id "ECM.819"
+go
+setboard 3r2k1/p1rn1p1p/1p2pp2/6q1/3PQNP1/5P2/P1P4R/R5K1 w - -
+solution Nxe6
+id "ECM.820"
+go
+setboard k2r3r/ppq2p1p/n1pb1Pp1/4p3/2Q5/1R2B1P1/PPP2PBP/R5K1 w - -
+solution Rxb7
+id "ECM.821"
+go
+setboard 1rb2rk1/p1p1qppp/2p2n2/3P4/1b3P2/2NB4/PPPBQ1PP/2KR3R b - -
+solution Ba3
+id "ECM.822"
+go
+setboard k7/pp1N4/4P3/5P2/8/5p2/1R6/B4Knq w - -
+solution Nb6+
+id "ECM.823"
+go
+setboard 4rrk1/p5pp/1p4q1/3p2n1/2pP2P1/P1P1PP2/3B2K1/1R2QR2 b - -
+solution Nxf3
+id "ECM.824"
+go
+setboard 1q1r3k/3P1pp1/ppBR1n1p/4Q2P/P4P2/8/5PK1/8 w - -
+solution Rxf6
+id "ECM.825"
+go
+setboard 1rbq2k1/b1p3pp/p1Pp4/3Ppr2/8/5N2/PPQ2PPP/R1B2RK1 b - -
+solution Rxf3
+id "ECM.826"
+go
+setboard 1r1q1r1k/2p3pp/1p1bQ3/p7/1PP5/Pn3B2/1B3PPP/R4RK1 b - -
+solution Rxf3
+id "ECM.827"
+go
+setboard r4rk1/2p1qpp1/p1p5/2Ppn2b/2PQ1N1p/4P3/PB3PPP/R4RK1 b - -
+solution Nf3+
+id "ECM.828"
+go
+setboard r1bq1rk1/1p2bppp/p3p3/n3P3/4N3/1P1P1N2/PB4PP/R3QR1K w - -
+solution Nf6+
+id "ECM.829"
+go
+setboard 1n2r3/p1pq1kp1/1b1pNpp1/3P4/5RP1/3Q3P/1B3P2/6K1 w - -
+solution Bxf6
+id "ECM.830"
+go
+setboard r1bq1rk1/ppp3p1/7p/3P2n1/2PQ1p2/1N5P/PPP2PPK/R1B2R2 b - -
+solution Nf3+
+id "ECM.831"
+go
+setboard 3r1b2/p4bkp/1p1P1p2/r3p1p1/2q1N3/2N2P2/1P1R2PP/2QR3K w - -
+solution Nxf6
+id "ECM.832"
+go
+setboard rqbn1rk1/1p3ppp/p3p3/8/4NP2/8/PPP1BQPP/1K1R3R w - -
+solution Nf6+
+id "ECM.833"
+go
+setboard r1b1kb1r/1p4pp/p2ppn2/8/2qNP3/2N1B3/PPP3PP/R2Q1RK1 w kq -
+solution Rxf6
+id "ECM.834"
+go
+setboard 1rn5/p3Bk1p/1pq1bpp1/P3p3/1Q2P2P/2P3P1/5PB1/1R4K1 w - -
+solution Bxf6
+id "ECM.835"
+go
+setboard 2nr2k1/1pq1bppp/p1p5/2p1P1PQ/2P1NP2/1PNR4/P6P/6K1 w - -
+solution Nf6+
+id "ECM.836"
+go
+setboard 6nk/pn2qr1r/1pbp1p1p/2p1pPpN/P1P1P1PP/2PP3R/7Q/2BBK2R w K -
+solution Nxf6
+id "ECM.837"
+go
+setboard 7r/4p1k1/p3Pppp/1p6/3N1R2/3PQ2P/qr4b1/5RK1 w - -
+solution Rxf6
+id "ECM.838"
+go
+setboard r3k2r/1bq1bp2/p3p1pp/1p2P3/3NpP2/4B1Q1/PPP3PP/1K1R3R w kq -
+solution Nxe6
+id "ECM.839"
+go
+setboard rnbqkb1r/pp1n1p2/4p1p1/1N1pP2p/1P4Q1/3B1N2/P1PB1PPP/R3K2R w KQkq -
+solution Qxe6+
+id "ECM.840"
+go
+setboard r1b1kb1r/1p1n1ppp/p2ppn2/6BB/2qNP3/2N5/PPP2PPP/R2Q1RK1 w kq -
+solution Nxe6
+id "ECM.841"
+go
+setboard r1b1k1nr/3n1p1p/1qpBp1p1/pp2b3/4PN2/PBN2Q2/1PP2PPP/2KR3R w kq -
+solution Nxe6
+id "ECM.842"
+go
+setboard 2r2rk1/1b3ppp/pq2p3/1pbn2N1/3B3P/1B4P1/P1P1QP2/2KRR3 w - -
+solution Qh5
+id "ECM.843"
+go
+setboard r3k2r/pp1n1pb1/1qn1p1p1/2p3Pp/4R2P/2NP2QB/PPPB1P2/2K1R3 w kq -
+solution Rxe6+
+id "ECM.844"
+go
+setboard r3k2r/1q3ppp/p3p3/2b1P3/p2N1Q2/P7/1PP3PP/3R1R1K w kq -
+solution Nxe6
+id "ECM.845"
+go
+setboard 3qr1k1/rp3pbp/2p3p1/3p1b2/N1nP4/P2NP3/1PQ2PPP/1BRR2K1 b - -
+solution Rxe3
+id "ECM.846"
+go
+setboard rnbqkb1r/1p1n1pp1/p3p2p/3pP3/3p1NQP/2N5/P1PB1PP1/R3KB1R w KQkq -
+solution Nxe6
+id "ECM.847"
+go
+setboard 3r1b1R/3bkpp1/1p1np3/1BqpPPP1/PQ1N4/8/1PP5/1K6 w - -
+solution f6+
+id "ECM.848"
+go
+setboard 4r1k1/pp2n2p/1r1n1bp1/q2p1pB1/3P3N/P1NQ1P1P/1PP3R1/1K5R b - -
+solution Rxb2+
+id "ECM.849"
+go
+setboard 3r2k1/2p1bppp/4b3/p2pP3/qr1N1B1P/8/1PPQ2P1/1K1RR3 b - -
+solution Rxb2+
+id "ECM.850"
+go
+setboard 1k1r3r/ppR2ppp/1q2b3/1N6/4Q3/8/PP3PPP/4R1K1 w - -
+solution Rxb7+
+id "ECM.851"
+go
+setboard 1r3rk1/5pbp/p2Pp1p1/q1n3P1/2p2P1P/2N1Q2R/PP6/1BKR4 b - -
+solution Rxb2
+id "ECM.852"
+go
+setboard rr4k1/5p1p/n2p1npQ/q1pP4/6P1/2N2P1N/PP1R3P/2K4R b - -
+solution Rxb2
+id "ECM.853"
+go
+setboard 1k2bb1r/1p3p1p/p2qpP1p/3pN3/3P1Q2/2RB2P1/PP3P1P/6K1 w - -
+solution Qc1
+id "ECM.854"
+go
+setboard 1r4k1/1r3p2/p1p1b1pQ/q3P3/P7/bPN1R1P1/2P4P/1K1R1B2 b - -
+solution Bxb3
+id "ECM.855"
+go
+setboard 5rk1/5rp1/p2qb3/R2Np2Q/3bP2B/7P/P5PK/1R6 b - -
+solution Rf1
+id "ECM.856"
+go
+setboard 6k1/5p2/R3p1p1/1pq1PpB1/4nP2/5Q1P/P2r2PK/8 w - -
+solution Ra8+
+id "ECM.857"
+go
+setboard 3r1rk1/p3q1pp/2Rb4/3P4/8/1P2Qp2/PB3PPP/3R2K1 b - -
+solution Bxh2+
+id "ECM.858"
+go
+setboard 1r6/5pk1/p1b2qpp/P1P1n3/1N6/Q5NP/5PP1/3R2K1 b - -
+solution Bxg2
+id "ECM.859"
+go
+setboard 1r4k1/1q3pb1/r1b3p1/pp1Qp3/P3P3/1B2BP2/1PP3P1/1K1R3R w - -
+solution Qd8+
+id "ECM.860"
+go
+setboard 2R5/p3q1kp/6p1/3p4/b2P2p1/Pr4N1/5Q2/3K3R w - -
+solution Nf5+
+id "ECM.861"
+go
+setboard 3r4/kb6/pp6/4R1pr/PPpq4/2N3Q1/2P3PP/3R3K b - -
+solution Rf8
+id "ECM.862"
+go
+setboard 4r1k1/5p1p/4q1p1/8/Q5n1/3B2P1/P4P1P/2R3K1 b - -
+solution Nxf2
+id "ECM.863"
+go
+setboard 8/2q1np1k/6p1/1PPn3p/8/P2Q3P/6P1/2R4K b - -
+solution Nf5
+id "ECM.864"
+go
+setboard r1bq1rk1/ppp1n1bn/3p2p1/3Pp1Pp/1PP1Pp1P/2NN1P2/P3B3/R1BQ1RK1 b - -
+solution Nxg5
+id "ECM.865"
+go
+setboard 7R/1p1r4/2b2p2/2Pp1qk1/3P1bp1/3N4/2Q2PB1/6K1 w - -
+solution Rg8+
+id "ECM.866"
+go
+setboard r6r/1pn1b1k1/2p1pq2/2Pp3p/p2P1Pp1/P2BP1P1/1P2QB2/3R2KR w - -
+solution Rxh5
+id "ECM.867"
+go
+setboard 1r4k1/pp4pp/2n1b3/1Rq1p3/2P2r2/P1B2P2/2Q1B1PP/3R1K2 b - -
+solution Rxf3+
+id "ECM.868"
+go
+setboard 7k/1p4p1/2p4r/5p2/p1QP1q2/2P2PR1/r4P1P/4R2K b - -
+solution Rxh2+
+id "ECM.869"
+go
+setboard 1r3r2/6kp/3p1pp1/qnp1pP2/1p2P2N/3P4/PPPQ1P1P/1K1R2R1 w - -
+solution fxg6
+id "ECM.870"
+go
+setboard 5rk1/1rP3pp/p4n2/3Pp3/1P2Pq2/2Q4P/P5P1/R3R1K1 b - -
+solution Rxc7
+id "ECM.871"
+go
+setboard 2rq1rk1/5ppp/2b1pb2/np6/6N1/2NBB3/PP3PPP/R2Q2K1 w - -
+solution Bb6
+id "ECM.872"
+go
+setboard 5r2/p2p2kp/3PnNp1/1qr1Pp2/2p5/P1R5/6PP/2Q1R1K1 w - -
+solution Qh6+
+id "ECM.873"
+go
+setboard 2Qbq1k1/6p1/1p4Np/4p2P/3rP3/8/3p2PK/3R4 w - -
+solution Rf1
+id "ECM.874"
+go
+setboard 2kr1br1/ppp2p1p/2n1p1q1/2Nn4/3P4/1Q2PB2/PP1B1P1P/2R1K2R b K -
+solution Qg1+
+id "ECM.875"
+go
+setboard 2K5/6p1/kp2P3/1p6/1P6/2P1P2p/8/1r6 w - -
+solution e7
+id "ECM.876"
+go
+setboard 2kr3r/1Rp1bpp1/p6q/Q3P3/2P5/3p1NP1/P3P2P/1R4K1 b - -
+solution Qe3+
+id "ECM.877"
+go
+setboard 6k1/1R4pp/2p5/8/P1rNp3/6Pb/4PK2/8 w - -
+solution a5
+id "ECM.878"
+go
+setboard r2r2k1/pp3ppp/2q5/2p5/2P1P1n1/P4P1b/1BQ1BP1P/R3R2K b - -
+solution Rd2
+id "ECM.879"
+go
diff --git a/src/genetic/typhoon b/src/genetic/typhoon
new file mode 100755
index 0000000..de5f56d
--- /dev/null
+++ b/src/genetic/typhoon
Binary files differ