# C, 673 bytes One liner: u[256][256]={0};char Y[2000],X[500]="u[256][256]={0};char Y[2000],X[500]=\"@\";main(){int n,m,i;char*a=X,*b=X,*y=Y;for(;*a!=64;*y=*a,y++,a++);for(;*b;*y=*b,y++,b++)if(*b==34){*y=92;y++;}for(a++;*a;*y=*a,y++,a++);*y=0;for(a=Y;*a;a++)u[*a][*(a+1)]++;m='u';do{putchar(m);for(n=i=0;i<256;i++)n+=u[m][i];n=rand()%n;for(i=0;i<256;i++){if(n<u[m][i])break;n-=u[m][i];}m=i;}while(m);}";main(){int n,m,i;char*a=X,*b=X,*y=Y;for(;*a!=64;*y=*a,y++,a++);for(;*b;*y=*b,y++,b++)if(*b==34){*y=92;y++;}for(a++;*a;*y=*a,y++,a++);*y=0;for(a=Y;*a;a++)u[*a][*(a+1)]++;m='u';do{putchar(m);for(n=i=0;i<256;i++)n+=u[m][i];n=rand()%n;for(i=0;i<256;i++){if(n<u[m][i])break;n-=u[m][i];}m=i;}while(m);} New lines and whitespace added for legibility: 01 u[256][256]={0}; 02 char Y[2000], 03 X[500]="u[256][256]={0};char Y[2000],X[500]=\"@\";main(){int n,m,i;char*a=X,*b=X,*y=Y;for(;*a!=64;*y=*a,y++,a++);for(;*b;*y=*b,y++,b++)if(*b==34){*y=92;y++;}for(a++;*a;*y=*a,y++,a++);*y=0;for(a=Y;*a;a++)u[*a][*(a+1)]++;m='u';do{putchar(m);for(n=i=0;i<256;i++)n+=u[m][i];n=rand()%n;for(i=0;i<256;i++){if(n<u[m][i])break;n-=u[m][i];}m=i;}while(m);}"; 04 main(){ 05 int n,m,i; 06 char*a=X,*b=X,*y=Y; 07 for(;*a!=64;*y=*a,y++,a++); 08 for(;*b;*y=*b,y++,b++)if(*b==34){*y=92;y++;} 09 for(a++;*a;*y=*a,y++,a++);*y=0; 10 for(a=Y;*a;a++)u[*a][*(a+1)]++; 11 m='u'; 12 do{ putchar(m); 13 for(n=i=0;i<256;i++)n+=u[m][i]; 14 n=rand()%n; 15 for(i=0;i<256;i++){ 16 if(n<u[m][i])break; 17 n-=u[m][i]; 18 } m=i; 19 }while(m); 20 } Line 3 contains the complete source code with an `@` symbol where it would repeat. Lines 6 through 9 copy the string X into Y so that Y contains an identical string to the source code, by expanding '`@`' and escaping quotes. Line 10 counts up pairs of symbols as they appear in the string for the Markov model. Line 11 provides the Markov model with the starting character. Lines 12 through 19 display successive symbols as it follows the Markov model, randomly choosing the next symbol with probability based on the number of pair occurrences. Edit: Cut down 34 bytes to go from 707 to 673.