diff --git a/src/main/java/model/Cell.java b/src/main/java/model/Cell.java
new file mode 100644
index 0000000000000000000000000000000000000000..93a7faafb486bd5d5aaa3f82f36fa25d5272b611
--- /dev/null
+++ b/src/main/java/model/Cell.java
@@ -0,0 +1,51 @@
+package model;
+
+import util.Position;
+
+import java.util.List;
+
+public class Cell implements State, Board{
+    Position position;
+    public Cell(Position position){
+        this.position = position;
+    }
+    @Override
+    public boolean isOnFire(Position position) {
+        return false;
+    }
+
+    @Override
+    public Object getState(Position position) {
+        return null;
+    }
+
+    @Override
+    public void setState(Object state, Position position) {
+
+    }
+
+    @Override
+    public int rowCount() {
+        return 0;
+    }
+
+    @Override
+    public int columnCount() {
+        return 0;
+    }
+
+    @Override
+    public List<Position> updateToNextGeneration() {
+        return null;
+    }
+
+    @Override
+    public void reset() {
+
+    }
+
+    @Override
+    public int stepNumber() {
+        return 0;
+    }
+}
diff --git a/src/main/java/model/Cloud.java b/src/main/java/model/Cloud.java
new file mode 100644
index 0000000000000000000000000000000000000000..ffc1cff34eca21e27a10946a381bc6c1d4b10a13
--- /dev/null
+++ b/src/main/java/model/Cloud.java
@@ -0,0 +1,12 @@
+package model;
+
+import util.Position;
+
+import java.util.Random;
+
+public class Cloud {
+    private final Random randomGenerator = new Random();
+    private Position randomPosition() {
+        return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
+    }
+}
diff --git a/src/main/java/model/Extinguish.java b/src/main/java/model/Extinguish.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6142e1a50ccee54a421b8e9eef56868a5e079e9
--- /dev/null
+++ b/src/main/java/model/Extinguish.java
@@ -0,0 +1,5 @@
+package model;
+
+public interface Extinguish {
+
+}
diff --git a/src/main/java/model/Fire.java b/src/main/java/model/Fire.java
new file mode 100644
index 0000000000000000000000000000000000000000..595a26606f3b9c2b1d0a26763851f2090a49abea
--- /dev/null
+++ b/src/main/java/model/Fire.java
@@ -0,0 +1,15 @@
+package model;
+
+import util.Position;
+
+import java.util.Random;
+import java.util.Set;
+
+public class Fire {
+    private final int initialFireCount;
+    private Set<Position> firePositions;
+    private final Random randomGenerator = new Random();
+    private Position randomPosition() {
+        return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
+    }
+}
diff --git a/src/main/java/model/FireFighter.java b/src/main/java/model/FireFighter.java
new file mode 100644
index 0000000000000000000000000000000000000000..530cd6714de586af99b69dd99e9a0c9c499f398a
--- /dev/null
+++ b/src/main/java/model/FireFighter.java
@@ -0,0 +1,16 @@
+package model;
+
+import util.Position;
+
+import java.util.List;
+import java.util.Set;
+
+public class FireFighter {
+    private final int initialFirefighterCount;
+    private List<Position> firefighterPositions;
+    private Set<Position> firePositions;
+    private Position randomPosition() {
+        return new Position(randomGenerator.nextInt(rowCount), randomGenerator.nextInt(columnCount));
+    }
+
+}
diff --git a/src/main/java/model/FirefighterBoard.java b/src/main/java/model/FirefighterBoard.java
index 3251952ea90ec5ea59fc3a3630f3d2a4e4e96f01..b5f0563236d6393f0fe972aa97c1c6d8762f1c82 100644
--- a/src/main/java/model/FirefighterBoard.java
+++ b/src/main/java/model/FirefighterBoard.java
@@ -8,10 +8,10 @@ import java.util.*;
 public class FirefighterBoard implements Board<List<ModelElement>> {
   private final int columnCount;
   private final int rowCount;
-  private final int initialFireCount;
-  private final int initialFirefighterCount;
-  private List<Position> firefighterPositions;
-  private Set<Position> firePositions;
+  private final int initialFireCount;// so luong o lu luc dau
+  private final int initialFirefighterCount;// so luong o linh cuu hoa luc dau
+  private List<Position> firefighterPositions;// danh sach vi tri linh cuu hoa
+  private Set<Position> firePositions;// tap hop vi tri lua
   private int step = 0;
   private final Random randomGenerator = new Random();
 
@@ -37,7 +37,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   @Override
-  public List<ModelElement> getState(Position position) {
+  public List<ModelElement> getState(Position position) {// xet xem vi tri nay la linh cuu hoa hay lua
     List<ModelElement> result = new ArrayList<>();
     for(Position firefighterPosition : firefighterPositions)
       if (firefighterPosition.equals(position))
@@ -57,22 +57,22 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     return columnCount;
   }
 
-  public List<Position> updateToNextGeneration() {
+  public List<Position> updateToNextGeneration() {// chua hieu lam gi
     List<Position> result = updateFirefighters();
     result.addAll(updateFires());
     step++;
     return result;
   }
 
-  private List<Position> updateFires() {
-    List<Position> result = new ArrayList<>();
-    if (step % 2 == 0) {
-      List<Position> newFirePositions = new ArrayList<>();
+  private List<Position> updateFires() {// chay lan ra
+    List<Position> result = new ArrayList<>();// list vi tri lua moi duoc khoi tao
+    if (step % 2 == 0) {// ko hieu vi sao phai chia het cho 2
+      List<Position> newFirePositions = new ArrayList<>();// cac vi tri lua lan ra duoc khoi tao
       for (Position fire : firePositions) {
         newFirePositions.addAll(neighbors(fire));
       }
-      firePositions.addAll(newFirePositions);
-      result.addAll(newFirePositions);
+      firePositions.addAll(newFirePositions);// lua da lan ra hang xom
+      result.addAll(newFirePositions);// updata tong vi tri lua moi
     }
     return result;
 
@@ -83,19 +83,19 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
     return step;
   }
 
-  private List<Position> updateFirefighters() {
+  private List<Position> updateFirefighters() {// linh cuu hoa chia ra de dap lua
     List<Position> result = new ArrayList<>();
     List<Position> firefighterNewPositions = new ArrayList<>();
     for (Position firefighterPosition : firefighterPositions) {
-      Position newFirefighterPosition = neighborClosestToFire(firefighterPosition);
-      firefighterNewPositions.add(newFirefighterPosition);
-      extinguish(newFirefighterPosition);
+      Position newFirefighterPosition = neighborClosestToFire(firefighterPosition);// linh ra den cho gan nhat co lua
+      firefighterNewPositions.add(newFirefighterPosition);// cap nhat vi tri moi cua linh cuu hoa
+      extinguish(newFirefighterPosition);// xoa vi tri cu cua linh cuu hoa
       result.add(firefighterPosition);
       result.add(newFirefighterPosition);
       List<Position> neighborFirePositions = neighbors(newFirefighterPosition).stream()
               .filter(firePositions::contains).toList();
       for(Position firePosition : neighborFirePositions)
-        extinguish(firePosition);
+        extinguish(firePosition);//xoa di vi tri lua duoc dap
       result.addAll(neighborFirePositions);
     }
     firefighterPositions = firefighterNewPositions;
@@ -129,12 +129,12 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
       firstMove.put(initialMove, initialMove);
     while (!toVisit.isEmpty()) {
       Position current = toVisit.poll();
-      if (firePositions.contains(current))
+      if (firePositions.contains(current))// neu lua o vi tri nay thi den day
         return firstMove.get(current);
-      for (Position adjacent : neighbors(current)) {
-        if (seen.contains(adjacent)) continue;
-        toVisit.add(adjacent);
-        seen.add(adjacent);
+      for (Position adjacent : neighbors(current)) {// moi hang xom cua vi tri nay
+        if (seen.contains(adjacent)) continue;// neu seen chua hang xom nay
+        toVisit.add(adjacent);// thi den day
+        seen.add(adjacent);// cho vi tri cua hang xom nay vao see
         firstMove.put(adjacent, firstMove.get(current));
       }
     }
@@ -142,7 +142,7 @@ public class FirefighterBoard implements Board<List<ModelElement>> {
   }
 
   @Override
-  public void setState(List<ModelElement> state, Position position) {
+  public void setState(List<ModelElement> state, Position position) {//vi tri nay dang lua hay linh cuu hoa
     firePositions.remove(position);
     for (;;) {
       if (!firefighterPositions.remove(position)) break;
diff --git a/src/main/java/model/State.java b/src/main/java/model/State.java
new file mode 100644
index 0000000000000000000000000000000000000000..bea5fa5c83fee714a0be757c1ed8bd007b8ef0a4
--- /dev/null
+++ b/src/main/java/model/State.java
@@ -0,0 +1,10 @@
+package model;
+
+import util.Position;
+
+import java.util.*;
+
+public interface State {
+    boolean isOnFire(Position position);
+
+}