diff --git a/__pycache__/visualizer.cpython-311.pyc b/__pycache__/visualizer.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..3644ac9b9c653403cbe4f1b02b6d6cd3d978a06e
Binary files /dev/null and b/__pycache__/visualizer.cpython-311.pyc differ
diff --git a/src/README.md b/src/README.md
index 758aa4357001bf07214cd579af387a1b86cfb94e..66911e86f34d92872919d07cc3387de2e7c4abf8 100644
--- a/src/README.md
+++ b/src/README.md
@@ -7,5 +7,11 @@ xij = 1 bedeutet, dass π1(i) < π1(j) — Knoten i kommt vor Knoten j in der er
 yij = 1 bedeutet, dass π2(i) < π2(j) — Knoten i kommt vor Knoten j in der zweiten Permutation.
 
 main: logged nur das wesentliche
+
 backupmain: aktuelles backup
-foretesting: gleiches wie main, nur mit konsolen output, was nur für kleine graphen etwas bringt. 
\ No newline at end of file
+
+foretesting: gleiches wie main, nur mit konsolen output, was nur für kleine graphen etwas bringt. 
+
+solver.py: Funktion die 2 Argumente übernimmt, Inputgraph und Outputgraph. Wird für den pace2024tester genutzt. 
+
+solver.bat: Script für windwos, welches die solver.py mit den beiden Konsolen Inputs ausführt. 
\ No newline at end of file
diff --git a/src/archive/logfile.log b/src/archive/logfile.log
new file mode 100644
index 0000000000000000000000000000000000000000..ebd0169b5515c81f8290aeab748b409ae05b5dd4
--- /dev/null
+++ b/src/archive/logfile.log
@@ -0,0 +1,26 @@
+2024-05-10 18:20:35,031 - INFO - Prozess f�r test_instances/0.gr gestartet
+2024-05-10 18:20:35,032 - INFO - Die Ausgabedatei wird solution_instances\0.sol sein
+2024-05-10 18:20:35,032 - INFO - Gr��en der Partitionen: A=3, B=3
+2024-05-10 18:20:35,033 - INFO - 3 Kanten geladen.
+2024-05-10 18:20:35,033 - INFO - x, y und c geladen.
+2024-05-10 18:20:35,033 - INFO - Zielfunktion aufgestellt.
+2024-05-10 18:20:35,034 - INFO - Crossing Constraints aufgestellt.
+2024-05-10 18:20:35,050 - INFO - Status der L�sung: Optimal
+2024-05-10 18:20:35,050 - INFO - Optimale L�sung gefunden. Ergebnisse werden gespeichert.
+2024-05-10 18:20:35,051 - INFO - Ergebnisse in solution_instances\0.sol gespeichert
+2024-05-10 18:20:35,052 - INFO - Crossings: 0, in solution_instances\0.cros gespeichert
+2024-05-10 18:20:35,052 - INFO - Verstrichene Zeit: 0:00:00.021 (h:m:s.ms) 
+
+2024-05-10 18:20:35,053 - INFO - Verarbeitung abgeschlossen f�r test_instances/0.gr
+2024-05-10 18:20:35,053 - INFO - Prozess f�r test_instances/1.gr gestartet
+2024-05-10 18:20:35,053 - INFO - Die Ausgabedatei wird solution_instances\1.sol sein
+2024-05-10 18:20:35,053 - INFO - Gr��en der Partitionen: A=780, B=743
+2024-05-10 18:20:35,055 - INFO - 1522 Kanten geladen.
+2024-05-10 18:20:37,375 - INFO - x, y und c geladen.
+2024-05-10 18:20:37,648 - INFO - Zielfunktion aufgestellt.
+2024-05-10 18:20:44,635 - INFO - Crossing Constraints aufgestellt.
+2024-05-10 18:51:32,831 - INFO - Status der L�sung: Optimal
+2024-05-10 18:51:32,832 - INFO - Optimale L�sung gefunden. Ergebnisse werden gespeichert.
+2024-05-10 18:51:32,990 - INFO - Ergebnisse in solution_instances\1.sol gespeichert
+2024-05-10 18:51:33,029 - INFO - Crossings: 1482, in solution_instances\1.cros gespeichert
+2024-05-10 18:51:33,030 - INFO - Verstrichene Zeit: 0:30:57.977 (h:m:s.ms) 
\ No newline at end of file
diff --git a/src/fortesting.py b/src/fortesting.py
index 880385c6653859e8d85c9323326266520de6d85e..4a3b5858debb8b7231c4b6674a5b9914444ae346 100644
--- a/src/fortesting.py
+++ b/src/fortesting.py
@@ -174,10 +174,10 @@ def process_directory(directory_path):
             solve_bipartite_minimization(file_path)  # Rufe die Verarbeitungsfunktion für jede .gr Datei auf
             logging.info(f"Verarbeitung abgeschlossen für {file_path}")
 
-
+"""
 directory_path = 'githubtests/tiny_test_set/instances/'
 process_directory(directory_path)
-
-#test_file = 'githubtests/tiny_test_set/instances/complete_4_5.gr'
+"""
+test_file = 'githubtests/tiny_test_set/instances/complete_4_5.gr'
 #test_file = 'test_instances/0.gr'
-#solve_bipartite_minimization(test_file)
+solve_bipartite_minimization(test_file)
diff --git a/src/main.py b/src/main.py
index 9c03128cf4212daf99cf8f4031bd7b9c12b6ca71..27e69b0d50eb21bd227faad2295b0b8878ae2c1f 100644
--- a/src/main.py
+++ b/src/main.py
@@ -1,19 +1,34 @@
 import os
 import logging
+import time
+from datetime import datetime, timedelta
 from pulp import *
 # Erstellen eines Graphen zur Bestimmung der Knotenreihenfolge
 from collections import defaultdict, deque
 
-# Konfiguriere Logging
-logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
+
+# Erstelle einen FileHandler und einen StreamHandler
+file_handler = logging.FileHandler('logfile.log')
+console_handler = logging.StreamHandler()
+logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[file_handler, console_handler])
+
+def count_crossings_via_variables(c_vars):
+    crossings = 0
+    for c_var in c_vars.values():
+        if c_var.varValue == 1:
+            crossings += 1
+    return(crossings)
 
 def solve_bipartite_minimization(graph_file):
+    start_time = time()
     logging.info(f"Prozess für {graph_file} gestartet")
     # Extrahiere den Basisnamen der Eingabedatei
     base_name = os.path.basename(graph_file)
     new_base_name = base_name.replace('.gr', '.sol')
+    new_base_name1 = base_name.replace('.gr', '.cros')
     # Erstelle den Ausgabepfad
-    output_file = os.path.join('solution_instances', new_base_name)
+    output_file = os.path.join('mytests/solutions', new_base_name)
+    output_file1 = os.path.join('mytests/crossings', new_base_name1)
     logging.info(f"Die Ausgabedatei wird {output_file} sein")
 
     edges = []
@@ -37,18 +52,11 @@ def solve_bipartite_minimization(graph_file):
     y = {(i, j): LpVariable(f"y_{i}_{j}", 0, 1, cat='Binary') for i in range(n0 + 1, n0 + n1 + 1) for j in range(n0 + 1, n0 + n1 + 1) if i < j}
     c = {(i, j, k, l): LpVariable(f"c_{i}_{j}_{k}_{l}", 0, 1, cat='Binary') for (i, j) in edges for (k, l) in edges if i < j and k < l and i < k and j != l}
     logging.info("x, y und c geladen.")
-    """
-    # Crossing Variables
-    c = {}
-    for (i, j) in edges:
-        for (k, l) in edges:
-            if i < j and k < l and i < k and j != l:
-                c[(i, j, k, l)] = LpVariable(f"c_{i}_{j}_{k}_{l}", 0, 1, cat='Binary')
-    """
+
     # Zielfunktion, die minimiert werden soll
     prob += lpSum(c.values())
     logging.info("Zielfunktion aufgestellt.")
-    """
+
     edges.sort(key=lambda x: x[0])  # Sortieren der Kanten nach dem Startknoten
     for idx, (i, j) in enumerate(edges):
         for (k, l) in edges[idx + 1:]:
@@ -60,36 +68,10 @@ def solve_bipartite_minimization(graph_file):
                 elif l > j:
                     prob += c[(i, j, k, l)] == 1 - y[(j, l)]
     logging.info("Crossing Constraints aufgestellt.")
-    """
-    # Crossing Constraints basierend auf Kantenpaaren
-    for (i, j) in edges:
-        for (k, l) in edges:
-            if i < k:  # Nur Kantenpaare betrachten, wo i < k
-                if (i, j, k, l) not in c:
-                    c[(i, j, k, l)] = LpVariable(f"c_{i}_{j}_{k}_{l}", 0, 1, cat='Binary')
-
-                # Sicherstellen, dass nur gültige y-Variable-Zugriffe stattfinden
-                if j > l:
-                    prob += c[(i, j, k, l)] == y[(l, j)]  # Verwende .get() für sichere Zugriffe
-                if l > j:
-                    prob += c[(i, j, k, l)] == 1 - y[(j, l)]  # Verwende .get() für sichere Zugriffe
-    logging.info("Crossing Constraints aufgestellt.")
-    
-
 
     prob.solve()
     logging.info(f"Status der Lösung: {LpStatus[prob.status]}")
 
