public SortedSet<Map.Entry<String,Integer>> runRandom(final int n){
		final Map<String,Integer> results = new HashMap<String,Integer>();
		final int threadCount = 10;
		final int threadLoad = n/threadCount;
		if(n<threadCount){
			for(int i = 0;i<n;i++){
				String seq = backtrackF(0, len - 1);
				Integer freq = results.get(seq);
				results.put(seq, freq == null?(1):freq+(1));
			}
			return sortByFreq(results);
			
		}
		class workerThread extends Thread{
			
			public void run(){
				
					for(int i=0;i<threadLoad;i++){
						String seq = backtrackF(0, len - 1);
						Integer freq = r.get(seq);
						r.put(seq, freq == null?(1):freq+(1));
					}
				
			}
			public HashMap<String,Integer> r = new HashMap<String,Integer>();
		
	}
		workerThread ts[] = new workerThread[threadCount];
		
		for(int i = 0 ;i <ts.length;i++){
			ts[i] = new workerThread();
			ts[i].start();
		}
		
		for(int i =0;i<threadCount;i++){
			try {
				ts[i].join();
				for(Map.Entry<String,Integer> entry:ts[i].r.entrySet()){
					Integer count = entry.getValue();
					Integer existing = results.get(entry.getKey());
					results.put(entry.getKey(), existing==null?count:existing+count);
				}
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		return sortByFreq(results);
	}