Burn to mint between contracts


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);
    function incrementLevel() internal {
    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) {
      VrsToken vt;

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();
        _safeMint(to, tokenId);