-    """
-    for key, var in x.items():
-        print(f"x[{key}] = {var.varValue}")
-
-    for key, var in y.items():
-        print(f"y[{key}] = {var.varValue}")
-
-    for key, var in c.items():
-        print(f"c[{key}] = {var.varValue}")
-    """
     if prob.status == LpStatusOptimal:
         logging.info("Optimale Lösung gefunden. Ergebnisse werden gespeichert.")
 
@@ -128,11 +110,34 @@ def solve_bipartite_minimization(graph_file):
         os.makedirs(os.path.dirname(output_file), exist_ok=True)
         with open(output_file, 'w') as f:
             for b in sorted_b:
-                f.write(f"{b}\n")
+                f.write(f"{b}\n")     
         logging.info(f"Ergebnisse in {output_file} gespeichert")
+        # Ausgabe der sortierten Knoten
+
+        a = count_crossings_via_variables(c)
+
+        os.makedirs(os.path.dirname(output_file1), exist_ok=True)
+        with open(output_file1, 'w') as f:
+            f.write(f"Crossings: {a}\n")     
+        logging.info(f"Crossings: {a}, in {output_file1} gespeichert")
+
+        end_time = time()
+        elapsed_time = end_time - start_time
+        elapsed_time_td = timedelta(seconds=elapsed_time)
+        formatted_time = str(elapsed_time_td)  # '0:00:01.234000' für das obige Beispiel
+        formatted_time = formatted_time[:-3] 
+        logging.info(f"Verstrichene Zeit: {formatted_time} (h:m:s.ms) \n")
     else:
         logging.warning("Keine optimale Lösung gefunden.")
 
+        end_time = time()
+        elapsed_time = end_time - start_time
+        elapsed_time_td = timedelta(seconds=elapsed_time)
+        formatted_time = str(elapsed_time_td)  # '0:00:01.234000' für das obige Beispiel
+        formatted_time = formatted_time[:-3] 
+        logging.info(f"Verstrichene Zeit: {formatted_time} (h:m:s.ms) \n")
+
+
 def process_directory(directory_path):
     # Durchlaufe alle Dateien im angegebenen Verzeichnis
     for filename in os.listdir(directory_path):
@@ -141,11 +146,13 @@ def process_directory(directory_path):
             solve_bipartite_minimization(file_path)  # Rufe die Verarbeitungsfunktion für jede .gr Datei auf
             logging.info(f"Verarbeitung abgeschlossen für {file_path}")
 
-"""
+
 directory_path = 'githubtests/tiny_test_set/instances/'
+#directory_path = 'mytests/instances/'
 process_directory(directory_path)
-"""
 
-#test_file = 'githubtests/tiny_test_set/instances/grid_9_shuffled.gr'
-test_file = 'test_instances/1.gr'
+"""
+test_file = 'githubtests/tiny_test_set/instances/complete_4_5.gr'
+#test_file = 'mytests/instances/2.gr'
 solve_bipartite_minimization(test_file)
+"""
\ No newline at end of file
diff --git a/src/solution_instances/0.sol b/src/mytests/crossings/0.cros
similarity index 68%
rename from src/solution_instances/0.sol
rename to src/mytests/crossings/0.cros
index c9a1c6728a5c124d4d27481f0bbc1859216e5700..edbe1c0e813360e623093b31b227beeb58b9198e 100644
--- a/src/solution_instances/0.sol
+++ b/src/mytests/crossings/0.cros
@@ -1,4 +1 @@
-5
-4
-6
 Crossings: 0
diff --git a/src/mytests/crossings/1.cros b/src/mytests/crossings/1.cros
new file mode 100644
index 0000000000000000000000000000000000000000..b168036c8605a7319b7926e183794c5916ec4ba2
--- /dev/null
+++ b/src/mytests/crossings/1.cros
@@ -0,0 +1 @@
+Crossings: 1482
diff --git a/src/solution_instances/complete_4_5.sol b/src/mytests/crossings/complete_4_5.cros
similarity index 58%
rename from src/solution_instances/complete_4_5.sol
rename to src/mytests/crossings/complete_4_5.cros
index ea99ee268e25e93ca59ca2debca04a80b3641e97..40161bce43919a8f4f337164b1dbfa8562e764b8 100644
--- a/src/solution_instances/complete_4_5.sol
+++ b/src/mytests/crossings/complete_4_5.cros
@@ -1,6 +1 @@
-9
-8
-7
-6
-5
 Crossings: 60
diff --git a/src/solution_instances/cycle_8_shuffled.sol b/src/mytests/crossings/cycle_8_shuffled.cros
similarity index 61%
rename from src/solution_instances/cycle_8_shuffled.sol
rename to src/mytests/crossings/cycle_8_shuffled.cros
index b2cb16c3ab4c674f19c2d85b76579335439556d8..b4ce40dff2db1161fe132dbfba50eaf3c8a96db4 100644
--- a/src/solution_instances/cycle_8_shuffled.sol
+++ b/src/mytests/crossings/cycle_8_shuffled.cros
@@ -1,5 +1 @@
-6
-7
-8
-5
 Crossings: 4
diff --git a/src/solution_instances/cycle_8_sorted.sol b/src/mytests/crossings/cycle_8_sorted.cros
similarity index 61%
rename from src/solution_instances/cycle_8_sorted.sol
rename to src/mytests/crossings/cycle_8_sorted.cros
index ce4c234d81787879c0a4e9f013bc57523ba513d7..4ec4c4ecfe9e42df888d39dfa7411d9dd8f61b16 100644
--- a/src/solution_instances/cycle_8_sorted.sol
+++ b/src/mytests/crossings/cycle_8_sorted.cros
@@ -1,5 +1 @@
-5
-7
-6
-8
 Crossings: 3
diff --git a/src/solution_instances/grid_9_shuffled.sol b/src/mytests/crossings/grid_9_shuffled.cros
similarity index 58%
rename from src/solution_instances/grid_9_shuffled.sol
rename to src/mytests/crossings/grid_9_shuffled.cros
index 24d0b7133eac574e6737f334af1c6cf248ea9faa..add6133f7519c014694671472996388ac1b68147 100644
--- a/src/solution_instances/grid_9_shuffled.sol
+++ b/src/mytests/crossings/grid_9_shuffled.cros
@@ -1,6 +1 @@
-8
-9
-7
-5
-6
 Crossings: 17
diff --git a/src/solution_instances/ladder_4_4_shuffled.sol b/src/mytests/crossings/ladder_4_4_shuffled.cros
similarity index 63%
rename from src/solution_instances/ladder_4_4_shuffled.sol
rename to src/mytests/crossings/ladder_4_4_shuffled.cros
index d20ccb4b639a020be455749d6f544d4eb8b3d96e..7caca1e9635145da9b4fa329c010449dd1c794cb 100644
--- a/src/solution_instances/ladder_4_4_shuffled.sol
+++ b/src/mytests/crossings/ladder_4_4_shuffled.cros
@@ -1,5 +1 @@
-6
-8
-5
-7
 Crossings: 11
diff --git a/src/solution_instances/ladder_4_4_sorted.sol b/src/mytests/crossings/ladder_4_4_sorted.cros
similarity index 61%
rename from src/solution_instances/ladder_4_4_sorted.sol
rename to src/mytests/crossings/ladder_4_4_sorted.cros
index 35f149c7c8428aa5e01865c28fe73e944912d1bc..4ec4c4ecfe9e42df888d39dfa7411d9dd8f61b16 100644
--- a/src/solution_instances/ladder_4_4_sorted.sol
+++ b/src/mytests/crossings/ladder_4_4_sorted.cros
@@ -1,5 +1 @@
-5
-8
-7
-6
 Crossings: 3
diff --git a/src/solution_instances/matching_4_4.sol b/src/mytests/crossings/matching_4_4.cros
similarity index 61%
rename from src/solution_instances/matching_4_4.sol
rename to src/mytests/crossings/matching_4_4.cros
index 1370cd69a7b77b7df97b664e6eb857e43a22a361..edbe1c0e813360e623093b31b227beeb58b9198e 100644
--- a/src/solution_instances/matching_4_4.sol
+++ b/src/mytests/crossings/matching_4_4.cros
@@ -1,5 +1 @@
-7
-5
-6
-8
 Crossings: 0
diff --git a/src/solution_instances/path_9_shuffled.sol b/src/mytests/crossings/path_9_shuffled.cros
similarity index 61%
rename from src/solution_instances/path_9_shuffled.sol
rename to src/mytests/crossings/path_9_shuffled.cros
index a12444e456d1cc2ef4ff5168a617e316839b7df2..7b687de22feb7d8cccb1214aaf22a07d02350a1f 100644
--- a/src/solution_instances/path_9_shuffled.sol
+++ b/src/mytests/crossings/path_9_shuffled.cros
@@ -1,5 +1 @@
-8
-6
-7
-9
 Crossings: 6
diff --git a/src/solution_instances/path_9_sorted.sol b/src/mytests/crossings/path_9_sorted.cros
similarity index 61%
rename from src/solution_instances/path_9_sorted.sol
rename to src/mytests/crossings/path_9_sorted.cros
index 082ab63bb2e4fb8df87230c49f076c7f6031d730..edbe1c0e813360e623093b31b227beeb58b9198e 100644
--- a/src/solution_instances/path_9_sorted.sol
+++ b/src/mytests/crossings/path_9_sorted.cros
@@ -1,5 +1 @@
-7
-9
-6
-8
 Crossings: 0
