diff --git a/travail_individuel/Belkhiri/GameOfLife/run b/travail_individuel/Belkhiri/GameOfLife/run
index af69540990706f8de4044047d08508fde45a9b9b..822be8dad667a5b253701b229c6da36d40433f68 100755
Binary files a/travail_individuel/Belkhiri/GameOfLife/run and b/travail_individuel/Belkhiri/GameOfLife/run differ
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/map.c b/travail_individuel/Belkhiri/GameOfLife/src/map.c
index e49cf5f029b491fa508497c27ad5d084ca795168..18514b06d526f8d0a3e783b87d0ece07e298756b 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/map.c
+++ b/travail_individuel/Belkhiri/GameOfLife/src/map.c
@@ -4,9 +4,6 @@ int MAPSIZE = 20;
 
 int **map;
 
-int ***mapList;
-int mapListSize = 0;
-
 void allocateMap()
 {
     map = malloc(MAPSIZE * sizeof(int *));
@@ -16,15 +13,9 @@ void allocateMap()
     }
 }
 
-void allocateMapList(int SIZE)
-{
-    mapList = malloc(SIZE * sizeof(int **));
-}
-
 void initMap()
 {
     allocateMap();
-    allocateMapList(100);
     for (int i = 0; i < MAPSIZE; i++)
     {
         for (int j = 0; j < MAPSIZE; j++)
@@ -60,8 +51,15 @@ void writeMap(char *filename)
     fclose(f);
 }
 
-void addMapToList(int **map)
+int MapToBinary(int ** map)
 {
-    mapList[mapListSize] = map;
-    mapListSize++;
+    int binary = 0;
+    for (int i = 0; i < MAPSIZE; i++)
+    {
+        for (int j = 0; j < MAPSIZE; j++)
+        {
+            binary += map[i][j] * pow(2, (i * MAPSIZE + j));
+        }
+    }
+    return binary;
 }
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/map.h b/travail_individuel/Belkhiri/GameOfLife/src/map.h
index cb95414889e3110ee70e5807314a2dcd9436e8e4..72d03795076a8132352aff014dee2cc93ace2a33 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/map.h
+++ b/travail_individuel/Belkhiri/GameOfLife/src/map.h
@@ -5,13 +5,10 @@
 
 extern int MAPSIZE;
 extern int ** map;
-extern int *** mapList;
-extern int mapListSize;
 
 void printMap();
 void initMap();
 void writeMap(char* filename);
-void addMapToList(int ** map);
-int ** saveMapState();
+int MapToBinary(int ** map);
 
 #endif
\ No newline at end of file
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/utility.c b/travail_individuel/Belkhiri/GameOfLife/src/utility.c
index ebb1630d6d0bdf29cf7514338cf137d2d2e71a22..309a771c82d7dd3f4b33f56ea7b02072b48f2784 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/utility.c
+++ b/travail_individuel/Belkhiri/GameOfLife/src/utility.c
@@ -4,6 +4,9 @@ int surviveRule[NB_RULES] = {0, 0, 1, 1, 0, 0, 0, 0, 0};
 int bornRule[NB_RULES] = {0, 0, 0, 1, 0, 0, 0, 0, 0};
 int stable;
 
+int BinaryList[LIST_SIZE];
+int BinaryListSize;
+
 int survivingNeighbors(int x, int y){
     int count = 0;
     for(int i = -1; i <= 1; i++){
@@ -15,10 +18,31 @@ int survivingNeighbors(int x, int y){
     return count;
 }
 
+void addBinaryToList(int binary){
+    if (BinaryListSize == LIST_SIZE) return;
+    BinaryList[BinaryListSize] = binary;
+    BinaryListSize++;
+}
+
+void checkForCycle(){
+    int i = 0;
+    while (i < BinaryListSize){
+        if (BinaryList[i] == BinaryList[BinaryListSize - 1]){
+            printf("Cycle detected!\n");
+            return;
+        }
+        i++;
+    }
+}
+
 
 void updateMap(){
     int newMap[MAPSIZE][MAPSIZE];
     stable = 1;
+
+    int binary = MapToBinary(map);
+    addBinaryToList(binary);
+
     for (int i=0; i<MAPSIZE; i++){
         for (int j=0; j<MAPSIZE; j++){
             int count = survivingNeighbors(j, i);
@@ -44,5 +68,7 @@ void updateMap(){
             map[i][j] = newMap[i][j];
         }
     }
+
+    checkForCycle();
 }
 
diff --git a/travail_individuel/Belkhiri/GameOfLife/src/utility.h b/travail_individuel/Belkhiri/GameOfLife/src/utility.h
index f781d11ca1e8175e6b4f8740c227e5b70a78fb92..3e872d45d65b22378da463920ab104a56a0fd818 100644
--- a/travail_individuel/Belkhiri/GameOfLife/src/utility.h
+++ b/travail_individuel/Belkhiri/GameOfLife/src/utility.h
@@ -6,6 +6,7 @@
 
 
 #define NB_RULES 9
+#define LIST_SIZE 100
 
 extern int stable;
 void updateMap();