     public let indices: [Int]
     
     public init(_ indices: [Int]) {
-        self.indices = indices.dropLast{ $0 == 0 }
+        if n.isFixed {
+            assert(indices.count == n.intValue)
+            self.indices = indices
+        } else {
+            self.indices = indices.dropLast{ $0 == 0 }
+        }
     }
     
     public init(_ indices: Int...) {

}

extension MultiIndex where n == _2 {
    public var tuple: (Int, Int) {
        (self[0], self[1])
    }
}

extension MultiIndex where n == _3 {
    public var triple: (Int, Int, Int) {
        (self[0], self[1], self[2])
    }

    }
    
    public subscript(_ i: Int) -> Int {
        if n.isFixed {
            return indices[i]
        } else {
            return indices.indices.contains(i) ? indices[i] : 0
        }
    }
    
    public static var zero: MultiIndex<n> {
