#include <stdio.h>
typedef struct Node {
int t;
struct Node *n;
} N;
void plist(N* a) {
while (a) {
a = a->n;
}
}
N* rev(N* a) {
if (a->n == NULL) return a;
N* head = rev(a->n);
a->n->n = a;
return head;
}
N* reverse(N* a) {
N* head = rev(a);
a->n = NULL;
return head;
}
int main(void) {
a->t = 1; a->n = b;
b->t = 2; b->n = c;
c->t = 3; c->n = d;
d->t = 4; d->n = e;
e->t = 5; e->n = NULL;
plist(a);
N* x = reverse(a);
plist(x);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp0eXBlZGVmIHN0cnVjdCBOb2RlIHsKICAgIGludCB0OwogICAgc3RydWN0IE5vZGUgKm47Cn0gTjsKCnZvaWQgcGxpc3QoTiogYSkgewoJd2hpbGUgKGEpIHsKCQlwcmludGYoIiVkICIsIGEtPnQpOwoJCWEgPSBhLT5uOwoJfQoJcHJpbnRmKCJcbiIpOwp9CgoKTiogcmV2KE4qIGEpIHsKCWlmIChhLT5uID09IE5VTEwpIHJldHVybiBhOwoJTiogaGVhZCA9IHJldihhLT5uKTsKCWEtPm4tPm4gPSBhOwoJcmV0dXJuIGhlYWQ7Cn0KCk4qIHJldmVyc2UoTiogYSkgewoJTiogaGVhZCA9IHJldihhKTsKCWEtPm4gPSBOVUxMOwoJcmV0dXJuIGhlYWQ7Cn0KCmludCBtYWluKHZvaWQpIHsKCU4gKmEgPSBtYWxsb2Moc2l6ZW9mKE4pKTsKCU4gKmIgPSBtYWxsb2Moc2l6ZW9mKE4pKTsKCU4gKmMgPSBtYWxsb2Moc2l6ZW9mKE4pKTsKCU4gKmQgPSBtYWxsb2Moc2l6ZW9mKE4pKTsKCU4gKmUgPSBtYWxsb2Moc2l6ZW9mKE4pKTsKCWEtPnQgPSAxOyBhLT5uID0gYjsKCWItPnQgPSAyOyBiLT5uID0gYzsKCWMtPnQgPSAzOyBjLT5uID0gZDsKCWQtPnQgPSA0OyBkLT5uID0gZTsKCWUtPnQgPSA1OyBlLT5uID0gTlVMTDsKCXBsaXN0KGEpOwogICAgTiogeCA9IHJldmVyc2UoYSk7CglwbGlzdCh4KTsKCWZyZWUoYSk7CglmcmVlKGIpOwoJZnJlZShjKTsKCWZyZWUoZCk7CglmcmVlKGUpOwoJcmV0dXJuIDA7Cn0K