diff --git a/src/main/java/org/petriNet/Main.java b/src/main/java/org/petriNet/Main.java
index 7143b00703aca3f001e2d525fc5abdfb6425acaf..6b889c71006391d4f52e01e6d84cffdd7ca53a30 100644
--- a/src/main/java/org/petriNet/Main.java
+++ b/src/main/java/org/petriNet/Main.java
@@ -1,51 +1,142 @@
 package org.petriNet;
 
+import java.util.Scanner;
+
 public class Main {
 
     public static void main(String[] args) {
+        Scanner scanner = new Scanner(System.in);
+
+        System.out.println("Choose which simulation to run:");
+        System.out.println("1. Standard Petri Network");
+        System.out.println("2. Special Videur Arc Network");
+        System.out.println("3. Special Zero Arc Petri Network");
+        System.out.print("Enter your choice (1/2/3): ");
+
+        int choice = scanner.nextInt();
+
+        switch (choice) {
+            case 1:
+                runStandardPetriNetwork();
+                break;
+            case 2:
+                runSpecialVideur();
+                break;
+            case 3:
+                runSpecialZero();
+                break;
+            default:
+                System.out.println("Invalid choice! Please run the program again.");
+        }
+
+        scanner.close();
+    }
+
+    private static void runStandardPetriNetwork() {
+        System.out.println("Running Standard Petri Network Simulation...");
         // Initialize the Petri network
         PetriNet petriNetwork = new PetriNet();
-
         // Create places
+
         Place place1 = new Place(3, petriNetwork.generateId(1));
         Place place2 = new Place(0, petriNetwork.generateId(1));
-
         // Add places to the network
+
         petriNetwork.addPlace(place1);
         petriNetwork.addPlace(place2);
+        // Create a transition and add it
 
-        // Create a transition
         Transition transition1 = new Transition("T1", petriNetwork.generateId(2));
-
-        // Add the transition to the network
         petriNetwork.addTransition(transition1);
-
         // Create arcs and add them to the network
-        // Incoming arc from place1 to transition1 with weight 1
         IncomingArc incomingArc = new IncomingArc_Simple(transition1, place1, 1, petriNetwork.generateId(0));
         petriNetwork.addArc(incomingArc);
         transition1.addIncomingArc(incomingArc);
 
-        // Outgoing arc from transition1 to place2 with weight 1
         OutgoingArc outgoingArc = new OutgoingArc(transition1, place2, 1, petriNetwork.generateId(0));
         petriNetwork.addArc(outgoingArc);
         transition1.addOutgoingArc(outgoingArc);
 
-        // Display the initial state of the Petri network
-        System.out.println("Initial State of Petri Network:");
         petriNetwork.displayNetwork();
 
-        // Activate the transition
         System.out.println("\nActivating transition T1...");
         petriNetwork.fireTransition(String.valueOf(transition1.getId()));
 
-        // Display the state of the Petri network after activation
         System.out.println("\nState of Petri Network after Transition T1 Activation:");
         petriNetwork.displayNetwork();
 
-        // Example assertions to verify changes
         System.out.println("\nVerifying state:");
         System.out.println("Tokens in Place 1 (expected 2): " + place1.getTokenCount());
         System.out.println("Tokens in Place 2 (expected 1): " + place2.getTokenCount());
     }
+
+    private static void runSpecialVideur() {
+        System.out.println("Running Special Videur Transition Simulation...");
+
+        PetriNet petriNetwork = new PetriNet();
+
+        Place place1 = new Place(2, petriNetwork.generateId(1));
+        Place place2 = new Place(4, petriNetwork.generateId(1));
+
+        petriNetwork.addPlace(place1);
+        petriNetwork.addPlace(place2);
+
+        Transition transition1 = new Transition("T1", petriNetwork.generateId(2));
+        petriNetwork.addTransition(transition1);
+
+        IncomingArc_Videur incomingArc_videur = new IncomingArc_Videur(transition1, place2, 1, petriNetwork.generateId(0));
+        petriNetwork.addArc(incomingArc_videur);
+        transition1.addIncomingArc(incomingArc_videur);
+
+        OutgoingArc outgoingArc = new OutgoingArc(transition1, place1, 1, petriNetwork.generateId(0));
+        petriNetwork.addArc(outgoingArc);
+        transition1.addOutgoingArc(outgoingArc);
+
+        petriNetwork.displayNetwork();
+
+        System.out.println("\nActivating transition T1...");
+        petriNetwork.fireTransition(String.valueOf(transition1.getId()));
+
+        System.out.println("\nState of Petri Network after Transition T1 Activation:");
+        petriNetwork.displayNetwork();
+
+        System.out.println("\nVerifying state:");
+        System.out.println("Tokens in Place 1 (expected 3): " + place1.getTokenCount());
+        System.out.println("Tokens in Place 2 (expected 0): " + place2.getTokenCount());
+    }
+
+    private static void runSpecialZero() {
+        System.out.println("Running Special Zero Transition Simulation...");
+
+        PetriNet petriNetwork = new PetriNet();
+
+        Place place1 = new Place(3, petriNetwork.generateId(1));
+        Place place2 = new Place(0, petriNetwork.generateId(1));
+
+        petriNetwork.addPlace(place1);
+        petriNetwork.addPlace(place2);
+
+        Transition transition1 = new Transition("T1", petriNetwork.generateId(2));
+        petriNetwork.addTransition(transition1);
+
+        IncomingArc_Zero incomingArc_zero = new IncomingArc_Zero(transition1, place2, 1, petriNetwork.generateId(0));
+        petriNetwork.addArc(incomingArc_zero);
+        transition1.addIncomingArc(incomingArc_zero);
+
+        OutgoingArc outgoingArc = new OutgoingArc(transition1, place1, 1, petriNetwork.generateId(0));
+        petriNetwork.addArc(outgoingArc);
+        transition1.addOutgoingArc(outgoingArc);
+
+        petriNetwork.displayNetwork();
+
+        System.out.println("\nActivating transition T1...");
+        petriNetwork.fireTransition(String.valueOf(transition1.getId()));
+
+        System.out.println("\nState of Petri Network after Transition T1 Activation:");
+        petriNetwork.displayNetwork();
+
+        System.out.println("\nVerifying state:");
+        System.out.println("Tokens in Place 1 (expected 4): " + place1.getTokenCount());
+        System.out.println("Tokens in Place 2 (expected 0): " + place2.getTokenCount());
+    }
 }