public ArrayList<Transition> parseMonaEdge(String edgeLabel, State to) {
			edgeLabel = edgeLabel.substring(1);// remove first " in MONA label
			edgeLabel = edgeLabel.substring(0, edgeLabel.length() - 1);// remove
			// last
			// " in
			// MONA
			// label
			StringTokenizer edgeTokenizer = new StringTokenizer(edgeLabel,
					"\\n");
			char[][] MONALabel = null;
			for (int width = 0; width < 8; width++) {// for every column in
				// label matrix (actual
				// ASCII char)
				String nextToken = edgeTokenizer.nextToken();
				StringTokenizer lineTokenizer = new StringTokenizer(nextToken,
						" ,");
				if (MONALabel == null)
					MONALabel = new char[lineTokenizer.countTokens()][8];
				int height = 0;// height of label matrix
				while (lineTokenizer.hasMoreTokens()) {
					String character = lineTokenizer.nextToken();
					MONALabel[height++][width] = character.charAt(0);
				}
			}
			/** debugging **/
			// for (int i = 0; i < label.length; i++){
			// System.out.print("[" + label[i][0]);
			// for (int j = 1; j < label[i].length; j++)
			// System.out.print(", " + label[i][j]);
			// System.out.println("]");
			// }
			/** end debugging **/
			if (edgeTokenizer.hasMoreTokens())
				throw new RuntimeException(
						"There are more than 8 bit in a MONA ASCII char");

			// Convert every MONA binary character into a set of actual
			// characters
			ArrayList<Character> charSets = new ArrayList<Character>();
			for (int i = 0; i < MONALabel.length; i++) {
				// convert a char with 0s, 1s, and/or Xs to a set of characters
				char[] charSet = MONACharToCharSet(MONALabel[i], 0);
				ArrayList<Character> charArray = new ArrayList<Character>();
				for (int j = 0; j < charSet.length; j++)
					// only add printable characters
					// if (charSet[j] > 31 && charSet[j] < 127)
					charArray.add(charSet[j]);
				// add the previous set of characters to the whole set of
				// characters
				charSets.addAll(charArray);
			}

			/**
			 * The following only works if we have a total ascending order (<
			 * with no equality )according to ASCII on charSets, This is the
			 * case here due to the way we parse the MONA label and construct
			 * the char sets. It will construct transitions and label them with
			 * either range of characters of one character
			 */
			ArrayList<Transition> returnMe = new ArrayList<Transition>();
			if (!charSets.isEmpty()) { // if all the transitions has only
										// NON-ASCII chars then do not create
										// any transition
				// first char in an range
				char first = charSets.remove(0).charValue();
				// previously read char (to check if we still have an range)
				char prev = first;
				char current = first;
				for (Character c : charSets) {
					current = c.charValue();
					// this to check that we have the total order
					assert (current != prev);
					// if we are still in a range then keep going
					if (current == (prev + 1)) {
						prev = current;
						continue;
					}
					// if we finished one range then construct a transition with
					// this range (may have only one char)
					else {
						Transition t = new Transition(first, prev, to);
						returnMe.add(t);
						// start a new range
						first = prev = current;
					}
				}
				// process the last char in the array
				Transition t = new Transition(first, current, to);
				returnMe.add(t);
			}
			return returnMe;
		}