contract IncognitoSpecialEditions is ERC721, ERC721Enumerable, ERC721URIStorage, Ownable {
  constructor() ERC721('Incognito Special Editions', 'ICON-S') {}

  function safeMint(
    address to,
    uint256 tokenId,
    string memory uri
  ) public onlyOwner {
    _safeMint(to, tokenId);
    _setTokenURI(tokenId, uri);
  }

  function setTokenURI(uint256 tokenId, string memory uri) external onlyOwner {
    _setTokenURI(tokenId, uri);
  }

  // Overrides for ERC721Enumerable and ERC721URIStorage
  function _beforeTokenTransfer(
    address from,
    address to,
    uint256 tokenId
  ) internal override(ERC721, ERC721Enumerable) {
    super._beforeTokenTransfer(from, to, tokenId);
  }

  function _burn(uint256 tokenId) internal override(ERC721, ERC721URIStorage) {
    super._burn(tokenId);
  }

  function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) {
    return super.tokenURI(tokenId);
  }

  function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) {
    return super.supportsInterface(interfaceId);
  }
}
function _beforeTokenTransfer(
  address from,
  address to,
  uint256 tokenId
) internal override(ERC721, ERC721Enumerable) {
  super._beforeTokenTransfer(from, to, tokenId);
}

// Overrides for ERC721Enumerable and ERC721URIStorage