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. Check your ERC721ABurnable and ERC721AQueryable, they should have imported the string library, which then will get imported to your "Free" contract as well.