Compute all close strings quickly Input
A string S of length between 10 and 16 inclusive. The characters are taken from the 95 printable ASCII characters, byte values 32 (0x20) to 126 (0x7E) (  to ~)
Output
Your code must compute and output all strings within Levenshtein distance 2 of S. You can have duplicates as long as you also have all the different strings and the output can be in any order.
Scoring
I will generate a set of 5 strings of random lengths between 10 and 16, each consisting of a selection of printable ASCII characters. Each answer will be tested on the same set of strings, and your score is the total runtime over all 5, when run on my computer (spec details below). This means you need to give me simple and complete instructions on how to compile and run your code in Linux.
Example
Input string obenquillo. Using my test code the first output string is 8benquifllo and the last is o^be9quillo.  There are 1871386 different strings in the output.
My PC
I have an AMD Ryzen 5 3400G running Ubuntu 20.04.
Winning
The fastest code wins.
League table

My test Python code. 14.00s
C++ by the default. 0.15s. Bounty awarded.
C by ngn. 0.07s
Python by ReedsShorts sped up by ovs. 10.5s
Rust by wizzwizz4 . 2.45s
C

cat &gt;a.c &lt;&lt;.
#define _(a...) {return({a;});}
#define F(i,x,n,a...) for(I i=(x),n_=(n);i&lt;n_;i++){a;}
#define i(a...) F(i,0,a)
#define j(a...) F(j,0,a)
#define k(a...) F(k,0,a)
#define I(a...) F(i,a)
#define S static
#define O const
#define mc __builtin_memcpy
#define sl __builtin_strlen
typedef void V;typedef char C;typedef int I;

#include&lt;sys/syscall.h&gt;
#define M1(x) #x
#define M2(x) M1(x)
#define h(x,a...) &quot;.globl &quot;#x&quot;;&quot;#x&quot;:&quot;a&quot;mov $&quot;M2(SYS_##x)&quot;,%rax;syscall;ret;&quot;
asm(&quot;.globl _start;_start:pop %rdi;mov %rsp,%rsi;call main;&quot;h(write)h(exit));I write(I,C*,I);V exit(I);
V*memcpy(V*x,O V*y,I n)_(C*a=x;O C*b=y;i(n,a[i]=b[i])a)I strlen(O C*s)_(I r=0;while(*s++)r++;r)

S O C A0=32,A1=126+1,AN=A1-A0;S C o0[1&lt;&lt;20],*o=o0;
S V rpt(C*a,I n,I m){m*=n;while(2*n&lt;m){mc(a+n,a,n);n+=n;}mc(a+n,a,m-n);}
S I fd(C*s,I n,I p)_(i(p,j(n,*o++=s[j+(i&lt;=j)]))p)
S I fc(C*s,I n,I p)_(mc(o,s,n+1);rpt(o,n+1,p*AN);I(A0,A1,j(p,o[j]=i;o+=n+1))p)
S I fi(C*s,I n,I p)_(p++;i(p,j(n+2,o[i*(n+2)+j]=s[j-(i&lt;j)]))rpt(o,p*(n+2),AN);I(A0,A1,j(p,o[j]=i;o+=n+2))p)
I main(I c,C**v)_(S C s[32];I n=sl(v[1]);mc(s,v[1],n);s[n]=10;S typeof(fd)*f[]={fd,fc,fi};
 i(3,o=o0;I g=f[i](s,n,n);j(g*(i?AN:1),C*b=o;k(3,f[k](o0+(n+i)*j,n+i-1,j%g))write(1,b,o-b);o=b))
 exit(0);0)
.
clang -O3 -march=native -nostdlib -ffreestanding a.c &amp;&amp; strip a.out -R .comment
time ./a.out abcdefghijklmnop &gt;/dev/null

Try it online!
for the record, here's why this answer didn't win the bounty: https://chat.stackexchange.com/transcript/message/56646474#56646474