#include #include #include using namespace std; //======================================================= // 1〜364 までの数の約数テーブル //======================================================= static const int MAXSUM = (1+13)*13/2*4; static vector 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& 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 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; } }