diff --git a/src/solution_instances/star_6.sol b/src/mytests/crossings/plane_5_6.cros
similarity index 52%
rename from src/solution_instances/star_6.sol
rename to src/mytests/crossings/plane_5_6.cros
index 835c63666be0beba29833f0811654b4071ba6e29..edbe1c0e813360e623093b31b227beeb58b9198e 100644
--- a/src/solution_instances/star_6.sol
+++ b/src/mytests/crossings/plane_5_6.cros
@@ -1,7 +1 @@
-3
-5
-7
-4
-6
-8
 Crossings: 0
diff --git a/src/mytests/crossings/star_6.cros b/src/mytests/crossings/star_6.cros
new file mode 100644
index 0000000000000000000000000000000000000000..edbe1c0e813360e623093b31b227beeb58b9198e
--- /dev/null
+++ b/src/mytests/crossings/star_6.cros
@@ -0,0 +1 @@
+Crossings: 0
diff --git a/src/mytests/crossings/tree_6_10.cros b/src/mytests/crossings/tree_6_10.cros
new file mode 100644
index 0000000000000000000000000000000000000000..256863668686f5715a0e9676b955a0688bd8033a
--- /dev/null
+++ b/src/mytests/crossings/tree_6_10.cros
@@ -0,0 +1 @@
+Crossings: 13
diff --git a/src/mytests/crossings/website_20.cros b/src/mytests/crossings/website_20.cros
new file mode 100644
index 0000000000000000000000000000000000000000..add6133f7519c014694671472996388ac1b68147
--- /dev/null
+++ b/src/mytests/crossings/website_20.cros
@@ -0,0 +1 @@
+Crossings: 17
diff --git a/src/test_instances/0.gr b/src/mytests/instances/0.gr
similarity index 100%
rename from src/test_instances/0.gr
rename to src/mytests/instances/0.gr
diff --git a/src/test_instances/1.gr b/src/mytests/instances/1.gr
similarity index 100%
rename from src/test_instances/1.gr
rename to src/mytests/instances/1.gr
diff --git a/src/test_instances/10.gr b/src/mytests/instances/10.gr
similarity index 100%
rename from src/test_instances/10.gr
rename to src/mytests/instances/10.gr
diff --git a/src/test_instances/100.gr b/src/mytests/instances/100.gr
similarity index 100%
rename from src/test_instances/100.gr
rename to src/mytests/instances/100.gr
diff --git a/src/test_instances/11.gr b/src/mytests/instances/11.gr
similarity index 100%
rename from src/test_instances/11.gr
rename to src/mytests/instances/11.gr
diff --git a/src/test_instances/12.gr b/src/mytests/instances/12.gr
similarity index 100%
rename from src/test_instances/12.gr
rename to src/mytests/instances/12.gr
diff --git a/src/test_instances/13.gr b/src/mytests/instances/13.gr
similarity index 100%
rename from src/test_instances/13.gr
rename to src/mytests/instances/13.gr
diff --git a/src/test_instances/14.gr b/src/mytests/instances/14.gr
similarity index 100%
rename from src/test_instances/14.gr
rename to src/mytests/instances/14.gr
diff --git a/src/test_instances/15.gr b/src/mytests/instances/15.gr
similarity index 100%
rename from src/test_instances/15.gr
rename to src/mytests/instances/15.gr
diff --git a/src/test_instances/16.gr b/src/mytests/instances/16.gr
similarity index 100%
rename from src/test_instances/16.gr
rename to src/mytests/instances/16.gr
diff --git a/src/test_instances/17.gr b/src/mytests/instances/17.gr
similarity index 100%
rename from src/test_instances/17.gr
rename to src/mytests/instances/17.gr
diff --git a/src/test_instances/18.gr b/src/mytests/instances/18.gr
similarity index 100%
rename from src/test_instances/18.gr
rename to src/mytests/instances/18.gr
diff --git a/src/test_instances/19.gr b/src/mytests/instances/19.gr
similarity index 100%
rename from src/test_instances/19.gr
rename to src/mytests/instances/19.gr
diff --git a/src/test_instances/2.gr b/src/mytests/instances/2.gr
similarity index 100%
rename from src/test_instances/2.gr
rename to src/mytests/instances/2.gr
diff --git a/src/test_instances/20.gr b/src/mytests/instances/20.gr
similarity index 100%
rename from src/test_instances/20.gr
rename to src/mytests/instances/20.gr
diff --git a/src/test_instances/21.gr b/src/mytests/instances/21.gr
similarity index 100%
rename from src/test_instances/21.gr
rename to src/mytests/instances/21.gr
diff --git a/src/test_instances/22.gr b/src/mytests/instances/22.gr
similarity index 100%
rename from src/test_instances/22.gr
rename to src/mytests/instances/22.gr
diff --git a/src/test_instances/23.gr b/src/mytests/instances/23.gr
similarity index 100%
rename from src/test_instances/23.gr
rename to src/mytests/instances/23.gr
diff --git a/src/test_instances/24.gr b/src/mytests/instances/24.gr
similarity index 100%
rename from src/test_instances/24.gr
rename to src/mytests/instances/24.gr
diff --git a/src/test_instances/25.gr b/src/mytests/instances/25.gr
similarity index 100%
rename from src/test_instances/25.gr
rename to src/mytests/instances/25.gr
diff --git a/src/test_instances/26.gr b/src/mytests/instances/26.gr
similarity index 100%
rename from src/test_instances/26.gr
rename to src/mytests/instances/26.gr
diff --git a/src/test_instances/27.gr b/src/mytests/instances/27.gr
similarity index 100%
rename from src/test_instances/27.gr
rename to src/mytests/instances/27.gr
diff --git a/src/test_instances/28.gr b/src/mytests/instances/28.gr
similarity index 100%
rename from src/test_instances/28.gr
rename to src/mytests/instances/28.gr
diff --git a/src/test_instances/29.gr b/src/mytests/instances/29.gr
similarity index 100%
rename from src/test_instances/29.gr
rename to src/mytests/instances/29.gr
diff --git a/src/test_instances/3.gr b/src/mytests/instances/3.gr
similarity index 100%
rename from src/test_instances/3.gr
rename to src/mytests/instances/3.gr
diff --git a/src/test_instances/30.gr b/src/mytests/instances/30.gr
similarity index 100%
rename from src/test_instances/30.gr
rename to src/mytests/instances/30.gr
diff --git a/src/test_instances/31.gr b/src/mytests/instances/31.gr
similarity index 100%
rename from src/test_instances/31.gr
rename to src/mytests/instances/31.gr
diff --git a/src/test_instances/32.gr b/src/mytests/instances/32.gr
similarity index 100%
rename from src/test_instances/32.gr
rename to src/mytests/instances/32.gr
diff --git a/src/test_instances/33.gr b/src/mytests/instances/33.gr
similarity index 100%
rename from src/test_instances/33.gr
rename to src/mytests/instances/33.gr
diff --git a/src/test_instances/34.gr b/src/mytests/instances/34.gr
similarity index 100%
rename from src/test_instances/34.gr
rename to src/mytests/instances/34.gr
diff --git a/src/test_instances/35.gr b/src/mytests/instances/35.gr
similarity index 100%
rename from src/test_instances/35.gr
rename to src/mytests/instances/35.gr
diff --git a/src/test_instances/36.gr b/src/mytests/instances/36.gr
similarity index 100%
rename from src/test_instances/36.gr
rename to src/mytests/instances/36.gr
diff --git a/src/test_instances/37.gr b/src/mytests/instances/37.gr
similarity index 100%
rename from src/test_instances/37.gr
rename to src/mytests/instances/37.gr
diff --git a/src/test_instances/38.gr b/src/mytests/instances/38.gr
similarity index 100%
rename from src/test_instances/38.gr
rename to src/mytests/instances/38.gr
diff --git a/src/test_instances/39.gr b/src/mytests/instances/39.gr
similarity index 100%
rename from src/test_instances/39.gr
rename to src/mytests/instances/39.gr
diff --git a/src/test_instances/4.gr b/src/mytests/instances/4.gr
similarity index 100%
rename from src/test_instances/4.gr
rename to src/mytests/instances/4.gr
diff --git a/src/test_instances/40.gr b/src/mytests/instances/40.gr
similarity index 100%
rename from src/test_instances/40.gr
rename to src/mytests/instances/40.gr
diff --git a/src/test_instances/41.gr b/src/mytests/instances/41.gr
similarity index 100%
rename from src/test_instances/41.gr
rename to src/mytests/instances/41.gr
diff --git a/src/test_instances/42.gr b/src/mytests/instances/42.gr
similarity index 100%
rename from src/test_instances/42.gr
rename to src/mytests/instances/42.gr
diff --git a/src/test_instances/43.gr b/src/mytests/instances/43.gr
similarity index 100%
rename from src/test_instances/43.gr
rename to src/mytests/instances/43.gr
diff --git a/src/test_instances/44.gr b/src/mytests/instances/44.gr
similarity index 100%
rename from src/test_instances/44.gr
rename to src/mytests/instances/44.gr
diff --git a/src/test_instances/45.gr b/src/mytests/instances/45.gr
similarity index 100%
rename from src/test_instances/45.gr
rename to src/mytests/instances/45.gr
diff --git a/src/test_instances/46.gr b/src/mytests/instances/46.gr
similarity index 100%
rename from src/test_instances/46.gr
rename to src/mytests/instances/46.gr
diff --git a/src/test_instances/47.gr b/src/mytests/instances/47.gr
similarity index 100%
rename from src/test_instances/47.gr
rename to src/mytests/instances/47.gr
diff --git a/src/test_instances/48.gr b/src/mytests/instances/48.gr
similarity index 100%
rename from src/test_instances/48.gr
rename to src/mytests/instances/48.gr
diff --git a/src/test_instances/49.gr b/src/mytests/instances/49.gr
similarity index 100%
rename from src/test_instances/49.gr
rename to src/mytests/instances/49.gr
diff --git a/src/test_instances/5.gr b/src/mytests/instances/5.gr
similarity index 100%
rename from src/test_instances/5.gr
rename to src/mytests/instances/5.gr
diff --git a/src/test_instances/50.gr b/src/mytests/instances/50.gr
similarity index 100%
rename from src/test_instances/50.gr
rename to src/mytests/instances/50.gr
diff --git a/src/test_instances/51.gr b/src/mytests/instances/51.gr
similarity index 100%
rename from src/test_instances/51.gr
rename to src/mytests/instances/51.gr
diff --git a/src/test_instances/52.gr b/src/mytests/instances/52.gr
similarity index 100%
rename from src/test_instances/52.gr
rename to src/mytests/instances/52.gr
diff --git a/src/test_instances/53.gr b/src/mytests/instances/53.gr
similarity index 100%
rename from src/test_instances/53.gr
rename to src/mytests/instances/53.gr
diff --git a/src/test_instances/54.gr b/src/mytests/instances/54.gr
similarity index 100%
rename from src/test_instances/54.gr
rename to src/mytests/instances/54.gr
diff --git a/src/test_instances/55.gr b/src/mytests/instances/55.gr
similarity index 100%
rename from src/test_instances/55.gr
rename to src/mytests/instances/55.gr
diff --git a/src/test_instances/56.gr b/src/mytests/instances/56.gr
similarity index 100%
rename from src/test_instances/56.gr
rename to src/mytests/instances/56.gr
diff --git a/src/test_instances/57.gr b/src/mytests/instances/57.gr
similarity index 100%
rename from src/test_instances/57.gr
rename to src/mytests/instances/57.gr
diff --git a/src/test_instances/58.gr b/src/mytests/instances/58.gr
similarity index 100%
rename from src/test_instances/58.gr
rename to src/mytests/instances/58.gr
diff --git a/src/test_instances/59.gr b/src/mytests/instances/59.gr
similarity index 100%
rename from src/test_instances/59.gr
rename to src/mytests/instances/59.gr
diff --git a/src/test_instances/6.gr b/src/mytests/instances/6.gr
similarity index 100%
rename from src/test_instances/6.gr
rename to src/mytests/instances/6.gr
diff --git a/src/test_instances/60.gr b/src/mytests/instances/60.gr
similarity index 100%
rename from src/test_instances/60.gr
rename to src/mytests/instances/60.gr
diff --git a/src/test_instances/61.gr b/src/mytests/instances/61.gr
similarity index 100%
rename from src/test_instances/61.gr
rename to src/mytests/instances/61.gr
diff --git a/src/test_instances/62.gr b/src/mytests/instances/62.gr
similarity index 100%
rename from src/test_instances/62.gr
rename to src/mytests/instances/62.gr
diff --git a/src/test_instances/63.gr b/src/mytests/instances/63.gr
similarity index 100%
rename from src/test_instances/63.gr
rename to src/mytests/instances/63.gr
diff --git a/src/test_instances/64.gr b/src/mytests/instances/64.gr
similarity index 100%
rename from src/test_instances/64.gr
rename to src/mytests/instances/64.gr
diff --git a/src/test_instances/65.gr b/src/mytests/instances/65.gr
similarity index 100%
rename from src/test_instances/65.gr
rename to src/mytests/instances/65.gr
diff --git a/src/test_instances/66.gr b/src/mytests/instances/66.gr
similarity index 100%
rename from src/test_instances/66.gr
rename to src/mytests/instances/66.gr
diff --git a/src/test_instances/67.gr b/src/mytests/instances/67.gr
similarity index 100%
rename from src/test_instances/67.gr
rename to src/mytests/instances/67.gr
diff --git a/src/test_instances/68.gr b/src/mytests/instances/68.gr
similarity index 100%
rename from src/test_instances/68.gr
rename to src/mytests/instances/68.gr
diff --git a/src/test_instances/69.gr b/src/mytests/instances/69.gr
similarity index 100%
rename from src/test_instances/69.gr
rename to src/mytests/instances/69.gr
diff --git a/src/test_instances/7.gr b/src/mytests/instances/7.gr
similarity index 100%
rename from src/test_instances/7.gr
rename to src/mytests/instances/7.gr
diff --git a/src/test_instances/70.gr b/src/mytests/instances/70.gr
similarity index 100%
rename from src/test_instances/70.gr
rename to src/mytests/instances/70.gr
diff --git a/src/test_instances/71.gr b/src/mytests/instances/71.gr
similarity index 100%
rename from src/test_instances/71.gr
rename to src/mytests/instances/71.gr
diff --git a/src/test_instances/72.gr b/src/mytests/instances/72.gr
similarity index 100%
rename from src/test_instances/72.gr
rename to src/mytests/instances/72.gr
diff --git a/src/test_instances/73.gr b/src/mytests/instances/73.gr
similarity index 100%
rename from src/test_instances/73.gr
rename to src/mytests/instances/73.gr
diff --git a/src/test_instances/74.gr b/src/mytests/instances/74.gr
similarity index 100%
rename from src/test_instances/74.gr
rename to src/mytests/instances/74.gr
diff --git a/src/test_instances/75.gr b/src/mytests/instances/75.gr
similarity index 100%
rename from src/test_instances/75.gr
rename to src/mytests/instances/75.gr
diff --git a/src/test_instances/76.gr b/src/mytests/instances/76.gr
similarity index 100%
rename from src/test_instances/76.gr
rename to src/mytests/instances/76.gr
diff --git a/src/test_instances/77.gr b/src/mytests/instances/77.gr
similarity index 100%
rename from src/test_instances/77.gr
rename to src/mytests/instances/77.gr
diff --git a/src/test_instances/78.gr b/src/mytests/instances/78.gr
similarity index 100%
rename from src/test_instances/78.gr
rename to src/mytests/instances/78.gr
diff --git a/src/test_instances/79.gr b/src/mytests/instances/79.gr
similarity index 100%
rename from src/test_instances/79.gr
rename to src/mytests/instances/79.gr
diff --git a/src/test_instances/8.gr b/src/mytests/instances/8.gr
similarity index 100%
rename from src/test_instances/8.gr
rename to src/mytests/instances/8.gr
diff --git a/src/test_instances/80.gr b/src/mytests/instances/80.gr
similarity index 100%
rename from src/test_instances/80.gr
rename to src/mytests/instances/80.gr
diff --git a/src/test_instances/81.gr b/src/mytests/instances/81.gr
similarity index 100%
rename from src/test_instances/81.gr
rename to src/mytests/instances/81.gr
diff --git a/src/test_instances/82.gr b/src/mytests/instances/82.gr
similarity index 100%
rename from src/test_instances/82.gr
rename to src/mytests/instances/82.gr
diff --git a/src/test_instances/83.gr b/src/mytests/instances/83.gr
similarity index 100%
rename from src/test_instances/83.gr
rename to src/mytests/instances/83.gr
diff --git a/src/test_instances/84.gr b/src/mytests/instances/84.gr
similarity index 100%
rename from src/test_instances/84.gr
rename to src/mytests/instances/84.gr
diff --git a/src/test_instances/85.gr b/src/mytests/instances/85.gr
similarity index 100%
rename from src/test_instances/85.gr
rename to src/mytests/instances/85.gr
diff --git a/src/test_instances/86.gr b/src/mytests/instances/86.gr
similarity index 100%
rename from src/test_instances/86.gr
rename to src/mytests/instances/86.gr
diff --git a/src/test_instances/87.gr b/src/mytests/instances/87.gr
similarity index 100%
rename from src/test_instances/87.gr
rename to src/mytests/instances/87.gr
diff --git a/src/test_instances/88.gr b/src/mytests/instances/88.gr
similarity index 100%
rename from src/test_instances/88.gr
rename to src/mytests/instances/88.gr
diff --git a/src/test_instances/89.gr b/src/mytests/instances/89.gr
similarity index 100%
rename from src/test_instances/89.gr
rename to src/mytests/instances/89.gr
diff --git a/src/test_instances/9.gr b/src/mytests/instances/9.gr
similarity index 100%
rename from src/test_instances/9.gr
rename to src/mytests/instances/9.gr
diff --git a/src/test_instances/90.gr b/src/mytests/instances/90.gr
similarity index 100%
rename from src/test_instances/90.gr
rename to src/mytests/instances/90.gr
diff --git a/src/test_instances/91.gr b/src/mytests/instances/91.gr
similarity index 100%
rename from src/test_instances/91.gr
rename to src/mytests/instances/91.gr
diff --git a/src/test_instances/92.gr b/src/mytests/instances/92.gr
similarity index 100%
rename from src/test_instances/92.gr
rename to src/mytests/instances/92.gr
diff --git a/src/test_instances/93.gr b/src/mytests/instances/93.gr
similarity index 100%
rename from src/test_instances/93.gr
rename to src/mytests/instances/93.gr
diff --git a/src/test_instances/94.gr b/src/mytests/instances/94.gr
similarity index 100%
rename from src/test_instances/94.gr
rename to src/mytests/instances/94.gr
diff --git a/src/test_instances/95.gr b/src/mytests/instances/95.gr
similarity index 100%
rename from src/test_instances/95.gr
rename to src/mytests/instances/95.gr
diff --git a/src/test_instances/96.gr b/src/mytests/instances/96.gr
similarity index 100%
rename from src/test_instances/96.gr
rename to src/mytests/instances/96.gr
diff --git a/src/test_instances/97.gr b/src/mytests/instances/97.gr
similarity index 100%
rename from src/test_instances/97.gr
rename to src/mytests/instances/97.gr
diff --git a/src/test_instances/98.gr b/src/mytests/instances/98.gr
similarity index 100%
rename from src/test_instances/98.gr
rename to src/mytests/instances/98.gr
diff --git a/src/test_instances/99.gr b/src/mytests/instances/99.gr
similarity index 100%
rename from src/test_instances/99.gr
rename to src/mytests/instances/99.gr
diff --git a/src/mytests/solutions/0.sol b/src/mytests/solutions/0.sol
new file mode 100644
index 0000000000000000000000000000000000000000..292ff76f03cd38c78e04979106e1fcb289a304c8
--- /dev/null
+++ b/src/mytests/solutions/0.sol
@@ -0,0 +1,3 @@
+5
+4
+6
diff --git a/src/solution_instances/1.sol b/src/mytests/solutions/1.sol
similarity index 100%
rename from src/solution_instances/1.sol
rename to src/mytests/solutions/1.sol
diff --git a/src/mytests/solutions/complete_4_5.sol b/src/mytests/solutions/complete_4_5.sol
new file mode 100644
index 0000000000000000000000000000000000000000..b040bdf616793518cf67f1c354974d7fb51e36a5
--- /dev/null
+++ b/src/mytests/solutions/complete_4_5.sol
@@ -0,0 +1,5 @@
+9
+8
+7
+6
+5
diff --git a/src/githubtests/tiny_test_set/solutions/complete_4_5.sol b/src/mytests/solutions/cycle_8_shuffled.sol
similarity index 88%
rename from src/githubtests/tiny_test_set/solutions/complete_4_5.sol
rename to src/mytests/solutions/cycle_8_shuffled.sol
index 56593e110f71dd9704c883852e3f1b427b515b4d..3590b120515e7d1676e2cda33c21153f8137432f 100644
--- a/src/githubtests/tiny_test_set/solutions/complete_4_5.sol
+++ b/src/mytests/solutions/cycle_8_shuffled.sol
@@ -1,5 +1,4 @@
-5
 6
 7
 8
