#include <bits/stdc++.h>
using namespace std;
#define fastio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
#define MOD 1000000007ll
#define tt int t; cin>>t; while(t--)
#define int long long
#define pb push_back
#define all(a) a.begin(),a.end()
#define ff first
#define ss second
#define rep(i,s,e) for(int i=s;i<=e;i++)
#define repr(i,s,e) for(int i=s;i>=e;i--)
#define mp make_pair
#define vi vector<int>
#define vvi vector<vector<int>>
#define pii pair<int,int>
#define vpii vector<pii>
#define vl vector<ll>
#define vll vector<vector<ll>>
#define pll pair<ll,ll>
#define lb lower_bound
#define ub upper_bound
#define sz(a) int(a.size())
#define inf 1000000000000000000
typedef long long ll;
typedef unsigned long long ull;
typedef long double lld;
vl factorial(ll n,ll m){ vl fact(n+1,1);for (int i = 2; i <= n; ++i){fact[i]=(fact[i-1]*i)%m;} return fact;}
ll expo(ll a, ll b, ll mod) {ll res = 1; while (b > 0) {if (b & 1)res = (res * a) % mod; a = (a * a) % mod; b = b >> 1;} return res;}
ll mod_mul(ll a, ll b, ll m) {a = a % m; b = b % m; return (((a * b) % m) + m) % m;}
ll mminvprime(ll a, ll b) {return expo(a, b - 2, b);}
bool revsort(ll a, ll b) {return a > b;}
ll mod_div(ll a, ll b, ll m) {a = a % m; b = b % m; return (mod_mul(a, mminvprime(b, m), m) + m) % m;}
int pow_fun(int b,int p){if(p==0) return 1;int res=1; while(p){if(p&1) res*=b;b=b*b;p=p/2;}return res;}
vector<ll> sieve(int n) {int*arr = new int[n + 1](); vector<ll> vect; for (int i = 2; i <= n; i++)if (arr[i] == 0) {vect.push_back(i); for (int j = 2 * i; j <= n; j += i)arr[j] = 1;} return vect;}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int t = 0;
cin >> t;
while (t--)
{
int n=0,m=0,a=0,b=0,c=0,d=0,sum=0,diff=0,maxN=0,minN=0,count=0,temp=0;
bool flag = false;
cin>>n;
vector<int>vv;
for(int i=0; i<n; i++){
int xx; cin>>xx;
vv.push_back(xx);
}
vector<int>ans;
if(vv[n-1]==1){
cout<<"NO"<<endl;
continue;
}
cout<<"YES"<<endl;
int cnt=0;
for(int i=n-1; i>=0; i--){
if(vv[i]==0){
for(int k=0; k<cnt-1; k++){
cout<<0<<" ";
}
if(cnt){
cout<<cnt<<" ";
}
cout<<0<<" ";
cnt=0;
}
else if(vv[i]==1){
cnt++;
}
}
if(cnt){
for(int k=0; k<cnt-1; k++){
cout<<0<<" ";
}
cout<<cnt<<endl;
}
}
return 0;
}
617. Merge Two Binary Trees | 1450. Number of Students Doing Homework at a Given Time |
700. Search in a Binary Search Tree | 590. N-ary Tree Postorder Traversal |
589. N-ary Tree Preorder Traversal | 1299. Replace Elements with Greatest Element on Right Side |
1768. Merge Strings Alternately | 561. Array Partition I |
1374. Generate a String With Characters That Have Odd Counts | 1822. Sign of the Product of an Array |
1464. Maximum Product of Two Elements in an Array | 1323. Maximum 69 Number |
832. Flipping an Image | 1295. Find Numbers with Even Number of Digits |
1704. Determine if String Halves Are Alike | 1732. Find the Highest Altitude |
709. To Lower Case | 1688. Count of Matches in Tournament |
1684. Count the Number of Consistent Strings | 1588. Sum of All Odd Length Subarrays |
1662. Check If Two String Arrays are Equivalent | 1832. Check if the Sentence Is Pangram |
1678. Goal Parser Interpretation | 1389. Create Target Array in the Given Order |
1313. Decompress Run-Length Encoded List | 1281. Subtract the Product and Sum of Digits of an Integer |
1342. Number of Steps to Reduce a Number to Zero | 1528. Shuffle String |
1365. How Many Numbers Are Smaller Than the Current Number | 771. Jewels and Stones |