public static void floodFill(Point o){
		int row = o.row;
		int column = o.column;
		//if this point has already been visited, return
		if(Point.grid[row][column].id != 0) return;
		regions.add(new Region(regions.size()));
		
		queue.add(o);
		while(!queue.isEmpty()){
			Point p = queue.pollFirst();
			if(p.id != 0) continue;
			totalArea++;
			p.id = regions.size() - 1;
			regions.get(regions.size()-1).area++;
			qUp(p, p.up);
			qLeft(p, p.left);
			qDown(p, p.down);
			qRight(p, p.right);
		}
		while(!unprocessed.isEmpty()){
			floodFill(find(origins.poll(), unprocessed.poll()));
		}
	}