import java.util.Arrays; public class ABC{ private static void swap(int i, int j, Object... arr){ Object tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } public static boolean canMakeWord(String word, String... blocks) { if(word.length() == 0) return true; char c = Character.toUpperCase(word.charAt(0)); for(int i = 0; i < blocks.length; i++) { String b = blocks[i]; if(Character.toUpperCase(b.charAt(0)) != c && Character.toUpperCase(b.charAt(1)) != c) continue; swap(0, i, blocks); if(canMakeWord(word.substring(1), Arrays.copyOfRange(blocks, 1, blocks.length))) return true; swap(0, i, blocks); } return false; } public static void main(String[] args){ String[] blocks = {"BO", "XK", "DQ", "CP", "NA", "GT", "RE", "TG", "QD", "FS", "JW", "HU", "VI", "AN", "OB", "ER", "FS", "LY", "PC", "ZM"}; System.out.println("\"\": " + canMakeWord("", blocks)); System.out.println("A: " + canMakeWord("A", blocks)); System.out.println("BARK: " + canMakeWord("BARK", blocks)); System.out.println("book: " + canMakeWord("book", blocks)); System.out.println("treat: " + canMakeWord("treat", blocks)); System.out.println("COMMON: " + canMakeWord("COMMON", blocks)); System.out.println("SQuAd: " + canMakeWord("SQuAd", blocks)); System.out.println("CONFUSE: " + canMakeWord("CONFUSE", blocks)); } }