Print X without X (cop's thread) This is the cop's thread of a cops-and-robbers challenge. You can view the robber's thread here
A pretty common beginner style question is to print some string, but there's a catch! You need to do it without using any of the characters in the string itself!
For this challenge, we will find out who is the best at printing X without X.  There are two threads to this, a cop's thread and a robber's thread.
In the cop's thread (this thread), users will choose a language (which we will call Y) and a string (which we will call X) and write a program in language Y which takes no input, and outputs exactly X without using any of the characters in X.  The cop will then post both X and Y without revealing the program they have written.
Robbers will select the cop's answers and write programs in language Y which take no input and output X.  They will post these &quot;cracks&quot; as answers in their thread.  A crack need only work, not to be the intended solution.
Once a cop's answer is one week old, so long as it has not been cracked, the cop may reveal their program and mark it as &quot;safe&quot;. Safe answers can no longer be cracked and are eligible for scoring.
Cops will be scored by length of X in characters with smaller scores being better.  Only safe answers are eligible for scoring.
Extra Rules
You may be as specific or precise in choosing your language as you wish.  For example you may say your language is Python, or Python 3, Python 3.9 (pre-release), or even point to a specific implementation.  Robber's solutions need only work in one implementation of the given language.  So, for example, if you say Python is your language, a robber's crack is not required to work in all versions of Python, only one.
Since command line flags count as different languages, you should indicate specific command line flags or the possibility of command line flags as part of your language.  For ease of use, I ask that you assume there are no command line flags in cases where command line flags are not mentioned.
You may choose to have your output as an error.  If your intended solution does output as an error, you must indicate this in your answer.
Find Uncracked Cops


&lt;script&gt;site = 'meta.codegolf'; postID = 5686; isAnswer = false; QUESTION_ID = 207558;&lt;/script&gt;&lt;script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'&gt;&lt;/script&gt;&lt;script&gt;jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&amp;sort=creation&amp;site='+site+'&amp;filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&amp;sort=creation&amp;site='+site+'&amp;filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('&lt;textarea&gt;').html(s).text()};function r(l){return new RegExp('&lt;pre class="snippet-code-'+l+'\\b[^&gt;]*&gt;&lt;code&gt;([\\s\\S]*?)&lt;/code&gt;&lt;/pre&gt;')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('&lt;style&gt;').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('&lt;script&gt;').text(d(j[1])))})})&lt;/script&gt;
Python 3, Score: 81, Cracked
X =  abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!&quot;#$%&amp;'*,./:;&lt;=&gt;?@[]^_`{|}~
Not terribly interesting since it has such a high score, but this should be somewhat difficult to crack...
Clarification: This is in fact a full Python 3 program, running it locally with python3 print_x_out.py produces the above output for me. Likewise, the below verifier script produces no output:
with open(&quot;print_x_out.py&quot;) as file:
    source = file.read()

output = &quot;&quot;&quot; abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!&quot;#$%&amp;'*,./:;&lt;=&gt;?@[\]^_`{|}~&quot;&quot;&quot;

for c in output:
    if c in source:
        print(f&quot;Failed verifier check for '{c}'&quot;)

Edit: Well, that was faster than expected...