move_list = [] for i in range(1,17): move_list_part = [i-4,i+4] if i % 4 != 0: move_list_part += [i+1] if i % 4 != 1: move_list_part += [i-1] move_list.append(move_list_part) move_list = [ [ move_list[i][j] for j in range(len(move_list[i])) if 1 <= move_list[i][j] <= 16 ] for i in range(16) ] move_list = [ sorted(move_list[i]) for i in range(16) ] fit_list = [] for i in range(4): row = [ int(v) for v in input().split() ] for j in range(4): fit_list.append([4*i+j+1,row[j]]) def fitting(inlist): outlist = [] for i in range(len(inlist)): if inlist[i][0] != inlist[i][1]: outlist.append(inlist[i]) return outlist def move(): target_index = -1 target, target2 = -1, -1 for i in range(len(yet_fit_list)): if yet_fit_list[i][1] == 0: target = yet_fit_list[i][0] target_index = i if target_index != -1: for i in range(len(yet_fit_list)): if yet_fit_list[i][1] == target: target2 = yet_fit_list[i][0] target2_index = i if target2 in move_list[target-1]: yet_fit_list[target_index][1] = target yet_fit_list[target2_index][1] = 0 else: pass return def judge(): if yet_fit_list == [[16,0]]: print("Yes") return 1 else: return 0 yet_fit_list = fitting(fit_list) for i in range(16): if judge() == 1: break move() yet_fit_list = fitting(yet_fit_list) else: print("No")