private static void calculateBasins(int farm[][]) {
		int size = farm.length;
		Point basins[][] = new Point[size][size];
		Map<Point, Character> charTracker = new HashMap<Point, Character>();
		
		char uniqueChar = STARTING;
		for (int x = 0; x < size; x++) {
			for (int y = 0; y < size; y++) {
				
				basins[x][y] = waterFlowsTo(farm,x,y);
				
				if(!charTracker.containsKey(basins[x][y])) {
					charTracker.put(basins[x][y], uniqueChar);
					uniqueChar++;	
				}
			}
		}
		
		int[] charCount = new int[256];
		
		for (int x = 0; x < size; x++) {
			for (int y = 0; y < size; y++) {
				charCount[(int)charTracker.get(basins[x][y])]++;
			}
		}
		List<Integer> counts = new ArrayList<Integer>();
		for (int i = 0; i < charCount.length; i++) {
			if (charCount[i] != 0) {
				counts.add(charCount[i]);
			}
		}
		Collections.sort(counts);
		Collections.reverse(counts);
		for (int i = 0; i < counts.size(); i++) {
			System.out.print(counts.get(i) + " ");
		}
		System.out.println();
	}