public DFA(Collection<State> states, Collection<Transition> transitions, Collection<State> acceptables, State start) {
		Set<State> statesSet = new HashSet<State>(states);
		Set<Transition> transitionsSet = new HashSet<Transition>(transitions);
		
		this.acceptables = new HashSet<State>(acceptables);
		
		for (State state : statesSet) {
			HashMap<String, Transition> map = new HashMap<String, Transition>();
			allInOne.put(state, map);
		}
		
		Logger.log(statesSet.size());
		for (State state : statesSet) {
			HashMap<String, Transition> map = allInOne.get(state);
			
			for (Transition tran : transitionsSet) {
				if (tran == null)
					throw new IllegalArgumentException();
				if (tran.getOrigin() != state)
					continue;
				String key = tran.getKey();
				if (key == null)
					throw new IllegalArgumentException("null key in transition");
				map.put(key, tran);
			}
			Logger.log(map.size());
		}
		
		this.start = start;
		current = start;
	}