-9
\ No newline at end of file
+5
diff --git a/src/mytests/solutions/cycle_8_sorted.sol b/src/mytests/solutions/cycle_8_sorted.sol
new file mode 100644
index 0000000000000000000000000000000000000000..5957c0fd30f1d1c724ee0cef9f31e2aa03ec8d5a
--- /dev/null
+++ b/src/mytests/solutions/cycle_8_sorted.sol
@@ -0,0 +1,4 @@
+5
+7
+6
+8
diff --git a/src/mytests/solutions/grid_9_shuffled.sol b/src/mytests/solutions/grid_9_shuffled.sol
new file mode 100644
index 0000000000000000000000000000000000000000..486c1901fbb92fd8aad5b8cf547dfa6fdc193b1c
--- /dev/null
+++ b/src/mytests/solutions/grid_9_shuffled.sol
@@ -0,0 +1,5 @@
+8
+9
+7
+5
+6
diff --git a/src/mytests/solutions/ladder_4_4_shuffled.sol b/src/mytests/solutions/ladder_4_4_shuffled.sol
new file mode 100644
index 0000000000000000000000000000000000000000..c21318104c87e7753cf77710811b96ece447c87a
--- /dev/null
+++ b/src/mytests/solutions/ladder_4_4_shuffled.sol
@@ -0,0 +1,4 @@
+6
+8
+5
+7
diff --git a/src/mytests/solutions/ladder_4_4_sorted.sol b/src/mytests/solutions/ladder_4_4_sorted.sol
new file mode 100644
index 0000000000000000000000000000000000000000..701bf8a8f0a28ca759e2be69767c8cb9ab6493be
--- /dev/null
+++ b/src/mytests/solutions/ladder_4_4_sorted.sol
@@ -0,0 +1,4 @@
+5
+8
+7
+6
diff --git a/src/mytests/solutions/matching_4_4.sol b/src/mytests/solutions/matching_4_4.sol
new file mode 100644
index 0000000000000000000000000000000000000000..95fc5e4e0a65822bba117e5d1693d2bb274fe32d
--- /dev/null
+++ b/src/mytests/solutions/matching_4_4.sol
@@ -0,0 +1,4 @@
+7
+5
+6
+8
diff --git a/src/mytests/solutions/path_9_shuffled.sol b/src/mytests/solutions/path_9_shuffled.sol
new file mode 100644
index 0000000000000000000000000000000000000000..e8af654cb316935458944427702fa42b22d723cc
--- /dev/null
+++ b/src/mytests/solutions/path_9_shuffled.sol
@@ -0,0 +1,4 @@
+8
+6
+7
+9
diff --git a/src/mytests/solutions/path_9_sorted.sol b/src/mytests/solutions/path_9_sorted.sol
new file mode 100644
index 0000000000000000000000000000000000000000..b86e09948b2f06b1fff40a5649a9cfeab507caa0
--- /dev/null
+++ b/src/mytests/solutions/path_9_sorted.sol
@@ -0,0 +1,4 @@
+7
+9
+6
+8
diff --git a/src/solution_instances/plane_5_6.sol b/src/mytests/solutions/plane_5_6.sol
similarity index 51%
rename from src/solution_instances/plane_5_6.sol
rename to src/mytests/solutions/plane_5_6.sol
index 44592e234c064ce7bee5e69a50e5cf0ce6a5aeb7..e70e8bf79e2940ffedf78fd819ccda8ff13207f7 100644
--- a/src/solution_instances/plane_5_6.sol
+++ b/src/mytests/solutions/plane_5_6.sol
@@ -4,4 +4,3 @@
 10
 7
 8
