#include <stdio.h>
#include <stdlib.h>
typedef void effector(int);
typedef struct transition transition;
struct transition {
int state;
effector *effect;
};
enum sigil { Letter, EndOfFile };
typedef enum sigil sigil;
sigil sigilify(int c) {
switch (c) {
case EOF: return EndOfFile;
default: return Letter;
}
}
void push (int c);
void pop (int c);
void swap (int c);
void halt (int c);
#define T(state, sigil) (((state) << 1) | sigil)
int main() {
transition state = { 0, push };
transition table[] = {
[T(0, Letter)]={ 1, push }, [T(0, EndOfFile)]={ 0, halt },
[T(1, Letter)]={ 0, swap }, [T(1, EndOfFile)]={ 0, pop },
};
for (;;) {
(state = table[T(state.state, sigilify(c))]).effect(c);
}
}
int b;
void push (int c) { b = c; }
void swap
(int c
) { putchar(c
); pop
(0); } void halt
(int c
) { exit(EXIT_SUCCESS
); }
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnR5cGVkZWYgdm9pZCBlZmZlY3RvcihpbnQpOwp0eXBlZGVmIHN0cnVjdCB0cmFuc2l0aW9uIHRyYW5zaXRpb247CnN0cnVjdCB0cmFuc2l0aW9uIHsKICBpbnQgc3RhdGU7CiAgZWZmZWN0b3IgKmVmZmVjdDsKfTsKCmVudW0gc2lnaWwgeyBMZXR0ZXIsIEVuZE9mRmlsZSB9Owp0eXBlZGVmIGVudW0gc2lnaWwgc2lnaWw7CgpzaWdpbCBzaWdpbGlmeShpbnQgYykgewogIHN3aXRjaCAoYykgewogICAgY2FzZSBFT0Y6ICByZXR1cm4gRW5kT2ZGaWxlOwogICAgZGVmYXVsdDogICByZXR1cm4gTGV0dGVyOwogIH0KfQoKdm9pZCBwdXNoICAgKGludCBjKTsKdm9pZCBwb3AgICAgKGludCBjKTsKdm9pZCBzd2FwICAgKGludCBjKTsKdm9pZCBoYWx0ICAgKGludCBjKTsKCiNkZWZpbmUgVChzdGF0ZSwgc2lnaWwpICgoKHN0YXRlKSA8PCAxKSB8IHNpZ2lsKQoKaW50IG1haW4oKSB7CiAgdHJhbnNpdGlvbiBzdGF0ZSA9IHsgMCwgcHVzaCB9OwogIHRyYW5zaXRpb24gdGFibGVbXSA9IHsKICAgIFtUKDAsIExldHRlcildPXsgMSwgcHVzaCB9LCAgICBbVCgwLCBFbmRPZkZpbGUpXT17IDAsIGhhbHQgfSwKICAgIFtUKDEsIExldHRlcildPXsgMCwgc3dhcCB9LCAgICBbVCgxLCBFbmRPZkZpbGUpXT17IDAsIHBvcCAgfSwKICB9OwoKICBmb3IgKDs7KSB7CiAgICBpbnQgYyA9IGdldGNoYXIoKTsKICAgIChzdGF0ZSA9IHRhYmxlW1Qoc3RhdGUuc3RhdGUsIHNpZ2lsaWZ5KGMpKV0pLmVmZmVjdChjKTsKICB9Cn0KCmludCBiOwoKdm9pZCBwdXNoICAgKGludCBjKSB7IGIgPSBjOyB9CnZvaWQgcG9wICAgIChpbnQgYykgeyBwdXRjaGFyKGIpOyB9CnZvaWQgc3dhcCAgIChpbnQgYykgeyBwdXRjaGFyKGMpOyBwb3AoMCk7IH0Kdm9pZCBoYWx0ICAgKGludCBjKSB7IGV4aXQoRVhJVF9TVUNDRVNTKTsgfQoK