diff --git a/regexp.py b/regexp.py
--- a/regexp.py
+++ b/regexp.py
@@ -419,15 +419,14 @@ class RegexpDFA:
 
 		combined_alphabet = set(self.alphabet_index.keys()) | set(alphabet_index.keys())
 		combined_index = {c: i for (i, c) in enumerate(sorted(combined_alphabet))}
-		conversion_index = {v: combined_index[k] for (k, v) in self.alphabet_index.items()}
+		conversion_index = {combined_index[k]: v for (k, v) in self.alphabet_index.items()}
 		n2 = len(combined_alphabet)
 
-		rules = []
-		for i in range(0, len(self.rules), n1):
-			row = ([m]*n2)
-			for (j, st) in enumerate(self.rules[i:i+n1]):
-				row[conversion_index[j]] = st
-			rules.extend(row)
+		rules = [
+			self.rules[i*n1 + conversion_index[j]]
+			if j in conversion_index else m
+			for i in range(m) for j in range(n2)
+		]
 		rules.extend([m]*n2)
 
 		return RegexpDFA(rules, self.end_states, combined_index).reduce().normalize()
diff --git a/src/regexp.rs b/src/regexp.rs
--- a/src/regexp.rs
+++ b/src/regexp.rs
@@ -298,18 +298,17 @@ impl RegexpDFA {
 		let mut combined_vec = Vec::from_iter(combined_alphabet.into_iter());
 		combined_vec.sort();
 		let combined_index = HashMap::from_iter(combined_vec.iter().enumerate().map(|(i, c)| (*c, i)));
-		let conversion_index: HashMap<usize, usize> = HashMap::from_iter(self.alphabet_index.iter().map(|(k, v)| (*v, combined_index[k])));
+		let conversion_index: HashMap<usize, usize> = HashMap::from_iter(self.alphabet_index.iter().map(|(k, v)| (combined_index[k], *v)));
 		let n2 = combined_vec.len();
 
-		let mut rules = vec![];
-		for i in 0..m {
-			let mut row = vec![m;n2];
-			for (j, st) in self.rules[i*n1..(i+1)*n1].iter().enumerate() {
-				row[conversion_index[&j]] = *st;
+		let rules: Vec<usize> = (0..m*n2).map(
+			|i| {
+				let (j, k) = (i/n2, i%n2);
+				return if conversion_index.contains_key(&k) {
+					self.rules[j*n1 + conversion_index[&k]]
+				} else {m};
 			}
-			rules.append(&mut row);
-		}
-		rules.append(&mut vec![m;n2]);
+		).chain(std::iter::repeat(m).take(n2)).collect();
 
 		return RegexpDFA{rules, end_states: self.end_states.clone(), alphabet_index: combined_index}.reduce().normalize();
 	}