-Crossings: 0
diff --git a/src/mytests/solutions/star_6.sol b/src/mytests/solutions/star_6.sol
new file mode 100644
index 0000000000000000000000000000000000000000..dd866a9aacbaf7d0ecaa57c1d05c91901d68ee72
--- /dev/null
+++ b/src/mytests/solutions/star_6.sol
@@ -0,0 +1,6 @@
+3
+5
+7
+4
+6
+8
diff --git a/src/solution_instances/tree_6_10.sol b/src/mytests/solutions/tree_6_10.sol
similarity index 65%
rename from src/solution_instances/tree_6_10.sol
rename to src/mytests/solutions/tree_6_10.sol
index dedff8a06e68c52daab6a6f2473a5355bbb2737e..c8e2fc5934e2f11a25743d4e3d2b8b046d00f082 100644
--- a/src/solution_instances/tree_6_10.sol
+++ b/src/mytests/solutions/tree_6_10.sol
@@ -8,4 +8,3 @@
 14
 15
 16
-Crossings: 13
diff --git a/src/solution_instances/website_20.sol b/src/mytests/solutions/website_20.sol
similarity index 68%
rename from src/solution_instances/website_20.sol
rename to src/mytests/solutions/website_20.sol
index 37dd3ec2966be51975039fac4ec4294a1765bfbb..4d5dc4bcdbeb153dc564fd7db2e3231763a3368d 100644
--- a/src/solution_instances/website_20.sol
+++ b/src/mytests/solutions/website_20.sol
@@ -8,4 +8,3 @@
 14
 16
 15
-Crossings: 17
diff --git a/src/prob.lp b/src/prob.lp
index 0949b7c5dce585c175ad07e5b824f823a8f112b6..f4c2742a5a600297b7e321552323912f661453cc 100644
--- a/src/prob.lp
+++ b/src/prob.lp
@@ -1,187 +1,275 @@
 \* Minimize_Crossings *\
 Minimize
