package main

import (
    "fmt"
)

func main() {
    row := 0
    for {
        n, _ := fmt.Scan(&row)
        if n == 0 {
            break
        } else {
            arr := make([]int, row)
            for i := 0; i < len(arr); i++ {
				fmt.Scan(&arr[i])
			}
            process(arr)
            for i:=0; i<len(arr); i++ {
                fmt.Printf("%d ", arr[i])
            }
        }
    }
}

func process(arr []int) {
    // 记录冲突位置所在
    eve, odd := 0, 1
    n := len(arr)
    // 每次交换最后一个位置,只看最后一个值,就可以避免交换的值影响查找范围
	for odd < n && eve < n {
        if arr[n-1] % 2 == 1 {
            arr[n-1], arr[odd] = arr[odd],  arr[n-1]
            odd+=2
        } else {
            arr[n-1], arr[eve] = arr[eve],  arr[n-1]
            eve+=2
        }
    }
}

// 2个队列,接收奇数,偶数,依次放入
// func process(arr []int) {
//     odd := []int{}
// 	eve := []int{}

// 	for i := 0; i < len(arr); i++ {
// 		if arr[i]%2 == 0 {
// 			odd = append(odd, arr[i])
// 		} else {
// 			eve = append(eve, arr[i])
// 		}
// 	}

// 	k := 0
// 	i, j := 0, 0
// 	for i < len(odd) && j < len(eve) {
// 		arr[k], arr[k+1] = odd[i], eve[j]
// 		k += 2
// 		i++
// 		j++
// 	}

// 	for i < len(odd) {
// 		arr[k] = odd[i]
// 		i++
// 		k++
// 	}

// 	for j < len(eve) {
// 		arr[k] = eve[j]
// 		j++
// 		k++
// 	}
// }