   vector <int> getOrdering( vector <int> height, vector <int> bloom, vector <int> wilt ) 
   {
	   int n = height.size();
	   vector < vector <int> > mat (n, vector <int> (n, 0));
	   vector <int> deg (n, 0);
	   vector <int> mark (n, 0);
	   for (int i = 0; i < n; i++)
		   for (int j = 0; j < n; j++)
			   if ( height[i] < height[j] && 
				   ( (bloom[i] >= bloom[j] && bloom[i] <= wilt[j]) || (bloom[j] >= bloom[i] && bloom[j] <= wilt[i]) ) 
			       )
			   {
				   mat[i][j] = 1;
				   deg[j]++;
			   }
	   vector <int> res;
	   for (int i = 0; i < n; i++)
	   {
		   int maxi = -1;
		   int ind = -1;
		   for (int j = 0; j < n; j++)
			   if (!deg[j] && !mark[j] && height[j] > maxi)
			   {
				   maxi = height[j];
				   ind = j;
			   }
		   mark[ind] = 1;
		   res.push_back (maxi);
		   for (int j = 0; j < n; j++)
			   if (mat[ind][j])
				   deg[j]--;
	   }
	   return res;
   }