Hmmmmmmmmm...Im confused

Hello guys I was wondering why using Strings for uint256 still works in my contract even though I didnt import the Strings library from Openzeppelin.

On remix it gives me the error DeclarationError: Identifier not found or not unique and it wont let me compile unless I import Strings.sol = but when I deployed it from vs code, I got no errors and it worked just fine.

pragma solidity >=0.8.9 <0.9.0;

import "erc721a/contracts/extensions/ERC721ABurnable.sol";
import 'erc721a/contracts/extensions/ERC721AQueryable.sol';
import '@openzeppelin/contracts/access/Ownable.sol';
import '@openzeppelin/contracts/utils/cryptography/MerkleProof.sol';

contract Free is ERC721ABurnable, ERC721AQueryable, Ownable{
  using Strings for uint256;

and this is where its being used

function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId), 'ERC721Metadata: URI query for nonexistent token');

    if (isRevealed == false) {
      return hiddenMetadata;
    }

    string memory baseURI = _baseURI();
    return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _tokenId.toString(), ".json")) : '';
  }

Can anyone help me understand why I am able to do this without importing the library. I am big nooba and would appreciate the help. Excuse my writing guys England is not my first language. Much love

A standard ERC721.sol file from openzeppelin imports Strings library. https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC721/ERC721.sol#L11. Check your ERC721ABurnable and ERC721AQueryable, they should have imported the string library, which then will get imported to your "Free" contract as well.