# made by Claude import sys # ---- 基点となる行パターン ---- BASE5 = ("01010", "10011", "01100") # H=5 用, W=5 (A,B,C) BASE7 = ("0101010", "1100011", "0011100") # H=5 用, W=7 (A,B,C) PATCH = ("0101", "1001", "0110") # W += 4 用の共通パッチ(先頭に付加) BASE3_W5 = ("00011", "01100", "11001") # H=3 用, W=5 PATCH3_W5 = ("0011", "0110", "1100") # H=3, W%4==1 系列のパッチ BASE3_W7 = ("0010011", "1100110", "1011000") # H=3 用, W=7 PATCH3_W7 = ("0010", "1100", "1011") # H=3, W%4==3 系列のパッチ def _grow_rows(rows, patches, times): """各行の先頭に patches を times 回 prepend する""" rows = list(rows) for _ in range(times): rows = [p + r for p, r in zip(patches, rows)] return rows def _build_5plus_family(H: int, W: int): """H(奇数,>=5) x W(奇数,>=5) を構成する ( A,B,(C,B)*m,A 型 )""" if W % 4 == 1: A, B, C = BASE5 k = (W - 5) // 4 else: # W % 4 == 3 A, B, C = BASE7 k = (W - 7) // 4 A, B, C = _grow_rows((A, B, C), PATCH, k) m = (H - 5) // 2 rows = [A, B] for _ in range(m): rows += [C, B] rows += [C, B, A] return rows def _build_3row_family(W: int): """H=3 x W(奇数,>=5) を構成する""" if W % 4 == 1: base, patch, w0 = BASE3_W5, PATCH3_W5, 5 else: # W % 4 == 3 base, patch, w0 = BASE3_W7, PATCH3_W7, 7 k = (W - w0) // 4 return _grow_rows(base, patch, k) def _transpose(rows): H, W = len(rows), len(rows[0]) return ["".join(rows[i][j] for i in range(H)) for j in range(W)] def solve(H: int, W: int): """H x W の条件を満たすグリッドを構成する。存在しない場合は None を返す。""" if H % 2 == 0: return ["0" * W if i % 2 == 0 else "1" * W for i in range(H)] if W % 2 == 0: row = "".join("0" if j % 2 == 0 else "1" for j in range(W)) return [row for _ in range(H)] # ここから H, W はともに奇数 if H == 3 and W == 3: return None if H == 3: return _build_3row_family(W) if W == 3: return _transpose(_build_3row_family(H)) return _build_5plus_family(H, W) T = int(input()) for _ in range(T): H, W = map(int, sys.stdin.readline().split()) grid = solve(H, W) if grid is None: print("No") continue print("Yes") print("\n".join(grid))