t làm tới 9 phòng nhé. còn muốn làm n phòng thì sửa lại
const fi='test.inp'; fo='test.out';
var p:array[0..10000] of string;
h:array[0..10000] of char;
b,x,xbest:array[1..100] of byte;
f:text;
s:string;
sv,svbest:longint;
procedure doc;
var i,j:longint;
k:string;
begin
assign(f,fi); reset(f);
fillchar(p,sizeof(p),0);
for i:=1 to 9 do
begin
readln(f,p[i]);
end;
readln(f,s);
for i:=1 to 9 do
begin
if s[i]='T' then b[i]:=0;
if s[i]='X' then b[i]:=1;
if s[i]='V' then b[i]:=2;
end;
close(f);
end;
procedure khoitao;
begin
svbest:=19;
sv:=0;
end;
procedure inkq;
var i,j:longint;
begin
// writeln(f,svbest);
for i:=1 to 9 do
for j:=1 to xbest[i] do write(f,i);
end;
procedure update;
var i,sum:byte;
begin
sum:=0;
for i:=1 to 9 do sum:=sum+ (b[i] mod 3);
if (sum=0) and (sv<svbest) then
begin
svbest:=sv;
xbest:=x;
end;
end;
procedure try(i:byte);
var spi,k,h,j:byte;
st:string;
begin
if sv>svbest then exit;
for j:=0 to 2 do
begin
x[i]:=j;
st:=p[i];
spi:=length(st);
sv:=sv+spi*j;
for k:=1 to j do
for h:=1 to spi do b[ord(st[h])-48]:=(b[ord(st[h])-48]+1);
if i=9 then update
else try(i+1);
sv:=sv-spi*j;
for k:=1 to j do
for h:=1 to spi do b[ord(st[h])-48]:=(b[ord(st[h])-48]-1);
end;
end;
begin
doc;
khoitao;
try(1);
assign(f,fo); rewrite(f);
if svbest<19 then inkq
else writeln(f,0);
close(f);
end.