fork(1) download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int t;
  6. cin>>t;
  7. while(t--)
  8. {
  9. map<int, int> mp;
  10. int n;
  11. cin>>n;
  12. int arr[n];
  13. int mx=-1;
  14. for (int i=0;i<n;i++)
  15. {cin>>arr[i];
  16. if(mp.find(arr[i])==mp.end())
  17. mp[arr[i]]=1;
  18. else
  19. ++mp[arr[i]];
  20. mx = max(mx, mp[arr[i]]);
  21. }
  22. map<int,int>::iterator it;
  23.  
  24. if(mx*2>n)
  25. {cout<<"No\n";
  26. continue;}
  27.  
  28. vector<int> rep;
  29. rep.push_back(0);
  30. int itr=0;
  31. for(int i=1;i<n;i++)
  32. {
  33. if(itr==rep.size()||arr[i]==arr[rep[itr]])
  34. {rep.push_back(i);
  35. continue;
  36. }
  37. swap(arr[i],arr[rep[itr]]);
  38. ++itr;
  39. }
  40. for(int i=0;i<n;i++)
  41. {
  42. if(itr==rep.size())
  43. break;
  44. if(arr[i]!=arr[rep[itr]])
  45. {swap(arr[i],arr[rep[itr]]);
  46. ++itr;}
  47. }
  48. cout<<"Yes\n";
  49. for(int i=0;i<n;i++)
  50. cout<<arr[i]<<" ";
  51. cout<<"\n";
  52. }
  53.  
  54. }
Success #stdin #stdout 0s 15240KB
stdin
2
10
5 5 5 5 5 3 3 3 2 2
2
1 1
stdout
Yes
3 3 3 2 2 5 5 5 5 5 
No