diff --git a/loesung.c b/loesung.c
index 6ec22b19cb6d89b655c9a5302c3aa7250e4313e9..32d402e6f300978abeb002b4ac28b095d73f90bb 100644
--- a/loesung.c
+++ b/loesung.c
@@ -106,17 +106,17 @@ void list_free(List *this) {
 
 /** pruefen, ob genausoviele gerade und ungerade Kacheln existieren,
  * ohne einen Overflow zu erzeugen
- * notwendiges Kriterium fuer unzusammenhaengender graph und hinreichendes
- * fuer zusammenhaengender
+ * notwendiges Kriterium fuer
  */
-bool list_possible(List *this) {
+bool list_necessity(List *this) {
     return this->num_tiles - this->num_odd == this->num_odd;
 }
 
 /** Zurueckgeben, ob graph ein vollstaendiges Rechteck ist */
 bool list_rectangle(List *this) {
-    return (this->max.x - this->min.x) * (this->max.y - this->min.y)
-        == this->num_tiles; // TODO: check for overflow?
+    // verwenden von `uint64_t` um einen ueberlauf zu vermeiden
+    return (uint64_t)(this->max.x - this->min.x) * (uint64_t)(this->max.y - this->min.y)
+        == (uint64_t)this->num_tiles;
 }
 
 typedef enum ReadResult {
@@ -349,6 +349,17 @@ int main (void)
         list_free(&tile_list);
         return EXIT_FAILURE;
     }
+
+    if (!list_necessity(&tile_list)) {
+        printf("None\n");
+        return EXIT_SUCCESS;
+    }
+    if (list_rectangle(&tile_list)) {
+        printf("Rechteck");
+        // TODO: Rechteck ausgabefunktion
+        return EXIT_SUCCESS;
+    }
+
     Array tile_array;
     // uebertragen der Liste in ein Array, und uebergeben des ownership der Tiles
     // an das Array
@@ -358,9 +369,6 @@ int main (void)
         return EXIT_FAILURE;
     }
 
-    // TODO: pruefen, ob notwendiges Kriterium erfuellt,
-    // TODO: Falls Rechteck, dieses Ausgeben.
-
     //array_print(&tile_array);
     qsort(tile_array.tiles, tile_array.num_tiles, sizeof(Tile*), tile_compare);