#include <stdio.h>
#include <stdlib.h>
typedef struct tagStack{
int esp;
int ebp;
int* ptr;
int ecx;
int* buf;
} STACK,*PSTACK;
#define esp s->esp
#define ebp s->ebp
#define ptr s->ptr
#define ecx s->ecx
#define buf s->buf
#define pop(x) x=ptr[--esp]
#define push(x) ptr[esp++]=x
#define wellbuf 10
#define label0 0
#define label1 1
#define label2 2
#define label3 3
PSTACK CreateStack(int n,int k){
PSTACK s
=(PSTACK
) malloc(sizeof(STACK
)); ptr
=(int*)malloc(wellbuf
*k
*sizeof(int)); buf
=(int*)malloc(k
*sizeof(int)); esp=ebp=ecx=0;
push(n);
push(k);
push(label3);
push(label0);
return s;
}
int* dupCombination(PSTACK s){
int a;
d_fin:
while(1)
switch(pop(a)){
case label0:
push(ebp);
ebp=esp;
esp+=1;
if(ptr[ebp-3]==1){
buf[ecx]=ptr[ebp-4];
push(label1);
return buf;
case label1:
esp=ebp;
pop(ebp);
goto d_fin;
}
for(ptr[ebp]=0;ptr[ebp]<=ptr[ebp-4];++ptr[ebp]){
buf[ecx++]=ptr[ebp];
push(ptr[ebp-4]-ptr[ebp]);
push(ptr[ebp-3]-1);
push(label2);
push(label0);
goto d_fin;
case label2:
--ecx;
}
esp=ebp;
pop(ebp);
goto d_fin;
case label3:
push(label3);
return NULL;
}
}
int main(){
PSTACK s=CreateStack(8,4);
int i,*p;
while(p=dupCombination(s)){
for(i=0;i<4;++i)
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgc3RydWN0IHRhZ1N0YWNrewogICAgaW50IGVzcDsKICAgIGludCBlYnA7CiAgICBpbnQqIHB0cjsKICAgIGludCBlY3g7CiAgICBpbnQqIGJ1ZjsKfSBTVEFDSywqUFNUQUNLOwoKI2RlZmluZSBlc3Agcy0+ZXNwCiNkZWZpbmUgZWJwIHMtPmVicAojZGVmaW5lIHB0ciBzLT5wdHIKI2RlZmluZSBlY3ggcy0+ZWN4CiNkZWZpbmUgYnVmIHMtPmJ1ZgojZGVmaW5lIHBvcCh4KSB4PXB0clstLWVzcF0KI2RlZmluZSBwdXNoKHgpIHB0cltlc3ArK109eAojZGVmaW5lIHdlbGxidWYgMTAKI2RlZmluZSBsYWJlbDAgMAojZGVmaW5lIGxhYmVsMSAxCiNkZWZpbmUgbGFiZWwyIDIKI2RlZmluZSBsYWJlbDMgMwoKUFNUQUNLIENyZWF0ZVN0YWNrKGludCBuLGludCBrKXsKICAgIFBTVEFDSyBzPShQU1RBQ0spIG1hbGxvYyhzaXplb2YoU1RBQ0spKTsKICAgIHB0cj0oaW50KiltYWxsb2Mod2VsbGJ1ZiprKnNpemVvZihpbnQpKTsKICAgIGJ1Zj0oaW50KiltYWxsb2MoaypzaXplb2YoaW50KSk7CiAgICBlc3A9ZWJwPWVjeD0wOwogICAgcHVzaChuKTsKICAgIHB1c2goayk7CiAgICBwdXNoKGxhYmVsMyk7CiAgICBwdXNoKGxhYmVsMCk7CiAgICByZXR1cm4gczsKfQoKaW50KiBkdXBDb21iaW5hdGlvbihQU1RBQ0sgcyl7CiAgICBpbnQgYTsKZF9maW46CiAgICB3aGlsZSgxKQogICAgc3dpdGNoKHBvcChhKSl7CiAgICBjYXNlIGxhYmVsMDoKICAgICAgICBwdXNoKGVicCk7CiAgICAgICAgZWJwPWVzcDsKICAgICAgICBlc3ArPTE7CiAgICAgICAgaWYocHRyW2VicC0zXT09MSl7CiAgICAgICAgICAgIGJ1ZltlY3hdPXB0cltlYnAtNF07CiAgICAgICAgICAgIHB1c2gobGFiZWwxKTsKICAgICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgIGNhc2UgbGFiZWwxOgogICAgICAgICAgICBlc3A9ZWJwOwogICAgICAgICAgICBwb3AoZWJwKTsKICAgICAgICAgICAgZ290byBkX2ZpbjsKICAgICAgICB9CiAgICAgICAgZm9yKHB0cltlYnBdPTA7cHRyW2VicF08PXB0cltlYnAtNF07KytwdHJbZWJwXSl7CiAgICAgICAgICAgIGJ1ZltlY3grK109cHRyW2VicF07CiAgICAgICAgICAgIHB1c2gocHRyW2VicC00XS1wdHJbZWJwXSk7CiAgICAgICAgICAgIHB1c2gocHRyW2VicC0zXS0xKTsKICAgICAgICAgICAgcHVzaChsYWJlbDIpOwogICAgICAgICAgICBwdXNoKGxhYmVsMCk7CiAgICAgICAgICAgIGdvdG8gZF9maW47CiAgICBjYXNlIGxhYmVsMjoKICAgICAgICAgICAgLS1lY3g7CiAgICAgICAgfQogICAgICAgIGVzcD1lYnA7CiAgICAgICAgcG9wKGVicCk7CiAgICAgICAgZ290byBkX2ZpbjsKICAgIGNhc2UgbGFiZWwzOgogICAgICAgIHB1c2gobGFiZWwzKTsKICAgICAgICByZXR1cm4gTlVMTDsKICAgIH0KfQoKaW50IG1haW4oKXsKICAgIFBTVEFDSyBzPUNyZWF0ZVN0YWNrKDgsNCk7CiAgICBpbnQgaSwqcDsKICAgIHdoaWxlKHA9ZHVwQ29tYmluYXRpb24ocykpewogICAgICAgIGZvcihpPTA7aTw0OysraSkKICAgICAgICAgICAgcHJpbnRmKCIlZCAiLHBbaV0pOwogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgIHJldHVybiAwOwp9