 
 
 struct BiMap<K: Hashable, V: Hashable>: Sequence, Equatable  {
-    var dictionary: Dictionary<K,V> = [:]
-    var inverse: Dictionary<V,K> = [:]
+    var dictionary: [K:V]
+    var inverse: [V:K]
 
+    init() {
+        dictionary = [:]
+        inverse = [:]
+    }
+    
+    // waiting for visibility modifiers to keep this private
+    init(otherDictionary: [V:K], otherInverse: [K:V]) {
+        dictionary = otherInverse
+        inverse = otherDictionary
+    }
+    
     mutating func put(key: K, value: V) -> V? {
         let oldValueForKey = removeValueForKey(key)
         let oldKeyForvalue = removeKeyForValue(value)

    func generate() -> DictionaryGenerator<K,V> {
        return dictionary.generate()
    }

    
}

        return result
    }
    
    
    subscript (i: K) -> V? {
        get {
            return dictionary[i]