-OBJ: c_1_15_10_16 + c_1_15_2_17 + c_1_15_3_18 + c_1_15_4_19 + c_1_15_5_20
- + c_1_15_6_11 + c_1_15_7_12 + c_1_15_8_13 + c_1_15_9_14 + c_1_16_10_15
- + c_1_16_2_17 + c_1_16_3_18 + c_1_16_4_19 + c_1_16_5_20 + c_1_16_6_11
- + c_1_16_7_12 + c_1_16_8_13 + c_1_16_9_14 + c_2_17_10_15 + c_2_17_10_16
- + c_2_17_3_18 + c_2_17_4_19 + c_2_17_5_20 + c_2_17_6_11 + c_2_17_7_12
- + c_2_17_8_13 + c_2_17_9_14 + c_3_18_10_15 + c_3_18_10_16 + c_3_18_4_19
- + c_3_18_5_20 + c_3_18_6_11 + c_3_18_7_12 + c_3_18_8_13 + c_3_18_9_14
- + c_4_19_10_15 + c_4_19_10_16 + c_4_19_5_20 + c_4_19_6_11 + c_4_19_7_12
- + c_4_19_8_13 + c_4_19_9_14 + c_5_20_10_15 + c_5_20_10_16 + c_5_20_6_11
- + c_5_20_7_12 + c_5_20_8_13 + c_5_20_9_14 + c_6_11_10_15 + c_6_11_10_16
- + c_6_11_7_12 + c_6_11_8_13 + c_6_11_9_14 + c_7_12_10_15 + c_7_12_10_16
- + c_7_12_8_13 + c_7_12_9_14 + c_8_13_10_15 + c_8_13_10_16 + c_8_13_9_14
- + c_9_14_10_15 + c_9_14_10_16
+OBJ: c_1_5_2_6 + c_1_5_2_7 + c_1_5_2_8 + c_1_5_2_9 + c_1_5_3_6 + c_1_5_3_7
+ + c_1_5_3_8 + c_1_5_3_9 + c_1_5_4_6 + c_1_5_4_7 + c_1_5_4_8 + c_1_5_4_9
+ + c_1_6_2_5 + c_1_6_2_7 + c_1_6_2_8 + c_1_6_2_9 + c_1_6_3_5 + c_1_6_3_7
+ + c_1_6_3_8 + c_1_6_3_9 + c_1_6_4_5 + c_1_6_4_7 + c_1_6_4_8 + c_1_6_4_9
+ + c_1_7_2_5 + c_1_7_2_6 + c_1_7_2_8 + c_1_7_2_9 + c_1_7_3_5 + c_1_7_3_6
+ + c_1_7_3_8 + c_1_7_3_9 + c_1_7_4_5 + c_1_7_4_6 + c_1_7_4_8 + c_1_7_4_9
+ + c_1_8_2_5 + c_1_8_2_6 + c_1_8_2_7 + c_1_8_2_9 + c_1_8_3_5 + c_1_8_3_6
+ + c_1_8_3_7 + c_1_8_3_9 + c_1_8_4_5 + c_1_8_4_6 + c_1_8_4_7 + c_1_8_4_9
+ + c_1_9_2_5 + c_1_9_2_6 + c_1_9_2_7 + c_1_9_2_8 + c_1_9_3_5 + c_1_9_3_6
+ + c_1_9_3_7 + c_1_9_3_8 + c_1_9_4_5 + c_1_9_4_6 + c_1_9_4_7 + c_1_9_4_8
+ + c_2_5_3_6 + c_2_5_3_7 + c_2_5_3_8 + c_2_5_3_9 + c_2_5_4_6 + c_2_5_4_7
+ + c_2_5_4_8 + c_2_5_4_9 + c_2_6_3_5 + c_2_6_3_7 + c_2_6_3_8 + c_2_6_3_9
+ + c_2_6_4_5 + c_2_6_4_7 + c_2_6_4_8 + c_2_6_4_9 + c_2_7_3_5 + c_2_7_3_6
+ + c_2_7_3_8 + c_2_7_3_9 + c_2_7_4_5 + c_2_7_4_6 + c_2_7_4_8 + c_2_7_4_9
+ + c_2_8_3_5 + c_2_8_3_6 + c_2_8_3_7 + c_2_8_3_9 + c_2_8_4_5 + c_2_8_4_6
+ + c_2_8_4_7 + c_2_8_4_9 + c_2_9_3_5 + c_2_9_3_6 + c_2_9_3_7 + c_2_9_3_8
+ + c_2_9_4_5 + c_2_9_4_6 + c_2_9_4_7 + c_2_9_4_8 + c_3_5_4_6 + c_3_5_4_7
+ + c_3_5_4_8 + c_3_5_4_9 + c_3_6_4_5 + c_3_6_4_7 + c_3_6_4_8 + c_3_6_4_9
+ + c_3_7_4_5 + c_3_7_4_6 + c_3_7_4_8 + c_3_7_4_9 + c_3_8_4_5 + c_3_8_4_6
+ + c_3_8_4_7 + c_3_8_4_9 + c_3_9_4_5 + c_3_9_4_6 + c_3_9_4_7 + c_3_9_4_8
 Subject To
