도전
그룹화 된 편지 세트가 주어지면 그것들을 완전히 덮을 수 있도록 칠판에 정리하십시오.
이사회 대표 (일명 SHIP DECK)
- 보드는 6×6 그리드입니다.
- 항상 36 개의 제곱이 있습니다.
- 열은 AF로 표시됩니다.
- 행은 1-6으로 표시됩니다.
예:
A B C D E F
+---+---+---+---+---+---+
1 : : : : : : :
+---+---+---+---+---+---+
2 : : : : : : :
+---+---+---+---+---+---+
3 : : : : : : :
+---+---+---+---+---+---+
4 : : : : : : :
+---+---+---+---+---+---+
5 : : : : : : :
+---+---+---+---+---+---+
6 : : : : : : :
+---+---+---+---+---+---+
입력 (일명 상자)
- 그룹화 된 문자 세트를 포함하는 여러 줄 문자열입니다.
- 상자는 동일한 문자 그룹으로 만들어집니다.
- 상자는 면역성이어서 회전하거나 뒤집을 수 없습니다.
- 각 상자의 시작점은 왼쪽 상단에 있습니다 (상자를 갑판으로 옮길 때 고려해야합니다).
- 상자의 왼쪽 상단부터 다음과 같은 사각형은 오른쪽이나 아래에만있을 수 있습니다.
- 상자를 나타내는 데 어떤 문자도 사용할 수 있습니다. 상자는 항상 문자
[a]
로 시작하여 알파벳 위로 이동합니다. - 상자에는 문자 (예 : 상자 A, 상자 B 등)로 표시되어 있습니다.
- 상자의 수는 다양 할 수 있습니다 (예제에도 불구하고 항상 10 개는 아닙니다).
- 한 줄에 각 상자 블록을 분리하는 24 개의 문자가 있습니다. ([a]의 시작에서 [b]의 시작은 24 자 등으로 구분됨)
예:
[a][a][a] [b] [c][c]
[a] [b][b][b] [c]
[a] [b][b]
[d] [e] [f][f][f][f][f]
[d][d] [e]
[d][d] [e]
[e]
[e][e]
[g] [h] [i]
[g] [i]
[i]
산출
상자를 완전히 덮을 수 있도록 빈 상자가없는 데크에 상자를 놓는 일련의 명령을 인쇄해야합니다.
명령 형식은 다음과 같습니다.
HAUL <crate> TO <column> <row>
즉 HAUL E to A 1
명확히하기 위해 항상 주어진 입력에 대한 해결책이 있습니다.
테스트 사례 <-더 보려면 클릭하십시오.
입력
[a][a][a] [b] [c][c][c]
[a][a] [b]
[a] [b][b]
[b][b]
[d] [e] [f]
[d] [f]
[d] [f]
[d]
[d]
[g][g] [h] [i]
[i][i]
[i]
[i][i]
[j][j][j]
산출
HAUL I TO A 1
HAUL B TO A 3
HAUL A TO B 1
HAUL J TO D 6
HAUL D TO F 1
HAUL F TO E 1
HAUL C TO C 5
HAUL G TO D 4
HAUL E TO D 3
HAUL H TO C 6
결과:
A B C D E F
+---+---+---+---+---+---+
1 : i : a : a : a : f : d :
+---+---+---+---+---+---+
2 : i : i : a : a : f : d :
+---+---+---+---+---+---+
3 : b : i : a : e : f : d :
+---+---+---+---+---+---+
4 : b : i : i : g : g : d :
+---+---+---+---+---+---+
5 : b : b : c : c : c : d :
+---+---+---+---+---+---+
6 : b : b : h : j : j : j :
+---+---+---+---+---+---+
점수
이것은 코드 골프 이므로 문자에서 가장 짧은 대답이 이깁니다.
답변
Python 3.6, 435 437 385331 바이트
F()
상자 끈으로 전화 하십시오.
def R(b,d,i=0):
if not d:return 1
(k,x),*d=d
while x:
if x&b<1and R(b|x,d):print(f'HAUL {k.upper()} TO {i%7+65:c} {i//7+1}');return 1
i+=1;x>>=1
def F(t,d={},e={}):
r=c=0
for a in t:
if'`'<a<'{':e[a]=x,y=e.get(a,(r,c));d[a]=d.get(a,0)+(1<<(48-(r-x)*7-(c-y)//3))
elif'\n'==a:r+=1;c=-1
c+=1
R(4432676798719,d.items())
훨씬 더 골프를 쳤다 :
re
라이브러리 를 사용하는 대신 상자 문자열을 직접 구문 분석하십시오 .- 상자 문자열을 구문 분석 할 때 비트 마스크를 작성할 수 있도록 상자 세트의 첫 번째 좌표를 저장하려면 setdefault를 사용하십시오. for 루프를 제거합니다.
이전 버전
import re
def R(b,d,i=0):
if not d:return 1
(k,x),*d=d
while x:
if not x&b and R(b|x,d):print(f'HAUL {k.upper()} TO {i%7+65:c} {i//7+1}');return 1
i+=1;x>>=1
def F(t,d={},n=0):
for r in t.split('\n'):
for m in re.finditer(r'(.)]',r):d[m[1]]=d.get(m[1],[])+[(n,m.start())]
n+=1
R(4432676798719,[(k,sum(1<<(48-(r-v[0][0])*7-(c-v[0][1])//3)for r,c in v))for k,v in d.items()])
중복 루프를 제거하도록 코드를 재구성했습니다.
-
이전 코드는 상자의 모든 위치 목록
F()
을 작성한 다음의 목록을 반복했습니다R()
. 새로운 코드에있는 상자의 한 위치를 생성F()
하고R()
모든 가능한 위치를 시도합니다. -
앞의 코드에서
R()
의 가능한 솔루션을 수집a
하고F()
다음 반환 된 솔루션을 통해 반복. 새 코드에서는R()
HAUL 명령을 직접 인쇄합니다
이전 버전
import re
def R(b,d,a=[]):
if not d:yield a
for x in d[0]:
if not x&b:yield from R(b|x,d[1:],a+[x])
def F(t,d={},n=0):
for r in t.split('\n'):
for m in re.finditer(r'(.)]',r):d[m[1]]=d.get(m[1],[])+[(n,m.start())]
n+=1
for k,j in enumerate(next(R(4432676798719,[[sum(1<<(48-(r-v[0][0])*7-(c-v[0][1])//3)for r,c in v)>>i for i in range(48)]for k,v in d.items()]))):x=51-len(bin(j));print(f'HAUL {k+65:c} TO {x%7+65:c} {x//7+1}')
설명
기본 아이디어는 선박의 갑판과 상자를 비트 맵으로 나타내는 것입니다. 비트 맵을 사용하여 상자를 이동하면 비트 맵이 이동하고 상자 사이의 겹침을 확인하는 것이 비트 단위 AND 0이됩니다.
Ungolfed 코드 :
import re
def F(crate_string): # 3
coords = {}
row_no = 0
for row in crate_string.split('\n'): # 7
for match_obj in re.finditer('(.)]', row): # 9
crate_name = match_obj[1] # 11
col_no = match_obj.start() # 12
coords[crate_name] = coords.get(crate_name, []) + [(row_no, col_no)] # 13
row_no += 1
normed = {k:[(r-v[0][0], (c-v[0][1])//3) for r,c in v] for k,v in coords.items()} # 17
bitmaps = [(k,sum(1<<(48 - r*7 - c) for r,c in v)) for k,v in normed.items()] # 18
R(4432676798719, bitmaps) # 20
def R(used, bitmaps): # 22
if not bitmaps: # 23
return True # 24
shift = 0 # 25
(crate_name, crate_bitmap),*bitmaps = bitmaps # 26
while crate_bitmap: # 28
if not used & crate_bitmap: # 29
if R(used | crate_bitmap, bitmaps): # 30
print(f'HAUL {crate_name.upper()} TO {shift%7 + 65:c} {shift//7 + 1}') # 31
return True # 32
shift += 1 # 34
crate_bitmap >>= 1 # 35
return False # 37
F()
크레이트 정의 문자열을 구문 분석하고 비트 맵을 빌드합니다. 정규 표현식은 상자 정의 문자열의 각 줄에서 상자 ( ‘와’)가 뒤 따르는 상자를 검색합니다 (9 행). 일치하는 것이 발견되면 해당 키 (행, 열)가 문자 (11-13 행)로 입력 된 사전에 추가됩니다. 문제에 주어진 상자 정의 문자열의 예 :
coords = {'a': [(0, 5), (0, 8), (0, 11), (1, 5), (1, 8), (1, 11)],
'b': [(0, 29), (1, 29), (2, 29)],
... }
각 크레이트의 좌표는 정규화되어 (라인 17), 각 크레이트는 (0,0)에서 시작하고 각 블록은 1 단위 너비입니다 (3 a la ‘[a]’대신).
normed = {'a': [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)],
'b': [(0, 0), (1, 0), (2, 0)],
... }
그런 다음 정규화 된 좌표 (라인 18)를 기준으로 각 상자에 대해 비트 맵이 생성됩니다.
데크는 7 x 7 그리드로 취급됩니다. 열 ‘G’와 행 7은 도형이 보드에서 언제 확장되는지 감지하는 데 사용됩니다. 상자가 갑판의 해당 사각형을 차지할 경우 비트 맵은 1입니다. 비트 48 ~ 비트 42는 사각형 A1 ~ A7에 해당하고 비트 41 ~ 35는 사각형 B1 ~ B7에 해당합니다.
bitmaps = [('a', 0b1110000_1110000_0000000_0000000_0000000_0000000_0000000),
('b', 0b1000000_1000000_1000000_0000000_0000000_0000000_0000000),
...
]
R(used, bitmaps)
그런 다음 비트 맵을 사용하여 동일한 사각형에 두 개의 상자를 넣지 않는 상자 배치를 재귀 적으로 검색합니다. used
상자가 이미 상자를 점유했거나 보드에서 벗어 났기 때문에 (즉, 열 G 및 행 7) 사용할 수없는 사각형을 나타내는 비트 마스크입니다. bitmaps
여전히 배치해야하는 상자 목록입니다.
재귀의 기본 사례는 더 이상 남은 상자가 남아 있지 않은 경우, 즉 bitmaps
비어 있습니다 (23 행). 이 경우 솔루션을 찾았 음을 나타 내기 위해 True가 리턴됩니다.
그렇지 않으면 상자 이름과 해당 비트 맵이 비트 맵 목록에서 튀어 나옵니다 (26 행). 크레이트 비트 맵이 비어 있지 않은 동안 (28 행), 크레이트 비트 맵으로 표시되는 현재 크레이트 배치가 이전에 배치 된 크레이트와 충돌하는지 확인하십시오. 라인 29에서, not used & crate_bitmap
경우에 거짓이다 used
하고 crate_bitmap
모두가 충돌을 나타내는, 동일한 비트 위치에 1을 갖는다. 충돌이없는 경우 R()
나머지 상자를 재 시도하기 위해 재귀 적으로 (30 행) 호출됩니다.
재귀 호출이 R()
True 를 반환하면 솔루션이 발견되었고 상자의 현재 배치가 해당 솔루션의 일부임을 의미합니다. 따라서 상자를 이동하는 해당 명령이 인쇄되고 True가 재귀 호출 (31-32 행)로 전파됩니다.
에서 생성 될 때 F()
, 각 크레이트 비트 맵은 크레이트가 A1 위치에 놓이면 크레이트가 차지하는 데크 사각형을 나타냅니다. 비트 맵을 1 비트 오른쪽으로 이동하는 것은 크레이트를 위치 A2로 이동시키는 것에 해당합니다. 7 비트 오른쪽 시프트는 상자를 B1 등으로 이동시키는 것에 해당합니다. 예를 들어 다음 비트 맵은 다양한 위치에서 상자 ‘a’를 나타냅니다.
0b1110000_1110000_0000000_0000000_0000000_0000000_0000000 represent crates 'a' at A1
0b0111000_0111000_0000000_0000000_0000000_0000000_0000000 represent crates 'a' at A2
0b0011100_0011100_0000000_0000000_0000000_0000000_0000000 represent crates 'a' at A3
...
0b0000000_1110000_1110000_0000000_0000000_0000000_0000000 represent crates 'a' at B1
...
이전에 배치 한 상자 (30 행)와 충돌하거나 남은 상자 (31 행)의 유효한 배치가 없어서 상자를 배치 할 수없는 경우. 비트 마스크를 오른쪽으로 한 비트 이동 (라인 35)하여 상자를 다른 위치로 이동합니다. Shift
비트 맵이 얼마나 많이 이동했는지 추적하며, 이는 현재 상자의 위치에 해당합니다.
비트 맵이 비어 있으면 (0) 가능한 모든 배치가 시도되었음을 나타냅니다. R()
재귀에서 더 일찍 전화를 걸면 상자에 다른 배치를 시도 할 수 있도록 실패를 표시하기 위해 False가 반환됩니다 (37 행) .
상자가 데크의 측면에서 연장되지 않도록하기 위해, G 열과 7 열에 해당하는 비트가 라인 20 used
에 대한 초기 호출을 위해 설정됩니다 R()
.
4432676798719
빈 데크는 0b0000001000000100000010000001000000100000011111111
답변
파이썬 2 , 864 바이트
- 버그를 찾은 Stephen 에게 감사합니다 .
- 입력 형식이 처리 할 수있는 것보다 더 엄격하므로 문자열 구문 분석이 크게 수행 될 수 있습니다.
def V(C,S=0,D=-1,J=0,H=[],E=enumerate,R=range,r=str.replace,s=str.split,e="!"):
if[]<C*0:
J=0;N=[J]*26;K=[]
for c in s(r(r(r(C,"[",""),"]","")," ","*"),2*"\n"):
c=[list(_)for _ in s(c,"\n")]
for x,_ in E(c[0]):
if all(c[y][x]<">"for y,_ in E(c)):
for y,_ in E(c):c[y][x]=e
for j,y in E(c):
y="".join(y)
while"!!"in y:y=r(y,2*e,e)
c[j]=s(y,e)
K+=[],[],[],[];J+=4
for y in c:
while""in y:y.remove("")
for j,x in E(y):K[j+J-4]+=x,
for k in K:
if all(k)and k:N[ord(k[0][0])-97]=[[x>"*"for x in y]for y in k]
while 0in N:N.remove(0)
C=N
if[]>S:S=[0]*36
if-~D>0:
Y=J/6;j=0
for y in C[D]:
X=J%6
for x in y:
if x:
if X>5or Y>5or S[X+Y*6]:return
S[X+Y*6]=x
X+=1
Y+=1
if~-len(C)==D:
if 0in S:return
for h in H[1:]+[J]:print"HAUL %c TO %c %d"%(65+j,65+h%6,h/6+1);j+=1
j/0
for j in R(36):V(C,S[:],-~D,j,H*(D>=0)+[J])
설명
단일 문자열을 통해 입력 된 2 차원 상자를 구문 분석하는 데 많은 바이트가 사용됩니다. 상자는 부울 값의 중첩 목록으로 표시됩니다.
상자가 구문 분석 된 후 함수는 모든 상자의 가능한 모든 위치를 고려합니다. 그렇게하려면 반복해서 호출합니다. 상자가 데크 외부 또는 다른 상자 위에 배치 될 수없는 위치를 찾으면 현재 재귀 트리 분기를 종료하여 성능을 향상시킵니다.
특정 배치의 조합으로 인해 완전히 덮여있는 데크가 발견되면 기록 된 크레이트 배치 이력을 인쇄하고 희망없는 부서를 시도하여 전 세계적으로 종료됩니다. 인쇄 된 운반 지침은 알파벳순으로 정렬됩니다.
파이썬 2 , 812 바이트
def f(C,M=[],d=0,R=range,E=enumerate,L=len):
if C*0=="":
N=[0]*26;K=[];J=0
r=str.replace
for c in r(r(r(C,"[",""),"]","")," ","*").split("\n\n"):
c=[list(_)for _ in c.split("\n")]
for x in R(L(c[0])):
if all(c[y][x]=="*"for y in R(L(c))):
for y in R(L(c)):c[y][x]="!"
for j,y in E(c):
y="".join(y)
while"!!"in y:y=r(y,"!!","!")
c[j]=y.split("!")
for _ in"_"*L(c):K+=[],
for y in c:
for j,x in E(y):K[j+J]+=x,
J+=L(c)
for k in K:
if all(k)and k:N[ord(k[0][0])-97]=[[x!="*"for x in y]for y in k]
while 0in N:N.remove(0)
C=N
if d==L(C):
j=0;S=[j]*36
for c,k in E(C):
Y=M[c]/6
for y in k:
X=M[c]%6
for x in y:
if X<6>Y:S[X+Y*6]|=x
X+=1
Y+=1
if 0in S:return
for m in M:print"HAUL %c TO %c %d"%(65+j,65+m%6,1+m/6);j+=1
j/0
for j in R(36):f(C,M*(d>=0)+[j],d+1)
설명
크레이트 문자열은 파싱되어 각 크레이트를 나타내는 불리언의 나열된 네스트로 변환됩니다.
반복 함수는 정수 0 <= x < 36
(모든 가능한 배 갑판 위치)를 포함하는 주어진 크레이트의 양과 동일한 길이의 모든 가능한 목록을 생성합니다 . 모든 목록은 모든 상자를 배치하고 테스트하기위한 지침으로 해석됩니다. 테스트 된 명령 목록에 빈 공간이없는 데크가 있으면 명령 목록이 유효하고 인쇄되어야합니다.
상자가 적은 시나리오에서는 매우 비효율적이므로 제공된 테스트 사례에서 테스트하지 않았습니다 (TIO 링크 참조). 알고리즘은 가능한 모든 배열을 검색하기 때문에 알고리즘 을 살펴 봅니다 36**10 = 3.656e15
. 그러나 이론 상으로는 여전히 효과가 있습니다.
답변
자바 스크립트, 366
k=>(x=y=0,C={},B=[...k].map((c,p)=>(c<' '?(x=0,++y):c<'a'?++x:(c=C[c=parseInt(c,36)]||(C[c]=[[],x,y]))[0].push((y-c[2])*7+(x++-c[1])/3),p<8|p>48|p%7<1)),S=[],R=i=>!C[i]||B.some((v,p)=>v?0:C[i][0].every(q=>B[q+=p]?0:B[q]=i)&&R(i+1,S[i-10]=p)||!C[i][0].map(q=>B[q+=p]==i?B[q]=0:0)),R(10),S.map((v,c)=>`HAUL ${(c+10).toString(36)} TO ${(v%7+9).toString(36)} ${v/7|0}`))
참고 :이 함수는 24 자 간격을 신경 쓰지 않고 상자에있는 구멍이 허용되므로보다 작은 입력을 구문 분석 할 수 있습니다.
조금 더 골프를 칠 수 있다고 생각하지만, 짧고 너무 느리지 않기 때문에 그대로 좋아합니다.
덜 골프
k=>(
// input parsing
var x = 0, y = 0, // current position
C = []; // crates
[...k].forEach( c =>
c < ' '
? (x = 0, ++y) // found a newline, increment y, reset x
: c < 'a'
? ++x // not a letter, increment x
: ( // found a letter, update the crate
c = parseInt(c,36), // letter to number (10..35)
c = C[c], // current crate in c
c || (C[c]=[[], x, y]), // if new crate, initialize it setting base position
c[0].push((y - c[2])*7 + (x-c[1])/3) // add current position
++x // increment x also
)
);
var B = [...Array(7*8)] // empty board. in golfed code I reuse k to build B. k is big enough
B = B.map( (_, p) => // set borders
p < 8 | p > 48 | p%7<1
)
var S = [] // output steps
// recursive function to fill board
var R = i =>
! C[i] // if crate at position i exists (else, we have found a solution and return true)
||
B.some( (v,p) => // try to put crate at each position in B
v // current cell is used already ?
? 0 // used, return false
: C[i][0].every( q => // try this position, must place every part
B[q+=p] // current position in B is used ?
? 0 // used, stop, return false
: B[q]=i // mark as used
)
&& R(i+1,S[i-10]=p) // ok for current crate, try next, mark step
|| // else, fail for current crate, clear position marked
!C[i][0].map(q =>
B[q+=p]==i ? B[q]=0:0 // clear if it was set to 'i'
)
),
R(10) // start recursive fill at position 10 (that is 'a')
// it returns true if ok, but we don't care as we are assured a solution exists
// now just format output
return S.map((v,c)=>`HAUL ${(c+10).toString(36)} TO ${(v%7+9).toString(36)} ${v/7|0}`)
)
많은 테스트 사례
var F=
k=>(x=y=0,C={},B=[...k].map((c,p)=>(c<' '?(x=0,++y):c<'a'?++x:(c=C[c=parseInt(c,36)]||(C[c]=[[],x,y]))[0].push((y-c[2])*7+(x++-c[1])/3),p<8|p>48|p%7<1)),S=[],R=i=>!C[i]||B.some((v,p)=>v?0:C[i][0].every(q=>B[q+=p]?0:B[q]=i)&&R(i+1,S[i-10]=p)||!C[i][0].map(q=>B[q+=p]==i?B[q]=0:0)),R(10),
// Just for debug: return the fill in addition to the steps
[B.slice(7,50).map((c,i)=>i%7?c.toString(36):'\n'),
S.map((v,c)=>`HAUL ${(c+10).toString(36)} TO ${(v%7+9).toString(36)} ${v/7|0}`)])
var Test = [
"[a][a][a] [b] [c][c]\n [a] [b][b][b] [c]\n [a] [b][b]\n\n[d] [e] [f][f][f][f][f]\n[d][d] [e]\n[d][d] [e]\n [e]\n [e][e]\n\n[g] [h] [i]\n[g] [i]\n [i]"
,"[a][a][a] [b] [c][c][c]\n [a][a] [b]\n [a] [b][b]\n [b][b]\n\n[d] [e] [f]\n[d] [f]\n[d] [f]\n[d]\n[d]\n\n[g][g] [h] [i]\n [i][i]\n [i]\n [i][i]\n\n[j][j][j]"
,"[a] [b][b][b] [c]\n[a] [b]\n[d] [e] [f][f]\n[d] [e]\n[d][d][d]\n[g] [h] [i]\n[g] [h][h][h] [i]\n [h] [i][i]\n [h] [i]\n [i]\n[j] [k][k][k]\n[j]\n[j]"
,"[a][a][a][a] [b][b][b] [c]\n [b] [c]\n [b] [c][c]\n [c][c]\n[d] [e] [f]\n[d] [f][f][f]\n[g] [h] [i][i]\n [h][h][h] [i][i]\n [h][h]\n[j]\n[j]\n[j]"
,"[a] [b] [c][c]\n[a] [b]\n[a]\n[d][d] [e] [f][f][f]\n[d][d][d]\n[g] [h] [i]\n [h]\n [h]\n [h][h]\n [h]\n[j] [k][k][k]\n[j][j] [k][k]\n[j][j][j] [k]"
,"[a] [b][b][b] [c]\n[a] [c]\n [c]\n[d][d] [e] [f]\n[d][d][d][d] [e] [f]\n [e][e][e][e] [f]\n[g] [h][h][h] [i][i][i]\n [h] [i][i][i]\n[j][j]"
,"[a] [b] [c][c][c]\n [b]\n[d] [e][e] [f][f]\n[d][d][d] [f][f]\n[d][d]\n[g] [h][h][h] [i]\n[g] [h] [i][i]\n[g] [h] [i][i]\n[g]\n[g]\n[j]\n[j]\n[j]"
,"[a][a] [b] [c]\n [a][a] [b][b] [c]\n [b][b][b] [c]\n[d] [e][e][e] [f][f][f]\n[d] [e][e][e]\n[g][g] [h] [i]\n [i]\n [i][i]\n[j][j]\n [j]\n [j]\n [j]"
,"[a][a] [b] [c]\n[a][a] [b][b] [c]\n [b][b][b]\n[d][d] [e] [f][f][f]\n[g] [h] [i][i]\n[g] [h] [i]\n[g] [h]\n[g]\n[g][g]\n[j]\n[j]\n[j]\n[j][j]\n [j]"
,"[a] [b] [c][c][c][c][c]\n [b]\n [b][b][b]\n [b]\n[d] [e] [f][f][f]\n [e]\n [e]\n [e][e][e]\n[g] [h] [i]\n[g] [h]\n[g] [h]\n [h]\n[j][j] [k]\n[j][j] [k]"
,"[a] [b] [c]\n [c]\n [c]\n[d][d][d] [e] [f]\n [e][e][e] [f]\n [f][f][f]\n [f]\n[g][g][g] [h][h] [i]\n[g][g][g] [i][i]\n [i][i]\n[j] [k]\n[j] [k]\n[j]"
,"[a][a] [b] [c]\n [b] [c][c][c]\n [b] [c]\n [b][b] [c]\n [b]\n[d] [e] [f]\n[d]\n[g] [h] [i]\n[g][g][g] [h] [i]\n [h][h][h] [i]\n [h]\n[j][j][j] [k][k]"
,"[a][a] [b][b][b] [c]\n [b][b][b]\n[d] [e] [f]\n[d] [e] [f]\n [e] [f]\n [e][e]\n [e]\n[g][g][g] [h][h] [i]\n [h][h] [i]\n [h][h] [i][i]\n [i]\n [i]\n[j]"
,"[a][a][a] [b][b] [c][c]\n [b][b] [c][c]\n [b][b] [c][c]\n[d][d] [e] [f][f]\n [d] [e]\n [e]\n [e]\n [e]\n[g] [h] [i][i]\n[g] [i][i]\n[g]\n[g]\n[g][g]"
,"[a][a][a] [b] [c]\n [a] [c]\n [a]\n[d] [e][e][e] [f][f]\n[d]\n[g] [h][h] [i]\n[g][g][g] [h][h] [i]\n [g][g] [i]\n[j] [k]\n[j] [k]\n[j][j]\n [j]\n [j]"
,"[a][a] [b] [c][c]\n [b][b]\n [b][b][b]\n[d] [e][e][e] [f][f]\n [e][e][e] [f][f][f]\n[g] [h] [i][i]\n[g] [h] [i][i]\n[g] [i][i]\n[j][j][j]"
,"[a][a] [b][b][b] [c]\n [a] [b][b]\n [a][a][a]\n[d][d] [e] [f]\n[d][d] [e][e] [f][f][f]\n [e][e]\n [e]\n[g][g][g] [h] [i]\n [i]\n [i]\n [i]\n[j][j]"
,"[a] [b][b] [c]\n[a] [c]\n[a]\n[a][a][a]\n[d] [e][e][e][e] [f]\n[d] [f]\n [f]\n[g] [h] [i]\n[g] [h][h]\n[g] [h][h][h]\n[g]\n[g][g]\n[j] [k][k]\n [k]"
,"[a] [b][b] [c]\n[a] [b][b][b] [c]\n[a][a][a][a] [c]\n[d][d][d] [e] [f]\n [d][d] [e]\n[g] [h] [i]\n [h] [i]\n [h]\n [h]\n [h][h]\n[j][j][j][j][j]"
,"[a][a] [b][b] [c]\n [a][a][a]\n [a]\n[d] [e][e][e] [f][f]\n[d]\n[g] [h][h] [i]\n[g] [h][h]\n[g] [h][h]\n[g]\n[j] [k]\n[j][j] [k][k]\n [k][k]\n [k]"
,"[a][a][a] [b] [c]\n [c]\n [c][c][c][c]\n[d] [e][e][e] [f][f][f]\n[d] [e][e][e] [f][f][f]\n[d]\n[g] [h][h] [i][i]\n[g] [i][i]\n[j]\n[j]\n[j]"
,"[a] [b] [c][c]\n [b] [c][c]\n [b]\n[d][d][d] [e] [f]\n [d] [f]\n [f]\n[g] [h] [i]\n[g] [h][h][h] [i][i]\n [h][h] [i][i][i]\n[j] [k] [l][l][l][l]"
,"[a] [b] [c]\n[a][a] [b]\n[a][a]\n[d] [e] [f]\n[d] [e]\n[d] [e][e][e]\n[d] [e]\n[g] [h][h][h] [i][i]\n[g][g]\n[j][j][j] [k]\n[j][j][j] [k]\n [k]"
,"[a] [b] [c][c]\n[a][a][a] [b] [c][c]\n [a][a] [b]\n [b]\n [b][b]\n[d] [e] [f]\n[d] [e]\n[d]\n[g] [h][h][h][h] [i]\n[j][j] [k]\n [k]\n [k][k]\n [k]\n [k]"
,"[a] [b][b][b] [c]\n[a] [b][b][b] [c][c][c]\n[a]\n[d] [e] [f][f][f][f]\n [e]\n [e]\n [e]\n [e]\n[g] [h] [i]\n [h][h] [i]\n [h][h] [i][i][i]\n [i]\n[j]"
,"[a][a][a] [b] [c]\n [b] [c]\n [b][b][b]\n [b]\n[d][d][d] [e][e] [f]\n [e][e] [f]\n [f]\n [f][f][f]\n[g] [h] [i]\n[g] [i]\n[g] [i]\n [i]\n [i][i]\n[j][j]"
,"[a] [b] [c]\n[a] [b]\n[a][a] [b]\n[d] [e][e][e] [f]\n[d] [e] [f]\n [e] [f]\n [e] [f][f]\n [f]\n[g][g] [h] [i]\n [i]\n[j][j][j] [k]\n [k][k][k]\n [k][k]"
,"[a][a][a] [b][b] [c]\n [b] [c]\n[d] [e][e] [f]\n[d] [f]\n[d][d]\n [d][d]\n[g] [h] [i]\n [h]\n [h]\n[j][j] [k] [l]\n[j][j][j] [k] [l][l][l]\n [j] [k]"
,"[a][a] [b] [c][c][c]\n[d] [e][e] [f][f]\n[d] [e][e] [f][f]\n[d]\n[d]\n[g] [h][h][h] [i]\n[g] [i]\n[g]\n[g][g][g]\n[j] [k]\n[j]\n[j][j][j][j]"
,"[a][a][a] [b][b] [c]\n[d] [e] [f]\n[d][d][d] [f][f][f][f]\n[d][d] [f]\n[g][g] [h][h][h] [i]\n [i]\n [i]\n[j] [k] [l]\n[j] [l]\n [l][l]\n [l][l]"
,"[a][a][a] [b] [c]\n [b] [c]\n [c]\n[d][d] [e][e] [f]\n [d]\n [d]\n [d]\n[g] [h] [i][i]\n[g][g] [h] [i][i][i]\n [h][h][h] [i]\n [h]\n[j][j] [k]\n[j][j]"
,"[a] [b][b][b] [c]\n[a] [b] [c]\n[a][a] [b] [c]\n [a][a]\n[d] [e][e][e] [f][f]\n[d][d][d] [f][f]\n [d][d]\n[g] [h] [i][i]\n[j] [k]\n[j] [k][k]"
,"[a] [b] [c]\n [c]\n [c][c]\n [c][c]\n[d][d][d][d][d] [e] [f][f]\n [f][f]\n[g] [h] [i][i]\n[g] [h][h] [i][i]\n[g] [i][i]\n[g]\n[g]\n[j][j]\n[j][j]"
,"[a] [b][b] [c][c]\n [b] [c][c]\n [b]\n[d][d] [e][e] [f]\n[d][d][d] [e][e][e]\n[g] [h] [i]\n[g] [h]\n[g][g][g][g] [h]\n [h]\n [h]\n[j][j][j][j]"
,"[a] [b][b][b] [c][c][c]\n[a] [b][b]\n[a]\n[a][a]\n [a]\n[d] [e] [f]\n[d] [f]\n[d] [f]\n[g] [h] [i][i]\n[g][g] [h] [i][i]\n[g][g][g]\n[j] [k][k]"
,"[a] [b][b] [c]\n[a] [b][b]\n [b][b]\n[d] [e] [f][f][f]\n[d][d][d]\n[d][d]\n[g] [h] [i][i]\n[g] [h]\n[g]\n[j][j][j] [k]\n [j] [k]\n [k]\n [k][k]\n [k]"
,"[a][a][a] [b] [c]\n [a][a]\n[d][d][d] [e] [f][f]\n [e]\n[g] [h] [i]\n[g][g] [h] [i]\n[g][g][g] [h] [i]\n[j] [k][k]\n[j][j] [k][k][k]\n[j][j]"
,"[a][a][a] [b] [c][c][c][c][c]\n [a][a] [b]\n [a] [b]\n [b]\n[d] [e] [f]\n[d][d] [f]\n[d][d][d] [f]\n[g] [h][h] [i][i][i]\n [h][h] [i][i][i]"
,"[a][a] [b] [c]\n [b]\n [b]\n[d][d][d] [e] [f]\n [f]\n [f]\n [f]\n[g][g][g] [h][h] [i]\n[g][g][g] [h][h] [i][i]\n [i][i][i]\n[j][j][j]\n [j][j]\n [j]"
,"[a] [b] [c]\n[a] [c]\n[a] [c]\n[a] [c][c][c]\n[a][a]\n[d] [e] [f]\n [e]\n [e]\n[g][g] [h][h] [i][i][i]\n[g][g]\n[g][g]\n[j] [k][k][k]\n[j]\n[j]\n[j]"
,"[a][a][a] [b] [c]\n [a][a] [b][b] [c]\n [a] [b][b][b] [c]\n [c]\n[d] [e][e][e] [f]\n[d][d][d]\n[d][d]\n[g] [h] [i][i]\n [i][i]\n[j] [k][k]\n[j]"
,"[a] [b][b] [c]\n [c]\n [c][c]\n [c][c]\n[d] [e][e][e] [f][f]\n[d][d][d] [f][f]\n [f]\n[g] [h] [i]\n [i][i]\n [i][i]\n [i]\n[j] [k] [l][l]\n[j]\n[j]\n[j]"
,"[a] [b] [c][c][c]\n[a] [b] [c][c]\n[a] [b]\n[a]\n[a][a]\n[d] [e] [f][f]\n [e][e]\n [e][e]\n [e]\n[g] [h] [i][i]\n [i][i]\n [i][i]\n[j] [k][k][k]\n[j]"
,"[a][a][a] [b] [c]\n [c]\n [c]\n [c][c]\n [c]\n[d][d][d] [e] [f]\n [d] [f]\n [f]\n[g][g] [h] [i]\n [h] [i][i][i]\n [i][i]\n[j][j] [k]\n[j][j] [k]\n[j][j]"
,"[a][a] [b][b] [c][c]\n [b][b]\n [b]\n[d] [e][e][e] [f]\n[d] [e][e][e] [f]\n[d][d]\n [d][d]\n[g][g][g] [h] [i]\n [h] [i][i]\n [h]\n[j] [k]\n [k]\n [k]"
,"[a][a][a] [b][b] [c]\n [a] [c][c][c]\n [c][c]\n[d] [e] [f]\n [f]\n [f]\n [f]\n[g] [h][h] [i][i][i]\n[g] [h][h]\n[g] [h][h]\n[g][g][g]\n[j][j][j]"
,"[a][a] [b][b] [c][c][c][c][c]\n[a][a][a] [b]\n[d] [e][e][e] [f]\n[d] [e][e][e] [f]\n[d][d][d][d] [f]\n [f]\n [f]\n[g] [h]\n [h]\n [h]\n [h]\n [h]"
,"[a] [b][b] [c]\n[a] [c]\n[a] [c]\n[a] [c]\n[a]\n[d] [e] [f]\n[g] [h][h][h][h] [i][i][i]\n[g] [i][i][i]\n[g][g][g][g]\n[j][j]\n[j][j][j][j]"
,"[a] [b] [c]\n [b][b]\n [b][b][b]\n[d][d][d] [e] [f][f]\n [d][d] [e] [f][f]\n [d] [e]\n [e]\n[g][g] [h] [i][i][i]\n [h] [i][i][i]\n [h]\n[j][j][j]"
,"[a][a] [b][b] [c]\n [c]\n [c]\n [c]\n [c][c]\n[d] [e] [f][f][f]\n [e]\n [e]\n [e][e][e]\n[g][g] [h] [i]\n [h][h][h] [i]\n [h][h] [i]\n[j] [k]\n [k]\n [k]\n [k]"
,"[a] [b] [c][c][c][c][c]\n[a]\n[a][a][a][a]\n[d][d] [e] [f]\n[d][d]\n[g] [h][h] [i]\n[g] [h][h][h] [i]\n[j] [k]\n[j] [k]\n[j] [k]\n [k][k]\n [k]"
,"[a] [b] [c]\n[a][a] [b]\n [b]\n [b][b]\n [b]\n[d] [e] [f][f][f]\n[d] [e] [f][f][f]\n [e]\n[g] [h] [i]\n [h] [i]\n [h] [i][i][i]\n [i]\n[j][j][j][j][j]"
,"[a] [b] [c][c]\n [b] [c][c]\n [b]\n [b]\n[d][d] [e][e][e] [f][f]\n[d][d]\n[g] [h][h] [i][i]\n [h][h] [i][i]\n [h][h]\n[j] [k]\n [k]\n [k][k][k]\n [k]"
,"[a][a] [b][b] [c]\n [a][a] [b] [c]\n [a] [b] [c]\n [b] [c]\n[d] [e] [f]\n [f][f]\n [f][f][f]\n[g][g] [h][h][h] [i]\n[j][j] [k][k]\n [k][k][k][k]"
,"[a] [b] [c]\n [c]\n [c]\n [c][c]\n [c]\n[d] [e][e] [f][f]\n [e][e][e]\n [e]\n[g] [h] [i][i][i]\n [h]\n [h]\n [h]\n [h]\n[j][j] [k] [l]\n [k] [l]\n [l][l]\n [l][l]"
,"[a][a] [b] [c]\n [a] [c][c]\n [a] [c]\n [a] [c]\n [a] [c]\n[d] [e] [f]\n[d] [f]\n[d][d] [f]\n [d] [f]\n [d]\n[g][g][g] [h][h] [i]\n [i]\n [i]\n [i]\n [i][i]\n[j]"
,"[a] [b] [c][c]\n [b]\n [b]\n[d] [e][e] [f]\n[d][d][d] [e] [f][f]\n[d][d] [f][f][f]\n[g][g][g] [h][h][h] [i][i]\n [h][h] [i][i]\n[j] [k]\n[j]"
,"[a][a][a] [b][b] [c]\n [b] [c][c][c]\n [c][c]\n[d] [e][e] [f][f]\n[d] [f][f]\n[g] [h] [i][i][i][i]\n[g][g] [h] [i][i]\n[g][g][g] [h]\n[j]"
,"[a][a][a] [b] [c]\n [c]\n [c][c]\n [c][c]\n[d] [e] [f]\n[d][d][d] [e] [f]\n [f][f]\n [f][f]\n[g] [h] [i][i]\n[g] [h]\n[g] [h]\n[j][j][j]\n[j][j]\n [j]"
,"[a] [b] [c]\n [b] [c][c][c][c]\n [b] [c]\n[d][d] [e][e][e] [f]\n[d][d][d][d]\n[g] [h] [i][i][i]\n[g] [h]\n[g]\n[j][j] [k]\n [k]\n [k][k][k]\n [k]"
,"[a] [b] [c]\n[a] [c]\n[a] [c]\n[a][a]\n [a]\n[d] [e][e] [f][f]\n[g][g] [h][h][h] [i]\n[g][g] [i]\n [g]\n[j] [k] [l]\n[j] [k] [l]\n[j][j] [k]\n [j][j]"
,"[a] [b] [c][c]\n [b] [c][c]\n [b] [c][c]\n [b]\n [b][b]\n[d][d][d][d] [e] [f]\n [e][e]\n [e][e]\n [e]\n[g] [h] [i]\n [h]\n [h]\n [h]\n[j] [k] [l][l]\n [l][l]"
,"[a] [b][b][b] [c]\n[a][a] [b] [c]\n[a][a] [b] [c]\n [c][c][c]\n[d][d] [e] [f]\n [e] [f][f][f]\n [f][f]\n[g] [h][h][h] [i]\n[g]\n[g]\n[j][j][j]"
,"[a][a] [b][b][b] [c]\n [b] [c]\n[d] [e] [f][f][f][f]\n[d][d][d][d][d]\n[g] [h] [i]\n[g] [h][h][h] [i]\n[g][g][g] [h][h] [i]\n [g]\n[j] [k]"
,"[a] [b][b][b][b] [c]\n[a][a][a] [c]\n [a][a] [c]\n[d] [e] [f]\n[d] [f]\n[g][g][g] [h] [i][i]\n [g] [i][i]\n[j] [k]\n[j] [k]\n[j][j] [k]\n [j]\n [j]"
,"[a][a][a] [b] [c][c][c]\n [a][a] [b] [c][c][c]\n [a] [b]\n[d] [e][e][e][e] [f]\n[d]\n[d]\n[d][d]\n [d]\n[g] [h] [i]\n[g]\n[j]\n[j][j]\n[j][j][j]"
,"[a][a][a] [b] [c]\n [b]\n [b]\n[d] [e] [f]\n[d] [e] [f][f]\n[d]\n[d][d][d]\n[g] [h] [i][i][i][i]\n[j] [k][k]\n[j][j] [k][k]\n[j][j][j] [k]\n [k]"
,"[a][a] [b][b][b] [c]\n[a][a] [c][c]\n [c][c][c]\n[d] [e][e] [f]\n [f]\n [f]\n [f]\n[g] [h] [i][i]\n[g][g] [h] [i]\n [h]\n[j][j] [k]\n [j][j]\n [j]\n [j]"
,"[a] [b] [c][c][c][c][c]\n[a] [b]\n[a]\n[d][d][d] [e] [f]\n[d][d][d] [e] [f]\n [e][e] [f]\n [e][e] [f]\n [f][f]\n[g] [h] [i][i]\n [i][i]\n [i][i]"
,"[a] [b] [c]\n[a] [b]\n[a] [b][b]\n[a] [b][b]\n[d][d][d][d] [e] [f][f]\n [f][f]\n[g][g] [h] [i][i]\n[g][g] [h][h][h] [i][i]\n [g][g] [i]\n[j]"
,"[a] [b][b][b] [c]\n[a][a][a] [b]\n[a][a] [b]\n[d][d][d] [e] [f]\n [e][e][e]\n [e][e]\n[g][g] [h] [i]\n [h] [i]\n [h]\n[j] [k][k]\n[j] [k][k]\n[j]"
,"[a][a] [b][b][b][b] [c]\n [a][a] [c]\n [a][a]\n[d] [e] [f]\n[d]\n[d][d]\n [d]\n [d]\n[g][g] [h] [i]\n[g][g] [i]\n[j] [k]\n[j] [k][k]\n[j] [k]\n [k]\n [k]"
,"[a][a] [b] [c]\n [b] [c]\n [b]\n[d][d][d] [e] [f]\n[d][d][d] [e] [f][f]\n [e] [f][f][f]\n[g] [h] [i]\n [h] [i]\n [i][i]\n [i]\n [i]\n[j] [k] [l][l][l]"
,"[a] [b] [c]\n [c]\n [c]\n[d] [e][e][e] [f]\n [f]\n [f]\n [f][f][f]\n[g] [h][h][h][h] [i]\n[g] [i][i]\n [i][i][i]\n[j][j] [k][k]\n[j][j] [k][k]\n [k]"
,"[a][a][a] [b] [c]\n [b][b][b][b] [c]\n [b] [c]\n[d] [e][e][e] [f][f]\n[d] [e][e][e]\n[d][d][d][d]\n[g][g] [h] [i]\n[g][g] [h]\n[j][j][j]"
,"[a] [b][b][b] [c]\n[a] [b] [c]\n[a] [c][c][c]\n [c]\n[d][d] [e][e][e][e] [f]\n[d][d]\n[g] [h] [i]\n [h][h][h] [i]\n [h][h]\n[j] [k][k]\n [k][k]"
,"[a][a][a] [b] [c][c][c]\n [c]\n[d] [e] [f]\n[d] [f][f][f]\n[d] [f][f]\n[g] [h][h] [i]\n [h][h] [i]\n [i]\n[j] [k] [l][l]\n[j] [k][k][k]\n [k][k]"
,"[a] [b] [c]\n[a] [b][b]\n[a] [b][b][b]\n[a]\n[d] [e] [f][f][f]\n[d][d] [e] [f][f]\n[d][d] [e]\n [d] [e]\n[g][g] [h] [i]\n[j] [k][k][k]\n[j][j]"
,"[a][a][a][a][a] [b] [c][c]\n [c][c]\n[d][d][d] [e] [f][f]\n[d][d][d] [f]\n [f]\n[g] [h][h] [i]\n[g] [h][h][h] [i]\n[g][g][g][g] [i]\n [i]"
,"[a][a] [b] [c][c][c]\n [b]\n [b]\n [b][b]\n [b]\n[d] [e][e] [f]\n[d]\n[d]\n[d]\n[g][g] [h] [i]\n [g] [i]\n [g] [i][i]\n [i]\n [i]\n[j] [k]\n [k][k]\n [k]\n [k][k]"
,"[a][a] [b] [c][c]\n[a][a][a] [b][b]\n [a]\n[d] [e] [f]\n[d] [e] [f]\n[d][d][d] [e]\n [d]\n[g] [h][h][h] [i][i][i]\n [i][i][i]\n[j][j]\n [j]\n [j]"
,"[a][a][a][a] [b] [c]\n [c][c]\n [c][c][c]\n[d][d][d] [e][e][e] [f]\n [e][e] [f]\n [f]\n[g] [h] [i]\n[g] [h] [i]\n [h] [i]\n [h] [i][i][i]\n [h]\n[j]"
,"[a] [b] [c][c][c]\n[a] [b]\n[a][a] [b][b]\n [b][b]\n[d][d] [e] [f]\n [d][d] [e][e]\n [d] [e]\n [d] [e]\n [e]\n[g][g] [h] [i]\n [h]\n [h]\n [h]\n [h]\n[j][j]"
,"[a] [b][b][b][b] [c]\n[a]\n[a][a][a][a]\n[d] [e] [f]\n[d] [e] [f]\n [e] [f]\n[g][g][g] [h][h][h] [i][i]\n[g][g][g] [h][h][h] [i][i]\n[j]"
,"[a] [b][b][b][b] [c]\n[a][a] [b][b]\n[a][a][a]\n[d] [e][e] [f][f]\n[d] [e][e] [f]\n[d]\n[d]\n[g][g][g] [h] [i]\n [h][h][h]\n [h][h]\n[j][j]"
,"[a][a] [b] [c][c][c][c][c]\n[a][a][a]\n[d][d][d] [e] [f][f]\n [d]\n [d]\n[g] [h] [i]\n[g][g][g] [h] [i]\n [g][g] [i]\n[j]\n[j]\n[j][j]\n[j][j]"
,"[a][a][a] [b] [c]\n [b][b][b] [c]\n [b][b] [c]\n [c]\n [c]\n[d][d] [e] [f][f]\n [f][f]\n[g][g][g] [h] [i]\n [g] [i][i]\n [g][g] [i][i][i]\n[j]\n[j]"
,"[a] [b][b] [c]\n[d] [e] [f]\n[d]\n[g][g] [h][h] [i]\n[g][g][g] [i]\n [g] [i][i]\n [i][i]\n[j][j][j] [k] [l]\n [k] [l]\n [k] [l]\n [l][l]\n [l]\n[m]\n[m]"
,"[a] [b] [c]\n [b] [c]\n [b][b]\n [b][b]\n[d][d][d][d][d] [e] [f][f][f]\n [f][f][f]\n[g] [h] [i][i]\n[g] [h][h] [i][i]\n[g] [i][i]\n[j]\n[j]\n[j]"
,"[a] [b][b][b] [c]\n[a][a] [b] [c]\n[a][a][a] [b][b] [c]\n[d][d] [e] [f]\n [f][f][f]\n [f][f]\n[g][g][g] [h] [i]\n [h] [i]\n[j][j] [k]\n[j][j]"
,"[a][a][a] [b][b][b] [c]\n [a] [b][b][b] [c]\n [a]\n[d] [e] [f]\n[d] [e][e][e] [f]\n[d] [e][e]\n[g] [h] [i][i][i]\n[g]\n[g][g]\n [g]\n [g]\n[j][j]"
,"[a] [b] [c][c][c][c]\n[a][a] [b]\n [a] [b]\n [a][a]\n[d] [e] [f]\n [e]\n [e][e]\n [e]\n [e]\n[g][g] [h] [i]\n [h] [i]\n[j] [k] [l][l]\n [k] [l][l]\n [l][l]"
,"[a] [b] [c]\n[d] [e] [f]\n[d][d] [e] [f]\n [d][d] [e][e] [f]\n [d] [e][e]\n[g] [h] [i][i][i][i]\n[g] [h]\n[j][j][j] [k]\n [j][j] [k][k][k]\n [j]"
,"[a] [b] [c]\n[a]\n[a]\n[a]\n[d] [e][e][e][e] [f][f]\n [f][f]\n[g][g][g] [h] [i][i][i]\n [h] [i][i][i]\n [h][h][h][h]\n[j]\n[j]\n[j]\n[j][j][j]"
,"[a][a] [b] [c]\n[a][a]\n[d][d][d][d][d] [e] [f]\n [e][e][e] [f]\n [e][e] [f]\n [f]\n [f]\n[g] [h] [i]\n[g] [h][h]\n[g][g]\n [g][g]\n[j][j][j]\n [j]"
,"[a] [b][b][b] [c]\n[a] [b] [c]\n[a][a][a] [b] [c]\n [b]\n[d] [e][e] [f][f]\n [f][f]\n[g] [h] [i]\n[g] [h][h][h] [i]\n [h][h] [i]\n[j] [k][k][k]"
,"[a] [b] [c]\n [b] [c]\n [b][b]\n [b][b]\n[d] [e] [f]\n[d] [e]\n[d] [e]\n[d]\n[d][d]\n[g] [h] [i][i]\n[g][g] [h][h] [i]\n [h][h]\n [h]\n[j] [k][k][k][k]"
,"[a][a] [b] [c][c][c][c][c]\n [b]\n [b]\n[d] [e] [f][f][f]\n [e] [f][f][f]\n[g] [h][h] [i]\n [h] [i]\n [h] [i][i]\n [i][i]\n[j]\n[j]\n[j]\n[j]\n[j][j]"
,"[a][a][a] [b][b] [c][c]\n [b][b]\n[d] [e] [f][f]\n[d] [e] [f][f]\n[d]\n[g] [h] [i]\n [h] [i][i]\n [h] [i][i][i]\n [h]\n [h]\n[j][j][j]\n [j][j]\n [j]"
,"[a][a] [b][b] [c]\n[a][a] [c][c]\n[a][a] [c]\n [c]\n [c]\n[d] [e][e][e] [f]\n [f]\n [f]\n[g] [h][h][h] [i]\n[g] [h][h] [i]\n[j]\n[j]\n[j][j]\n [j]\n [j]"
,"[a][a] [b] [c]\n[a][a] [b] [c]\n [b][b][b] [c]\n [b] [c][c][c]\n[d] [e] [f][f]\n[d]\n[g][g][g] [h][h][h] [i]\n [i]\n [i]\n[j]\n[j]\n[j]\n[j]\n[j][j]"
]
to=0
function update() {
var nt=+I.value
var test = Test[nt-1]
if (test) {
O.textContent = test
clearTimeout(to)
to = setTimeout(_=>{
I.disabled = true
var t = + new Date()
var [d,r]=F(test)
O.textContent = 'Time '+(new Date-t)/1000+' sec'+d+r.join`\n`+'\n'+test
I.disabled = false
}, 800)
}
}
update()
Test # <input id=I value=1 type=number oninput='update()' max=101 min=1> (1 to 101, be patient: some testcase is slow to solve)
<pre id=O></pre>