module Main; type Block = record l,r: char; used: boolean; end Block; var blocks: array 20 of Block; procedure Exists(c: char): boolean; var i: integer; r: boolean; begin r := false;i := 0; while ~r & (i < len(blocks)) do if ~(blocks[i].used) then r := (blocks[i].l = cap(c)) or (blocks[i].r = cap(c)); blocks[i].used := r; end; inc(i) end; return r end Exists; procedure CanMakeWord(s: string); var i: integer; made: boolean; begin made := true; for i := 0 to len(s) - 1 do made := made & Exists(s[i]) end; writeln(s:20,"?",made); Clean() end CanMakeWord; procedure Clean(); var i: integer; begin for i := 0 to len(blocks) - 1 do blocks[i].used := false end end Clean; procedure InitBlock(i:integer;l,r:char); begin blocks[i].l := l;blocks[i].r := r; blocks[i].used := false; end InitBlock; procedure Init; begin InitBlock(0,'B','O'); InitBlock(1,'X','K'); InitBlock(2,'D','Q'); InitBlock(3,'C','Q'); InitBlock(4,'N','A'); InitBlock(5,'G','T'); InitBlock(6,'R','E'); InitBlock(7,'T','G'); InitBlock(8,'Q','D'); InitBlock(9,'F','S'); InitBlock(10,'J','W'); InitBlock(11,'H','U'); InitBlock(12,'V','I'); InitBlock(13,'A','N'); InitBlock(14,'O','B'); InitBlock(15,'E','R'); InitBlock(16,'F','S'); InitBlock(17,'L','Y'); InitBlock(18,'P','C'); InitBlock(19,'Z','M') end Init; begin Init(); CanMakeWord("A"); CanMakeWord("BARK"); CanMakeWord("BOOK"); CanMakeWord("TREAT"); CanMakeWord("COMMON"); CanMakeWord("confuse"); end Main.