-_C1: c_1_15_2_17 + y_15_17 = 1
-_C10: c_1_16_2_17 + y_16_17 = 1
-_C11: c_1_16_3_18 + y_16_18 = 1
-_C12: c_1_16_4_19 + y_16_19 = 1
-_C13: c_1_16_5_20 + y_16_20 = 1
-_C14: c_1_16_6_11 - y_11_16 = 0
-_C15: c_1_16_7_12 - y_12_16 = 0
-_C16: c_1_16_8_13 - y_13_16 = 0
-_C17: c_1_16_9_14 - y_14_16 = 0
-_C18: c_1_16_10_15 - y_15_16 = 0
-_C19: c_2_17_3_18 + y_17_18 = 1
-_C2: c_1_15_3_18 + y_15_18 = 1
-_C20: c_2_17_4_19 + y_17_19 = 1
-_C21: c_2_17_5_20 + y_17_20 = 1
-_C22: c_2_17_6_11 - y_11_17 = 0
-_C23: c_2_17_7_12 - y_12_17 = 0
-_C24: c_2_17_8_13 - y_13_17 = 0
-_C25: c_2_17_9_14 - y_14_17 = 0
-_C26: c_2_17_10_15 - y_15_17 = 0
-_C27: c_2_17_10_16 - y_16_17 = 0
-_C28: c_3_18_4_19 + y_18_19 = 1
-_C29: c_3_18_5_20 + y_18_20 = 1
-_C3: c_1_15_4_19 + y_15_19 = 1
-_C30: c_3_18_6_11 - y_11_18 = 0
-_C31: c_3_18_7_12 - y_12_18 = 0
-_C32: c_3_18_8_13 - y_13_18 = 0
-_C33: c_3_18_9_14 - y_14_18 = 0
-_C34: c_3_18_10_15 - y_15_18 = 0
-_C35: c_3_18_10_16 - y_16_18 = 0
-_C36: c_4_19_5_20 + y_19_20 = 1
-_C37: c_4_19_6_11 - y_11_19 = 0
-_C38: c_4_19_7_12 - y_12_19 = 0
-_C39: c_4_19_8_13 - y_13_19 = 0
-_C4: c_1_15_5_20 + y_15_20 = 1
-_C40: c_4_19_9_14 - y_14_19 = 0
-_C41: c_4_19_10_15 - y_15_19 = 0
-_C42: c_4_19_10_16 - y_16_19 = 0
-_C43: c_5_20_6_11 - y_11_20 = 0
-_C44: c_5_20_7_12 - y_12_20 = 0
-_C45: c_5_20_8_13 - y_13_20 = 0
-_C46: c_5_20_9_14 - y_14_20 = 0
-_C47: c_5_20_10_15 - y_15_20 = 0
-_C48: c_5_20_10_16 - y_16_20 = 0
-_C49: c_6_11_7_12 + y_11_12 = 1
-_C5: c_1_15_6_11 - y_11_15 = 0
-_C50: c_6_11_8_13 + y_11_13 = 1
-_C51: c_6_11_9_14 + y_11_14 = 1
-_C52: c_6_11_10_15 + y_11_15 = 1
-_C53: c_6_11_10_16 + y_11_16 = 1
-_C54: c_7_12_8_13 + y_12_13 = 1
-_C55: c_7_12_9_14 + y_12_14 = 1
-_C56: c_7_12_10_15 + y_12_15 = 1
-_C57: c_7_12_10_16 + y_12_16 = 1
-_C58: c_8_13_9_14 + y_13_14 = 1
-_C59: c_8_13_10_15 + y_13_15 = 1
-_C6: c_1_15_7_12 - y_12_15 = 0
-_C60: c_8_13_10_16 + y_13_16 = 1
-_C61: c_9_14_10_15 + y_14_15 = 1
-_C62: c_9_14_10_16 + y_14_16 = 1
-_C7: c_1_15_8_13 - y_13_15 = 0
-_C8: c_1_15_9_14 - y_14_15 = 0
-_C9: c_1_15_10_16 + y_15_16 = 1
+_C1: c_1_5_2_6 + y_5_6 = 1
+_C10: c_1_5_4_7 + y_5_7 = 1
+_C100: c_2_9_4_8 - y_8_9 = 0
+_C101: c_3_5_4_6 + y_5_6 = 1
+_C102: c_3_5_4_7 + y_5_7 = 1
+_C103: c_3_5_4_8 + y_5_8 = 1
+_C104: c_3_5_4_9 + y_5_9 = 1
+_C105: c_3_6_4_5 - y_5_6 = 0
+_C106: c_3_6_4_7 + y_6_7 = 1
+_C107: c_3_6_4_8 + y_6_8 = 1
+_C108: c_3_6_4_9 + y_6_9 = 1
+_C109: c_3_7_4_5 - y_5_7 = 0
+_C11: c_1_5_4_8 + y_5_8 = 1
+_C110: c_3_7_4_6 - y_6_7 = 0
+_C111: c_3_7_4_8 + y_7_8 = 1
+_C112: c_3_7_4_9 + y_7_9 = 1
+_C113: c_3_8_4_5 - y_5_8 = 0
+_C114: c_3_8_4_6 - y_6_8 = 0
+_C115: c_3_8_4_7 - y_7_8 = 0
+_C116: c_3_8_4_9 + y_8_9 = 1
+_C117: c_3_9_4_5 - y_5_9 = 0
+_C118: c_3_9_4_6 - y_6_9 = 0
+_C119: c_3_9_4_7 - y_7_9 = 0
+_C12: c_1_5_4_9 + y_5_9 = 1
+_C120: c_3_9_4_8 - y_8_9 = 0
+_C13: c_1_6_2_5 - y_5_6 = 0
+_C14: c_1_6_2_7 + y_6_7 = 1
+_C15: c_1_6_2_8 + y_6_8 = 1
+_C16: c_1_6_2_9 + y_6_9 = 1
+_C17: c_1_6_3_5 - y_5_6 = 0
+_C18: c_1_6_3_7 + y_6_7 = 1
+_C19: c_1_6_3_8 + y_6_8 = 1
+_C2: c_1_5_2_7 + y_5_7 = 1
+_C20: c_1_6_3_9 + y_6_9 = 1
+_C21: c_1_6_4_5 - y_5_6 = 0
+_C22: c_1_6_4_7 + y_6_7 = 1
+_C23: c_1_6_4_8 + y_6_8 = 1
+_C24: c_1_6_4_9 + y_6_9 = 1
+_C25: c_1_7_2_5 - y_5_7 = 0
+_C26: c_1_7_2_6 - y_6_7 = 0
+_C27: c_1_7_2_8 + y_7_8 = 1
+_C28: c_1_7_2_9 + y_7_9 = 1
+_C29: c_1_7_3_5 - y_5_7 = 0
+_C3: c_1_5_2_8 + y_5_8 = 1
+_C30: c_1_7_3_6 - y_6_7 = 0
+_C31: c_1_7_3_8 + y_7_8 = 1
+_C32: c_1_7_3_9 + y_7_9 = 1
+_C33: c_1_7_4_5 - y_5_7 = 0
+_C34: c_1_7_4_6 - y_6_7 = 0
+_C35: c_1_7_4_8 + y_7_8 = 1
+_C36: c_1_7_4_9 + y_7_9 = 1
+_C37: c_1_8_2_5 - y_5_8 = 0
+_C38: c_1_8_2_6 - y_6_8 = 0
+_C39: c_1_8_2_7 - y_7_8 = 0
+_C4: c_1_5_2_9 + y_5_9 = 1
+_C40: c_1_8_2_9 + y_8_9 = 1
+_C41: c_1_8_3_5 - y_5_8 = 0
+_C42: c_1_8_3_6 - y_6_8 = 0
+_C43: c_1_8_3_7 - y_7_8 = 0
+_C44: c_1_8_3_9 + y_8_9 = 1
+_C45: c_1_8_4_5 - y_5_8 = 0
+_C46: c_1_8_4_6 - y_6_8 = 0
+_C47: c_1_8_4_7 - y_7_8 = 0
+_C48: c_1_8_4_9 + y_8_9 = 1
+_C49: c_1_9_2_5 - y_5_9 = 0
+_C5: c_1_5_3_6 + y_5_6 = 1
+_C50: c_1_9_2_6 - y_6_9 = 0
+_C51: c_1_9_2_7 - y_7_9 = 0
+_C52: c_1_9_2_8 - y_8_9 = 0
+_C53: c_1_9_3_5 - y_5_9 = 0
+_C54: c_1_9_3_6 - y_6_9 = 0
+_C55: c_1_9_3_7 - y_7_9 = 0
+_C56: c_1_9_3_8 - y_8_9 = 0
+_C57: c_1_9_4_5 - y_5_9 = 0
+_C58: c_1_9_4_6 - y_6_9 = 0
+_C59: c_1_9_4_7 - y_7_9 = 0
+_C6: c_1_5_3_7 + y_5_7 = 1
+_C60: c_1_9_4_8 - y_8_9 = 0
+_C61: c_2_5_3_6 + y_5_6 = 1
+_C62: c_2_5_3_7 + y_5_7 = 1
+_C63: c_2_5_3_8 + y_5_8 = 1
+_C64: c_2_5_3_9 + y_5_9 = 1
+_C65: c_2_5_4_6 + y_5_6 = 1
+_C66: c_2_5_4_7 + y_5_7 = 1
+_C67: c_2_5_4_8 + y_5_8 = 1
+_C68: c_2_5_4_9 + y_5_9 = 1
+_C69: c_2_6_3_5 - y_5_6 = 0
+_C7: c_1_5_3_8 + y_5_8 = 1
+_C70: c_2_6_3_7 + y_6_7 = 1
+_C71: c_2_6_3_8 + y_6_8 = 1
+_C72: c_2_6_3_9 + y_6_9 = 1
+_C73: c_2_6_4_5 - y_5_6 = 0
+_C74: c_2_6_4_7 + y_6_7 = 1
+_C75: c_2_6_4_8 + y_6_8 = 1
+_C76: c_2_6_4_9 + y_6_9 = 1
+_C77: c_2_7_3_5 - y_5_7 = 0
+_C78: c_2_7_3_6 - y_6_7 = 0
+_C79: c_2_7_3_8 + y_7_8 = 1
+_C8: c_1_5_3_9 + y_5_9 = 1
+_C80: c_2_7_3_9 + y_7_9 = 1
+_C81: c_2_7_4_5 - y_5_7 = 0
+_C82: c_2_7_4_6 - y_6_7 = 0
+_C83: c_2_7_4_8 + y_7_8 = 1
+_C84: c_2_7_4_9 + y_7_9 = 1
+_C85: c_2_8_3_5 - y_5_8 = 0
+_C86: c_2_8_3_6 - y_6_8 = 0
+_C87: c_2_8_3_7 - y_7_8 = 0
+_C88: c_2_8_3_9 + y_8_9 = 1
+_C89: c_2_8_4_5 - y_5_8 = 0
+_C9: c_1_5_4_6 + y_5_6 = 1
+_C90: c_2_8_4_6 - y_6_8 = 0
+_C91: c_2_8_4_7 - y_7_8 = 0
+_C92: c_2_8_4_9 + y_8_9 = 1
+_C93: c_2_9_3_5 - y_5_9 = 0
+_C94: c_2_9_3_6 - y_6_9 = 0
+_C95: c_2_9_3_7 - y_7_9 = 0
+_C96: c_2_9_3_8 - y_8_9 = 0
+_C97: c_2_9_4_5 - y_5_9 = 0
+_C98: c_2_9_4_6 - y_6_9 = 0
+_C99: c_2_9_4_7 - y_7_9 = 0
 Binaries
