contract MultiOwnable {
    address public root;
    mapping (address => address) public owners; // owner => parent of owner
    
    /**
    * @dev The Ownable constructor sets the original `owner` of the contract to the sender
    * account.
    */
    function MultiOwnable() public {
        root= msg.sender;
        owners[root]= root;
    }
    
    /**
    * @dev Throws if called by any account other than the owner.
    */
    modifier onlyOwner() {
        require(owners[msg.sender] != 0);
        _;
    }
    
    /**
    * @dev Adding new owners
    */
    function newOwner(address _owner) onlyOwner public returns (bool) {
        require(_owner != 0);
        owners[_owner]= msg.sender;
        return true;
    }
    
    /**
     * @dev Deleting owners
     */
    function deleteOwner(address _owner) onlyOwner public returns (bool) {
        require(owners[_owner] == msg.sender || (owners[_owner] != 0 && msg.sender == root));
        owners[_owner]= 0;
        return true;
    }
}
/**
 * @title MultiOwnable
 */
function MultiOwnable() public {
    root= msg.sender;
    owners[root]= root;
}

/**
 * @dev The Ownable constructor sets the original `owner` of the contract to the sender
 * account.
 */