diff --git a/src/main/java/util/Matrix.java b/src/main/java/util/Matrix.java
index a2d05d6c9f4863c384004e64c92d52c0ad68347a..3e4cb8ef145206f559d354d392462c30c109416c 100644
--- a/src/main/java/util/Matrix.java
+++ b/src/main/java/util/Matrix.java
@@ -1,21 +1,58 @@
 package util;
+
 import java.util.ArrayList;
-public class Matrix<E> {
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+
+public class Matrix<E> implements Iterable<E> {
     private ArrayList<ArrayList<E>> matrix;
-    public Matrix(){
+
+    public Matrix() {
         this.matrix = new ArrayList<ArrayList<E>>();
     }
 
-    public E get(int x, int y){
+    public E get(int x, int y) {
         return matrix.get(x).get(y);
     }
-    public E set(int x, int y, E object){
+
+    public E set(int x, int y, E object) {
         return matrix.get(x).set(y, object);
     }
-    public void clear(){
+
+    public void clear() {
         this.matrix = new ArrayList<ArrayList<E>>();
     }
-    public int size(){
-        return matrix != null ? matrix.get(0).size()*matrix.size() : 0;
+
+    public int size() {
+        return matrix != null ? matrix.get(0).size() * matrix.size() : 0;
+    }
+
+    @Override
+    public Iterator<E> iterator() {
+        return new MatrixIterator();
+    }
+
+    private class MatrixIterator implements Iterator<E> {
+        private int row = 0;
+        private int col = 0;
+
+        @Override
+        public boolean hasNext() {
+            return row < matrix.size() && col < matrix.get(row).size();
+        }
+
+        @Override
+        public E next() {
+            if (!hasNext()) {
+                throw new NoSuchElementException();
+            }
+            E element = matrix.get(row).get(col);
+            col++;
+            if (col >= matrix.get(row).size()) {
+                col = 0;
+                row++;
+            }
+            return element;
+        }
     }
 }