-c_1_15_10_16
-c_1_15_2_17
-c_1_15_3_18
-c_1_15_4_19
-c_1_15_5_20
-c_1_15_6_11
-c_1_15_7_12
-c_1_15_8_13
-c_1_15_9_14
-c_1_16_10_15
-c_1_16_2_17
-c_1_16_3_18
-c_1_16_4_19
-c_1_16_5_20
-c_1_16_6_11
-c_1_16_7_12
-c_1_16_8_13
-c_1_16_9_14
-c_2_17_10_15
-c_2_17_10_16
-c_2_17_3_18
-c_2_17_4_19
-c_2_17_5_20
-c_2_17_6_11
-c_2_17_7_12
-c_2_17_8_13
-c_2_17_9_14
-c_3_18_10_15
-c_3_18_10_16
-c_3_18_4_19
-c_3_18_5_20
-c_3_18_6_11
-c_3_18_7_12
-c_3_18_8_13
-c_3_18_9_14
-c_4_19_10_15
-c_4_19_10_16
-c_4_19_5_20
-c_4_19_6_11
-c_4_19_7_12
-c_4_19_8_13
-c_4_19_9_14
-c_5_20_10_15
-c_5_20_10_16
-c_5_20_6_11
-c_5_20_7_12
-c_5_20_8_13
-c_5_20_9_14
-c_6_11_10_15
-c_6_11_10_16
-c_6_11_7_12
-c_6_11_8_13
-c_6_11_9_14
-c_7_12_10_15
-c_7_12_10_16
-c_7_12_8_13
-c_7_12_9_14
-c_8_13_10_15
-c_8_13_10_16
-c_8_13_9_14
-c_9_14_10_15
-c_9_14_10_16
-y_11_12
-y_11_13
-y_11_14
-y_11_15
-y_11_16
-y_11_17
-y_11_18
-y_11_19
-y_11_20
-y_12_13
-y_12_14
-y_12_15
-y_12_16
-y_12_17
-y_12_18
-y_12_19
-y_12_20
-y_13_14
-y_13_15
-y_13_16
-y_13_17
-y_13_18
-y_13_19
-y_13_20
-y_14_15
-y_14_16
-y_14_17
-y_14_18
-y_14_19
-y_14_20
-y_15_16
-y_15_17
-y_15_18
-y_15_19
-y_15_20
-y_16_17
-y_16_18
-y_16_19
-y_16_20
-y_17_18
-y_17_19
-y_17_20
-y_18_19
-y_18_20
-y_19_20
+c_1_5_2_6
+c_1_5_2_7
+c_1_5_2_8
+c_1_5_2_9
+c_1_5_3_6
+c_1_5_3_7
+c_1_5_3_8
+c_1_5_3_9
+c_1_5_4_6
+c_1_5_4_7
+c_1_5_4_8
+c_1_5_4_9
+c_1_6_2_5
+c_1_6_2_7
+c_1_6_2_8
+c_1_6_2_9
+c_1_6_3_5
+c_1_6_3_7
+c_1_6_3_8
+c_1_6_3_9
+c_1_6_4_5
+c_1_6_4_7
+c_1_6_4_8
+c_1_6_4_9
+c_1_7_2_5
+c_1_7_2_6
+c_1_7_2_8
+c_1_7_2_9
+c_1_7_3_5
+c_1_7_3_6
+c_1_7_3_8
+c_1_7_3_9
+c_1_7_4_5
+c_1_7_4_6
+c_1_7_4_8
+c_1_7_4_9
+c_1_8_2_5
+c_1_8_2_6
+c_1_8_2_7
+c_1_8_2_9
+c_1_8_3_5
+c_1_8_3_6
+c_1_8_3_7
+c_1_8_3_9
+c_1_8_4_5
+c_1_8_4_6
+c_1_8_4_7
+c_1_8_4_9
+c_1_9_2_5
+c_1_9_2_6
+c_1_9_2_7
+c_1_9_2_8
+c_1_9_3_5
+c_1_9_3_6
+c_1_9_3_7
+c_1_9_3_8
+c_1_9_4_5
+c_1_9_4_6
+c_1_9_4_7
+c_1_9_4_8
+c_2_5_3_6
+c_2_5_3_7
+c_2_5_3_8
+c_2_5_3_9
+c_2_5_4_6
+c_2_5_4_7
+c_2_5_4_8
+c_2_5_4_9
+c_2_6_3_5
+c_2_6_3_7
+c_2_6_3_8
+c_2_6_3_9
+c_2_6_4_5
+c_2_6_4_7
+c_2_6_4_8
+c_2_6_4_9
+c_2_7_3_5
+c_2_7_3_6
+c_2_7_3_8
+c_2_7_3_9
+c_2_7_4_5
+c_2_7_4_6
+c_2_7_4_8
+c_2_7_4_9
+c_2_8_3_5
+c_2_8_3_6
+c_2_8_3_7
+c_2_8_3_9
+c_2_8_4_5
+c_2_8_4_6
+c_2_8_4_7
+c_2_8_4_9
+c_2_9_3_5
+c_2_9_3_6
+c_2_9_3_7
+c_2_9_3_8
+c_2_9_4_5
+c_2_9_4_6
+c_2_9_4_7
+c_2_9_4_8
+c_3_5_4_6
+c_3_5_4_7
+c_3_5_4_8
+c_3_5_4_9
+c_3_6_4_5
+c_3_6_4_7
+c_3_6_4_8
+c_3_6_4_9
+c_3_7_4_5
+c_3_7_4_6
+c_3_7_4_8
+c_3_7_4_9
+c_3_8_4_5
+c_3_8_4_6
+c_3_8_4_7
+c_3_8_4_9
+c_3_9_4_5
+c_3_9_4_6
+c_3_9_4_7
+c_3_9_4_8
+y_5_6
+y_5_7
+y_5_8
+y_5_9
+y_6_7
+y_6_8
+y_6_9
+y_7_8
+y_7_9
+y_8_9
 End
diff --git a/src/solver.bat b/src/solver.bat
new file mode 100644
index 0000000000000000000000000000000000000000..4139868fe5efffcd006ebcfcb0b6b746287520bb
--- /dev/null
+++ b/src/solver.bat
@@ -0,0 +1,4 @@
+@echo off
+call .\.venv\Scripts\activate
+python solver.py %*
+call deactivate
diff --git a/src/solver.py b/src/solver.py
new file mode 100644
index 0000000000000000000000000000000000000000..863d6ad3a05bc2d1bbddccb651222ee01abbd945
--- /dev/null
+++ b/src/solver.py
@@ -0,0 +1,122 @@
+import os
+import logging
+from datetime import timedelta
+import time
+import argparse
+from pulp import *
+from collections import defaultdict, deque
+
+# Konfiguriere Logging
+file_handler = logging.FileHandler('logfile.log')
+console_handler = logging.StreamHandler()
+logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[file_handler, console_handler])
+
+def count_crossings_via_variables(c_vars):
+    crossings = 0
+    for c_var in c_vars.values():
+        if c_var.varValue == 1:
+            crossings += 1
+    return crossings
+
+def solve_bipartite_minimization(input_file, output_file):
+    start_time = time()
+    logging.info(f"Prozess für {input_file} gestartet")
+
+    # Dateinamen basierend auf input_file generieren
+    output_crossings_file = output_file.replace('.sol', '.cros')
+
+    edges = []
+    with open(input_file, "r") as file:
+        for line in file:
+            if line.startswith('c'):
+                continue
+            elif line.startswith('p'):
+                parts = line.split()
+                n0 = int(parts[2])
+                n1 = int(parts[3])
+                logging.info(f"Größen der Partitionen: A={n0}, B={n1}")
+            else:
+                x, y = map(int, line.split())
+                edges.append((x, y))
+    logging.info(f"{len(edges)} Kanten geladen.")
+
+    prob = LpProblem("Minimize_Crossings", LpMinimize)
+
+    y = {(i, j): LpVariable(f"y_{i}_{j}", 0, 1, cat='Binary') for i in range(n0 + 1, n0 + n1 + 1) for j in range(n0 + 1, n0 + n1 + 1) if i < j}
+    c = {(i, j, k, l): LpVariable(f"c_{i}_{j}_{k}_{l}", 0, 1, cat='Binary') for (i, j) in edges for (k, l) in edges if i < j and k < l and i < k and j != l}
+    logging.info("Variablen für y und c geladen.")
+
+    prob += lpSum(c.values())
+    logging.info("Zielfunktion aufgestellt.")
+
+    edges.sort(key=lambda x: x[0])  # Sortierung der Kanten nach dem Startknoten
+    for idx, (i, j) in enumerate(edges):
+        for (k, l) in edges[idx + 1:]:
+            if k > i:  # Prüfung nur, wenn k > i nach Sortierung
+                if (i, j, k, l) not in c:
+                    c[(i, j, k, l)] = LpVariable(f"c_{i}_{j}_{k}_{l}", 0, 1, cat='Binary')
+                if j > l:
+                    prob += c[(i, j, k, l)] == y[(l, j)]
+                elif l > j:
+                    prob += c[(i, j, k, l)] == 1 - y[(j, l)]
+    logging.info("Crossing Constraints aufgestellt.")
+
+    prob.solve()
+    logging.info(f"Status der Lösung: {LpStatus[prob.status]}")
+
+    if prob.status == LpStatusOptimal:
+        logging.info("Optimale Lösung gefunden. Ergebnisse werden gespeichert.")
+        graph = defaultdict(list)
+        in_degree = defaultdict(int)
+        nodes = range(n0+1, n0+n1+1)
+
+        for i in nodes:
+            for j in nodes:
+                if i != j:
+                    y_ij = y.get((i, j))
+                    if y_ij is not None and y_ij.varValue == 1:
+                        graph[i].append(j)
+                        in_degree[j] += 1
+                    elif y_ij is not None and y_ij.varValue == 0:
+                        graph[j].append(i)
+                        in_degree[i] += 1
+
+        zero_in_degree_queue = deque([i for i in nodes if in_degree[i] == 0])
+        sorted_b = []
+        while zero_in_degree_queue:
+            node = zero_in_degree_queue.popleft()
+            sorted_b.append(node)
+            for neighbor in graph[node]:
+                in_degree[neighbor] -= 1
+                if in_degree[neighbor] == 0:
+                    zero_in_degree_queue.append(neighbor)
+
+        os.makedirs(os.path.dirname(output_file), exist_ok=True)
+        with open(output_file, 'w') as f:
+            for b in sorted_b:
+                f.write(f"{b}\n")
+        logging.info(f"Ergebnisse in {output_file} gespeichert")
+
+        crossings_count = count_crossings_via_variables(c)
+        with open(output_crossings_file, 'w') as f:
+            f.write(f"Crossings: {crossings_count}\n")
+        logging.info(f"Crossings: {crossings_count}, in {output_crossings_file} gespeichert")
+
+        end_time = time()
+        elapsed_time = end_time - start_time
+        elapsed_time_td = timedelta(seconds=elapsed_time)
+        logging.info(f"Verstrichene Zeit: {elapsed_time_td.total_seconds()} Sekunden.\n")
+    else:
+        logging.warning("Keine optimale Lösung gefunden.\n")
+
+
+def main():
+    parser = argparse.ArgumentParser(description="Solve Bipartite Minimization Problem")
+    parser.add_argument('input_file', type=str, help="The path to the input file")
+    parser.add_argument('output_file', type=str, help="The path to the output file")
+    args = parser.parse_args()
+
+    solve_bipartite_minimization(args.input_file, args.output_file)
+
+if __name__ == "__main__":
+    main()