public eNfa(List<State> states, List<String> symbols, List<Transition> transitions, State startingState,
			List<State> acceptableStates) {
		super(states, symbols, transitions, startingState, acceptableStates);
		this.states = states;
		this.symbols = symbols;
		this.transitions = transitions;
		this.startingState = startingState;
		this.acceptableStates = acceptableStates;

		for (Transition t : this.transitions) {
			if (t.getKey().equals(EPSILON)) {
				this.epsilonInstances.add(t.getOrigin());
				t.getOrigin().eTransition = t;
			}

			t.getOrigin().transitions.add(t);

			if (!this.states.contains(t.getOrigin()) || !this.states.containsAll(t.getDestinations())) {
				StringBuilder sb = new StringBuilder();
				sb.append("Transition contains a state not present in the state list!\nTransition:\n\t");
				sb.append(t);
				sb.append("\nState list:\n");
				for (State s : states) {
					sb.append("\t");
					sb.append(s);
					sb.append("\n");
				}
				throw new IllegalArgumentException(sb.toString());
			}

		}

		minimise();
		initialise();
	}