#include <stdio.h>
#include <string.h>
#include <limits.h>
#define ERROR INT_MAX
int maxint(a, b) {
return (a>b)?a:b;
}
struct pack {
char *s;
int depth;
};
struct pack in(char *s, int depth, int max);
struct pack out(char *s, int depth, int max) {
struct pack tmp;
if((*s)=='\0') {
tmp.s=NULL;tmp.depth=maxint(max, depth);
return tmp;
}
tmp.s=NULL;tmp.depth=ERROR;
return tmp;
}
tmp = in(s+1, depth+1, max);
return out(tmp.s, depth, maxint(max, tmp.depth));
}
return out(s+1, depth, max);
}
struct pack in(char *s, int depth, int max) {
struct pack tmp;
if((*s)=='\0') {
tmp.s=s;tmp.depth=ERROR;
return tmp;
}
tmp.s=s+1;tmp.depth=maxint(max, depth);
return tmp;
}
struct pack tmp = in(s+1, depth+1, max);
return in(tmp.s, depth, maxint(max, tmp.depth));
}
return in(s+1, depth, max);
}
int main(void) {
char a[256];
struct pack tmp;
int i = 4;
while(i--) {
tmp = out(a, 0, 0);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGxpbWl0cy5oPgoKI2RlZmluZSBFUlJPUiBJTlRfTUFYCgppbnQgbWF4aW50KGEsIGIpIHsKCXJldHVybiAoYT5iKT9hOmI7Cn0KCnN0cnVjdCBwYWNrIHsKCWNoYXIgKnM7CglpbnQgZGVwdGg7Cn07CgpzdHJ1Y3QgcGFjayBpbihjaGFyICpzLCBpbnQgZGVwdGgsIGludCBtYXgpOwoKc3RydWN0IHBhY2sgb3V0KGNoYXIgKnMsIGludCBkZXB0aCwgaW50IG1heCkgewoJc3RydWN0IHBhY2sgdG1wOwoJaWYoKCpzKT09J1wwJykgewoJCXRtcC5zPU5VTEw7dG1wLmRlcHRoPW1heGludChtYXgsIGRlcHRoKTsKCQlyZXR1cm4gdG1wOwoJfQoJaWYoc3RyY2hyKCIpXX0iLCAqcykhPU5VTEwpIHsKCQl0bXAucz1OVUxMO3RtcC5kZXB0aD1FUlJPUjsKCQlyZXR1cm4gdG1wOwoJfQoJaWYoc3RyY2hyKCIoe1siLCAqcykhPU5VTEwpIHsKCQl0bXAgPSBpbihzKzEsIGRlcHRoKzEsIG1heCk7CgkJcmV0dXJuIG91dCh0bXAucywgZGVwdGgsIG1heGludChtYXgsIHRtcC5kZXB0aCkpOwoJfQoJcmV0dXJuIG91dChzKzEsIGRlcHRoLCBtYXgpOwp9CgpzdHJ1Y3QgcGFjayBpbihjaGFyICpzLCBpbnQgZGVwdGgsIGludCBtYXgpIHsKCXN0cnVjdCBwYWNrIHRtcDsKCWlmKCgqcyk9PSdcMCcpIHsKCQl0bXAucz1zO3RtcC5kZXB0aD1FUlJPUjsKCQlyZXR1cm4gdG1wOwoJfQoJaWYoc3RyY2hyKCIpXX0iLCAqcykhPU5VTEwpIHsKCQl0bXAucz1zKzE7dG1wLmRlcHRoPW1heGludChtYXgsIGRlcHRoKTsKCQlyZXR1cm4gdG1wOwoJfQoJaWYoc3RyY2hyKCIoW3siLCAqcykhPU5VTEwpIHsKCQlzdHJ1Y3QgcGFjayB0bXAgPSBpbihzKzEsIGRlcHRoKzEsIG1heCk7CgkJcmV0dXJuIGluKHRtcC5zLCBkZXB0aCwgbWF4aW50KG1heCwgdG1wLmRlcHRoKSk7Cgl9CglyZXR1cm4gaW4ocysxLCBkZXB0aCwgbWF4KTsKfQoKaW50IG1haW4odm9pZCkgewoJY2hhciBhWzI1Nl07CglzdHJ1Y3QgcGFjayB0bXA7CglpbnQgaSA9IDQ7Cgl3aGlsZShpLS0pIHsKCQlmZ2V0cyhhLCAyNTYsIHN0ZGluKTsKCQl0bXAgPSBvdXQoYSwgMCwgMCk7CgkJcHJpbnRmKCIlZFxuIiwgdG1wLmRlcHRoKTsKCX0KCXJldHVybiAwOwp9Cgo=