public static String getPermutationString( final List<LocationList> variations, long variationi  ) {
		String INVALID = "ø";
		if (( null == variations ) || ( 0 == variations.size() )) return INVALID;
		if ( 0 > variationi ) return INVALID + "(" + variationi + ")";
		
		long numVariations = getPermutationCount( variations );
		if ( variationi >= numVariations ) return INVALID + "(" + variationi + "/" + numVariations + ")";
				
		// Choose one location variation from each list.
		// for ( int listi = variations.size() - 1; listi >= 0; listi-- ) {
		StringBuffer binaryVar = new StringBuffer();
		StringBuffer binaryTot = new StringBuffer();
		long remainder = variationi;
		for ( int listi = 0; listi < variations.size(); listi++ ) {
			LocationList enharmonics = variations.get( listi );
			// System.out.println( "Enharmonic " + listi + "=" + enharmonics );
			if ( null != enharmonics ) {				
				long digitSize = enharmonics.size();
				if ( 0 < digitSize ) {
				   long digit = remainder % digitSize;
				   binaryVar.insert( 0, digit ); // prepend				   
   			       remainder /= digitSize;
				} else
 				   binaryVar.append( "?" );   			    
	    		binaryTot.insert( 0, digitSize ); // prepend
			}			
		}
		String varString = Long.toString( variationi ) + "/" + Long.toString( numVariations )
		   + " ("  + binaryVar.toString() + "/" + binaryTot.toString() + ")";
		return varString;
	}