#include <stdio.h>
#define DECLARE() int state = 0
#define BEGIN switch (state) { \
case 0:
#define YIELD(val) do { \
state = __LINE__; \
return val; \
case __LINE__: \
; \
} while (0)
#define END }
char* next()
{
static DECLARE();
BEGIN;
YIELD("мама");
YIELD("мыла");
YIELD("лалку");
END;
return 0;
}
char* kakoi()
{
static DECLARE();
static int i;
BEGIN;
YIELD("Какой ");
YIELD("yield ");
for (i=0;i<3;++i)
YIELD(")");
END;
return 0;
}
int main()
{
char* str;
while (str = next()) {
}
while (str = kakoi()) {
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIERFQ0xBUkUoKSBpbnQgc3RhdGUgPSAwCgojZGVmaW5lIEJFR0lOIHN3aXRjaCAoc3RhdGUpIHsgXAogICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOgoKI2RlZmluZSBZSUVMRCh2YWwpIGRvIHsgXAogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IF9fTElORV9fOyAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDsgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICBjYXNlIF9fTElORV9fOiAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICA7ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKDApCgojZGVmaW5lIEVORCB9CgpjaGFyKiBuZXh0KCkKewoJc3RhdGljIERFQ0xBUkUoKTsKICAgIEJFR0lOOwogICAgICAgIFlJRUxEKCLQvNCw0LzQsCIpOwogICAgICAgIFlJRUxEKCLQvNGL0LvQsCIpOwogICAgICAgIFlJRUxEKCLQu9Cw0LvQutGDIik7CiAgICBFTkQ7CiAgICByZXR1cm4gMDsKfQpjaGFyKiBrYWtvaSgpCnsKCXN0YXRpYyBERUNMQVJFKCk7CglzdGF0aWMgaW50IGk7CiAgICBCRUdJTjsKICAgICAgICBZSUVMRCgi0JrQsNC60L7QuSAiKTsKICAgICAgICBZSUVMRCgieWllbGQgIik7CiAgICAgICAgZm9yIChpPTA7aTwzOysraSkKICAgICAgICAgICAgWUlFTEQoIikiKTsKICAgIEVORDsKICAgIHJldHVybiAwOwp9CmludCBtYWluKCkKewoJY2hhciogc3RyOwogICAgd2hpbGUgKHN0ciA9IG5leHQoKSkgewogICAgICAgIHByaW50ZigiJXMgIiwgc3RyKTsKICAgIH0KICAgIHB1dGNoYXIoJ1xuJyk7CiAgICB3aGlsZSAoc3RyID0ga2Frb2koKSkgewogICAgICAgIHByaW50ZigiJXMiLCBzdHIpOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQ==