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

//=======================================================
// 1~364 までの数の約数テーブル
//=======================================================

static const int MAXSUM = (1+13)*13/2*4;
static vector<int> divisor_table[1+MAXSUM];
static void init_divisor_table()
{
	for(int n=1; n<=MAXSUM; ++n)
		for(int j=13; j>=1; --j)
			if( n%j == 0 )
				divisor_table[n].push_back(j);
}

//=======================================================
// メイン探索ルーチン
//=======================================================

bool dfs( int nCard[14], int sum, vector<int>& ans )
{
	for(int i=0; i!=divisor_table[sum].size(); ++i)
	{
		int c = divisor_table[sum][i];
		if( nCard[c] )
		{
			ans.push_back(c);
			nCard[c]--;
			if( sum-c==0 || dfs(nCard, sum-c, ans) )
				return true;
			nCard[c]++;
			ans.pop_back();
		}
	}
	return false;
}

//=======================================================
// 入出力
//=======================================================

int main()
{
	init_divisor_table();

	for(int N; cin>>N,N; )
	{
		int nCard[14]={0}, sum=0;
		while( N-- )
		{
			int c; cin>>c;
			nCard[c]++, sum+=c;
		}

		vector<int> ans;
		dfs( nCard, sum, ans );

		if( ans.empty() )
			cout << "No";
		else
			for(int i=ans.size()-1; i>=0; --i)
				cout << ans[i] << (i?" ":"");
		cout << endl;
	}
}