diff --git a/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java b/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java
index 6ed784a1c675e56e0de06b2c5d29819043c9fea7..f8966b97ee846a85e9cd1c36dc5a2670cd3ef826 100644
--- a/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java
+++ b/src/main/java/cz/vsb/fei/efrei/lab03/DangerWorld.java
@@ -1,5 +1,10 @@
 package cz.vsb.fei.efrei.lab03;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 import java.util.Random;
 import java.util.Scanner;
 
@@ -7,34 +12,113 @@ public class DangerWorld {
 	private static final Random RANDOM = new Random();
 
 	public static void main(String[] args) {
-		Fighter[] fighters = new Fighter[6];
+		List<Fighter> fighters = new ArrayList<>();
 		try (Scanner s = new Scanner(System.in)) {
 			System.out.println("Type name of monster:");
 			String name = s.next();
 
 			Monster monster = new Monster(name);
-			fighters[0] = monster;
-			fighters[1] = new Monster("King");
-			fighters[2] = new Monster("Queen");
-			fighters[3] = new Monster("Fairy");
-			fighters[4] = new Hero("Shrek");
-			fighters[5] = new Hero("Cinderela");
+			fighters.add(monster);
+			fighters.add(new Monster("King"));
+			fighters.add(new Monster("Queen"));
+			fighters.add(new Monster("Fairy"));
+			fighters.add(new Hero("Shrek"));
+			fighters.add(new Hero("Cinderela"));
+			
+			int countOfHeros = RANDOM.nextInt(200);
+			for (int i = 0; i < countOfHeros; i++) {
+				fighters.add(new Hero(Utils.generateHeroName()));
+			}
+			
+			int countOfMonsters = RANDOM.nextInt(250);
+			for (int i = 0; i < countOfMonsters; i++) {
+				fighters.add(new Monster(Utils.generateMonsterName()));
+			}
+			
+			int sumStrenght = 0;
+			for (Fighter fighter : fighters) {
+				sumStrenght += fighter.getStrenght();
+			}
+			System.out.println("Average strenght of all fighters is " + sumStrenght / fighters.size());
+			int sumStrenghtOfHeroes = 0;
+			int numberOfHeroes = 0;
+			int sumStrenghtOfMonsters = 0;
+			int numberOfMonsters = 0;
+			for (Fighter fighter : fighters) {
+				if (fighter instanceof Monster) {
+					sumStrenghtOfMonsters += fighter.getStrenght();
+					numberOfMonsters++;
+				} else if (fighter instanceof Hero) {
+					sumStrenghtOfHeroes += fighter.getStrenght();
+					numberOfHeroes++;
+				}
+
+			}
+			System.out.println("Average strenght of all Heros is " + sumStrenghtOfHeroes / numberOfHeroes);
+			System.out.println("Average strenght of all Monsters is " + sumStrenghtOfMonsters / numberOfMonsters);
 
-			int rounds = 100;
+			int rounds = 1000;
 
 			for (int i = 0; i < rounds; i++) {
-				Fighter fighter1 = fighters[RANDOM.nextInt(6)];
-				Fighter fighter2 = fighters[RANDOM.nextInt(6)];
+				Fighter fighter1 = fighters.get(RANDOM.nextInt(fighters.size()));
+				Fighter fighter2 = fighters.get(RANDOM.nextInt(fighters.size()));
 				try {
 					fighter1.attackedBy(fighter2);
 				} catch (AlreadyDeadException e) {
 					System.out.println(
-							"Ups! Fighter " 
-					+ fighter2.getName()
-					+ " attack already dead "
-					+ fighter1.getName());
+							"Ups! Fighter " + fighter2.getName() + " attack already dead " + fighter1.getName());
+				}
+			}
+
+			int countDeath = 0;
+//			List<Fighter> deads = new ArrayList<>();
+//			for (Fighter fighter : fighters) {
+//				if(!fighter.isAlive()) {
+//					countDeath++;
+//					deads.add(fighter);
+//				}
+//			}			int countOfHeros = RANDOM.nextInt(200);
+
+//			fighters.removeAll(deads);
+//			for (int i = fighters.size()-1; i>=0; i--) {
+//				if(!fighters.get(i).isAlive()) {
+//					countDeath++;
+//					fighters.remove(i);
+//				}
+//			}
+
+			Iterator<Fighter> iterator = fighters.iterator();
+			while (iterator.hasNext()) {
+				if (!iterator.next().isAlive()) {
+					iterator.remove();
+					countDeath++;
 				}
 			}
+
+			System.out.println("Number of deats:" + countDeath);
+
+			for (Fighter fighter2 : fighters) {
+				if (!fighter2.isAlive()) {
+					System.out.println("Fount dead fighter " + fighter2.getName());
+				}
+			}
+
+			Map<String, Integer> namesCountMap = new HashMap<>();
+			for (Fighter fighter : fighters) {
+				if (namesCountMap.containsKey(fighter.getName())) {
+					Integer count = namesCountMap.get(fighter.getName());
+					int newCount = count + 1;
+					namesCountMap.put(fighter.getName(), newCount);
+				} else {
+					namesCountMap.put(fighter.getName(), 1);
+				}
+			}
+
+			for (String name1 : namesCountMap.keySet()) {
+				int count = namesCountMap.get(name1);
+				System.out.println(name1 + ": " + count);
+			}
+
 		}
 
 	}