#C, <s>142</s> <s>132</s> 122 bytes 10 bytes lighter thanks to @tucuxi! b[200],k;main(c){for(;~c;isalnum(c)|c==95?k&2?:(k|=!b[c|32]++?k&1?putchar(32):0,7:2),k&4?putchar(c):0:(k&=1))c=getchar();} <s>Prints a trailing space after the last output word.</s>