# include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include # include using namespace std; int n, mx; int a[10005]; int cnt[10005]; int p[10005]; int ans[10005]; vector > v[10005]; inline void build_ans(int x, int y) { for (int i = x; i >= 0; --i) { if (i < x) cout << " "; cout << i; } int z = cnt[0] - 1; for (int i = 0; i <= z; ++i) v[i].clear(); for (int i = 1; i <= y; ++i) --cnt[i]; for (int i = 1; i <= mx; ++i) { int last = 1; for (int j = 1; j <= cnt[i]; ++j) { if (j < cnt[i]) { v[last].push_back(make_pair(i, 2)); ++j; } else { v[last].push_back(make_pair(i, 1)); } ++last; } } for (int j = 1; j <= z; ++j) { for (int k = 0; k < v[j].size(); ++k) { cout << " " << v[j][k].first; --v[j][k].second; } for (int k = v[j].size() - 1; k >= 0; --k) if (v[j][k].second > 0) { cout << " " << v[j][k].first; } cout << " 0"; } for (int j = 1; j <= y; ++j) { cout << " " << j; } cout << '\n'; return; } bool solve() { for (int i = 0; i <= mx; ++i) if (!cnt[i]) return false; bool cur; for (int i = 0; i <= mx; ++i) { if (i) --cnt[i]; p[mx] = 0; for (int j = mx - 1; j >= 0; --j) { p[j] = p[j + 1]; if (j) { if (cnt[j + 1] > (cnt[j] - (cnt[j] & 1))) ++p[j]; } else { if (cnt[j + 1] > (cnt[j] - 1) * 2) ++p[j]; } } for (int j = 0; j <= mx && cnt[j]; ++j) { cur = true; if (j == 0) { if (p[j]) cur = false; } else { if (p[j + 1]) cur = false; if (cnt[j + 1] > (cnt[j] - 1 - ((cnt[j] - 1) & 1))) cur = false; if (j == 1) { if (cnt[j] - 1 > (cnt[0] - 1) * 2) cur = false; } else { if (cnt[j] - 1 > (cnt[j - 1] - 1 - ((cnt[j - 1] - 1) & 1))) cur = false; } } if (cur) { cout << "Yes\n"; build_ans(i, j); return true; } if (j == 1) { if (cnt[j] - 1 > (cnt[j - 1] - 1) * 2) break; } else if (j > 1) { if (cnt[j] - 1 > (cnt[j - 1] - 1) - ((cnt[j - 1] - 1) & 1)) break; } } } return false; } int main(int argc, const char * argv[]) { // freopen("/Users/danya.smelskiy/Documents/Danya/Resources/input.txt","r",stdin); ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; cin >> t; while (t--) { cin >> n; for (int i = 0; i <= n; ++i) cnt[i] = 0; mx = 0; for (int i = 1; i <= n; ++i) { cin >> a[i]; mx = max(mx, a[i]); ++cnt[a[i]]; } if (!cnt[0]) { cout << "No\n"; continue; } if (!solve()) cout << "No\n"; continue; } }