Burn to mint between contracts

Hi,

There is an option to burn tokens from one contract and in same function to mint in another contract?
I try something like that, but not work:

pragma solidity ^0.8.10;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/Counters.sol";


contract VrsCoin is  ERC20  {

  mapping(address => uint) public userLevel;
  constructor() ERC20("vrsCoin", "VRS") {
        _mint(msg.sender, 1000000 * 10 ** decimals());
    }
    function makeBurn(uint256 amount) public {
      _burn(msg.sender, amount);
      incrementLevel();
    }
    function incrementLevel() internal {
      userLevel[msg.sender]++;
    }
    function getMyLevel() public view returns(uint){
      return userLevel[msg.sender];
    }
    function getAddrLevel(address addr) public view returns(uint){
      return userLevel[addr];
    }
    function burnToMint() public view returns(uint) {
      _burn(msg.sender,1000000);
      VrsToken vt;
      vt.safeMint(msg.sender);
    }
}

contract VrsToken is ERC721, Ownable {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;

    constructor() ERC721("vrsToken", "VTK") {}


    function safeMint(address to) public onlyOwner {
        uint256 tokenId = _tokenIdCounter.current();
        _tokenIdCounter.increment();
        _safeMint(to, tokenId);
    }
}