#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main(){
	int N;
	cin >> N;
	vector<int> a(N);
	for(int i=0 ; i < N ; i++ ){
		cin >> a[i];
	}
	
	int f[2] = {0};
	vector<int> v;
	for(int i=0 ; i < N ; i++ ){
		if( a[i] >= 2 ){
			v.push_back( a[i] );
		}else{
			f[a[i]]++;
		}
	}
	// 0 が奇数個のみのケース
	if( f[0] == N && v.size() == 0 ){
		for(int i=0 ; i < f[0] ; i++ ){
			cout << 0 << endl;
		}
		return 0;
	}
	
	sort( v.begin() , v.end() );
	if( v.size() >= 2 && v[v.size()-2] == 2 && v[v.size()-1] == 3 ){
		swap(v[v.size()-2],v[v.size()-1]);
	}
	
	if( f[0] % 2 == 1 && f[1] == 0 ){
		int m = *min_element(v.begin(),v.end());
		for(int i=0 ; i < v.size() ; i++ ){
			if( v[i] == m ){
				v[i] = -1;
				break;
			}
		}
		int x = m;
		for( ; f[0] ; f[0]-- ){
			if( f[0] == 1 ){
				v.push_back( x );
			}
			v.push_back( 0 );
		}
	}else{
		int one, zero;
		one = f[1];
		zero = f[0];
		for( ; f[0] ; f[0]-- ){
			v.push_back( 0 );
		}
		for( ; f[1] ; f[1]-- ){
			v.push_back( 1 );
		}
		if( one && zero && zero % 2 == 1 ){
			for(int i=1 ; i < v.size() ; i++ ){
				if( v[i-1] == 0 && v[i] == 1 ){
					swap( v[i-1] , v[i] );
					break;
				}
			}
		}
	}
	for(int i=0 ; i < v.size() ; i++ ){
		if( v[i] == -1 ) continue;
		cout << v[i] << endl;
	}
}