#include <bits/stdc++.h>
using namespace std;
class Node{
public :
int data;
Node* next;
Node( int d) {
data = d;
next = NULL ;
}
} ;
void insert( Node* & head, int data) {
if ( head == NULL ) {
head = new Node( data) ;
return ;
}
Node* temp = head;
while ( temp- > next ! = NULL ) {
temp = temp- > next;
}
temp- > next = new Node( data) ;
}
void print( Node* head) {
while ( head! = NULL ) {
cout << head- > data<< " " ;
head = head- > next;
}
cout << endl;
}
void evenAfterOdd( Node* & head) {
// To check the approach I took just read the comments at the end of the prog
Node* evenLast = NULL , * evenFirst = NULL , * oddLast = NULL ;
Node* temp = head;
while ( temp! = NULL ) {
if ( temp- > data% 2 == 0 ) {
if ( evenFirst == NULL ) {
evenFirst = temp;
evenLast = temp;
} else {
evenLast- > next = temp;
evenLast = temp;
}
} else {
if ( oddLast == NULL ) {
head = temp;
oddLast = temp;
} else {
oddLast- > next = temp;
oddLast = temp;
}
}
temp = temp- > next;
}
oddLast- > next = evenFirst;
evenLast- > next = NULL ;
}
int main( ) {
Node* head = NULL ;
int n;
cin >> n;
for ( int i = 0 ; i < n; i++ ) {
int temp;
cin >> temp;
insert( head,temp) ;
}
evenAfterOdd( head) ;
print( head) ;
return 0 ;
}
// Instead of the above approach I will take 2 node pointers
// One of them represents the last even node encountered and odd resp
// We will also store the first of the Even list as we will do
// oddLast->next = evenFirst
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBOb2RlewoJcHVibGljOgoJaW50IGRhdGE7CglOb2RlKiBuZXh0OwoJCglOb2RlKGludCBkKXsKCQlkYXRhID0gZDsKCQluZXh0ID0gTlVMTDsKCX0KfTsKCnZvaWQgaW5zZXJ0KE5vZGUqJiBoZWFkLCBpbnQgZGF0YSl7CgkKCWlmKGhlYWQgPT0gTlVMTCl7CgkJaGVhZCA9IG5ldyBOb2RlKGRhdGEpOwoJCXJldHVybjsKCX0KCQoJTm9kZSogdGVtcCA9IGhlYWQ7Cgl3aGlsZSh0ZW1wLT5uZXh0ICE9IE5VTEwpewoJCXRlbXAgPSB0ZW1wLT5uZXh0OwoJfQoJdGVtcC0+bmV4dCA9IG5ldyBOb2RlKGRhdGEpOwoJCn0KCgp2b2lkIHByaW50KE5vZGUqIGhlYWQpewoJd2hpbGUoaGVhZCE9TlVMTCl7CgkJY291dDw8aGVhZC0+ZGF0YTw8IiAiOwoJCWhlYWQgPSBoZWFkLT5uZXh0OwoJfQoJY291dDw8ZW5kbDsKfQoKdm9pZCBldmVuQWZ0ZXJPZGQoTm9kZSomIGhlYWQpewoJLy8gVG8gY2hlY2sgdGhlIGFwcHJvYWNoIEkgdG9vayBqdXN0IHJlYWQgdGhlIGNvbW1lbnRzIGF0IHRoZSBlbmQgb2YgdGhlIHByb2cKCQoJTm9kZSogZXZlbkxhc3QgPSBOVUxMLCAqZXZlbkZpcnN0ID0gTlVMTCwgKm9kZExhc3QgPSBOVUxMOwoJCglOb2RlKiB0ZW1wID0gaGVhZDsKCQoJd2hpbGUodGVtcCE9TlVMTCl7CgkJCgkJaWYodGVtcC0+ZGF0YSUyID09IDApewoJCQlpZihldmVuRmlyc3QgPT0gTlVMTCl7CgkJCQlldmVuRmlyc3QgPSB0ZW1wOwoJCQkJZXZlbkxhc3QgPSB0ZW1wOwoJCQl9ZWxzZXsKCQkJCWV2ZW5MYXN0LT5uZXh0ID0gdGVtcDsKCQkJCWV2ZW5MYXN0ID0gdGVtcDsKCQkJfQoJCX1lbHNlewoJCQlpZihvZGRMYXN0ID09IE5VTEwpewoJCQkJaGVhZCA9IHRlbXA7CgkJCQlvZGRMYXN0ID0gdGVtcDsKCQkJfWVsc2V7CgkJCQlvZGRMYXN0LT5uZXh0ID0gdGVtcDsKCQkJCW9kZExhc3QgPSB0ZW1wOwoJCQl9CgkJfQoJCXRlbXAgPSB0ZW1wLT5uZXh0OwoJfQoJCglvZGRMYXN0LT5uZXh0ID0gZXZlbkZpcnN0OwoJZXZlbkxhc3QtPm5leHQgPSBOVUxMOwp9CgppbnQgbWFpbigpIHsKCU5vZGUqIGhlYWQgPSBOVUxMOwoJaW50IG47CgljaW4+Pm47Cglmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKXsKCQlpbnQgdGVtcDsKCQljaW4+PnRlbXA7CgkJaW5zZXJ0KGhlYWQsdGVtcCk7Cgl9CglldmVuQWZ0ZXJPZGQoaGVhZCk7CglwcmludChoZWFkKTsKCXJldHVybiAwOwp9CgoJCgkvLyBJbnN0ZWFkIG9mIHRoZSBhYm92ZSBhcHByb2FjaCBJIHdpbGwgdGFrZSAyIG5vZGUgcG9pbnRlcnMKCS8vIE9uZSBvZiB0aGVtIHJlcHJlc2VudHMgdGhlIGxhc3QgZXZlbiBub2RlIGVuY291bnRlcmVkIGFuZCBvZGQgcmVzcAoJLy8gV2Ugd2lsbCBhbHNvIHN0b3JlIHRoZSBmaXJzdCBvZiB0aGUgRXZlbiBsaXN0IGFzIHdlIHdpbGwgZG8KCS8vIG9kZExhc3QtPm5leHQgPSBldmVuRmlyc3Q=