Language: C++

from __future__ import print_function

from functools import reduce
from operator import mul
from collections import Counter
from collections import deque
from itertools import accumulate
from queue import Queue
from queue import PriorityQueue as pq
from heapq import heapreplace
from heapq import heapify
from heapq import heappushpop
from heapq import heappop
from heapq import heappush
import heapq
import time
import random
import bisect
import itertools
import collections
from fractions import Fraction
import fractions
import string
import math
import operator
import functools
import copy
import array
import re
import sys
sys.setrecursionlimit(500000)


import pprint

input = sys.stdin.readline


def eprint(*args, **kwargs):
    print(*args, file=sys.stderr, **kwargs)
    return

# from fractions import gcd
# from math import gcd

# def lcm(n, m):
#     return int(n * m / gcd(n, m))


# def coprimize(p, q):
#     common = gcd(p, q)
#     return (p // common, q // common)


# def find_gcd(list_l):
#     x = reduce(gcd, list_l)
#     return x


def combinations_count(n, r):
    r = min(r, n - r)
    numer = reduce(mul, range(n, n - r, -1), 1)
    denom = reduce(mul, range(1, r + 1), 1)
    return numer // denom


mod = 1000000007


def combinations_count_mod(n, r):
    r = min(r, n - r)
    numer = reduce(lambda x, y: x * y % mod, range(n, n - r, -1), 1)
    denom = pow(reduce(lambda x, y: x * y % mod, range(1, r + 1), 1), mod - 2, mod)
    return numer * denom % mod


def solve():
    pass


delta_u = [(1, 0), (0, 1), (-1, 0), (0, -1)]
# [(u, v) for u in range(-2, 3) for v in range(-2, 3)]
delta2_u = [(-1, -1), (-1, 1), (1, -1), (1, 1), (-2, -2), (-2, -1), (-2, 0), (-2, 1), (-2, 2), (-1, -2), (-1, 2), (0, -2), (0, 2), (1, -2), (1, 2), (2, -2), (2, -1), (2, 0), (2, 1), (2, 2)]


def main():
    #
    H, W = map(int, input().strip().split())
    Ch, Cw = map(lambda x: int(x) -1 + 2, input().strip().split())
    Dh, Dw = map(lambda x: int(x) -1 + 2, input().strip().split())
    GRID = []
    ANS = []
    for i in range(H + 4):
        ANS.append([sys.maxsize for _ in range(W+4)])

    GRID.append("#" * (W+4))
    GRID.append("#" * (W+4))
    for i in range(H):
        S = "##" + input().strip() + "##"
        GRID.append(S)
    GRID.append("#" * (W+4))
    GRID.append("#" * (W+4))

    # eprint('GRID ',end=':\n')
    # pprint.pprint(GRID)
    # eprint('ANS ',end=':\n')
    # pprint.pprint(ANS)


    #
    PQ = pq()
    PQ.put((0, Ch, Cw))
    while not(PQ.empty()):
        distance, Uh, Uw = PQ.get()
        distance = -distance

        # ANS[Uh][Uw] の 「スコア」 の 「更新」
        if distance >= ANS[Uh][Uw]:
            continue
        ANS[Uh][Uw] = distance

        #
        for delta_h, delta_w in delta_u:
            new_distance = distance
            new_Uh = Uh + delta_h
            new_Uw = Uw + delta_w
            if GRID[new_Uh][new_Uw] == "#":    #
                continue
            if new_distance >= ANS[new_Uh][new_Uw]:  # 「新しい距離」 が，今までに記録していたその座標における「古い距離」 よりも大きくなってしまう場合，その新しい地点はキューに追加しない()
                continue
            PQ.put((-new_distance, new_Uh, new_Uw))

        for delta_h, delta_w in delta2_u:
            new_distance = distance + 1
            new_Uh = Uh + delta_h
            new_Uw = Uw + delta_w
            if GRID[new_Uh][new_Uw] == "#":    #
                continue
            if new_distance >= ANS[new_Uh][new_Uw]:  # 「新しい距離」 が，今までに記録していたその座標における「古い距離」 よりも大きくなってしまう場合，その新しい地点はキューに追加しない()
                continue
            PQ.put((-new_distance, new_Uh, new_Uw))

    if ANS[Dh][Dw] != sys.maxsize:
        print(ANS[Dh][Dw])
    else:
        print(-1)


if __name__ == '__main__':
    main()


Compiler output:
a.cc:43:3: error: invalid preprocessing directive #from
   43 | # from fractions import gcd
      |   ^~~~
a.cc:44:3: error: invalid preprocessing directive #from
   44 | # from math import gcd
      |   ^~~~
a.cc:46:3: error: invalid preprocessing directive #def; did you mean #ifdef?
   46 | # def lcm(n, m):
      |   ^~~
      |   ifdef
a.cc:47:7: error: invalid preprocessing directive #return
   47 | #     return int(n * m / gcd(n, m))
      |       ^~~~~~
a.cc:50:3: error: invalid preprocessing directive #def; did you mean #ifdef?
   50 | # def coprimize(p, q):
      |   ^~~
      |   ifdef
a.cc:51:7: error: invalid preprocessing directive #common
   51 | #     common = gcd(p, q)
      |       ^~~~~~
a.cc:52:7: error: invalid preprocessing directive #return
   52 | #     return (p // common, q // common)
      |       ^~~~~~
a.cc:55:3: error: invalid preprocessing directive #def; did you mean #ifdef?
   55 | # def find_gcd(list_l):
      |   ^~~
      |   ifdef
a.cc:56:7: error: invalid preprocessing directive #x
   56 | #     x = reduce(gcd, list_l)
      |       ^
a.cc:57:7: error: invalid preprocessing directive #return
   57 | #     return x
      |       ^~~~~~
a.cc:82:3: error: invalid preprocessing directive #[
   82 | # [(u, v) for u in range(-2, 3) for v in range(-2, 3)]
      |   ^
a.cc:104:7: error: invalid preprocessing directive #eprint
  104 |     # eprint('GRID ',end=':\n')
      |       ^~~~~~
a.cc:105:7: error: invalid preprocessing directive #pprint
  105 |     # pprint.pprint(GRID)
      |       ^~~~~~
a.cc:106:7: error: invalid preprocessing directive #eprint
  106 |     # eprint('ANS ',end=':\n')
      |       ^~~~~~
a.cc:107:7: error: invalid preprocessing directive #pprint
  107 |     # pprint.pprint(ANS)
      |       ^~~~~~
a.cc:117:11: error: invalid preprocessing directive #ANS
  117 |         # ANS[Uh][Uw] の 「スコア」 の 「更新」
      |           ^~~
a.cc:117:26: error: extended character 「 is not valid in an identifier
  117 |         # ANS[Uh][Uw] の 「スコア」 の 「更新」
      |                          ^
a.cc:117:26: error: extended character 」 is not valid in an identifier
a.cc:117:40: error: extended character 「 is not valid in an identifier
  117 |         # ANS[Uh][Uw] の 「スコア」 の 「更新」
      |                                        ^
a.cc:117:40: error: extended character 」 is not valid in an identifier
a.cc:127:48: error: stray '#' in program
  127 |             if GRID[new_Uh][new_Uw] == "#":    #
      |                                                ^
a.cc:129:54: error: stray '#' in program
  129 |             if new_distance >= ANS[new_Uh][new_Uw]:  # 「新しい距離」 が，今までに記録していたその座標における「古い距離」 よりも大きくなってしまう場合，その新しい地点はキューに追加しない()
      |                                                      ^
a.cc:129:56: error: extended character 「 is not valid in an identifier
  129 |             if new_distance >= ANS[new_Uh][new_Uw]:  # 「新しい距離」 が，今までに記録していたその座標における「古い距離」 よりも大きくなってしまう場合，その新しい地点はキューに追加しない()
      |                                                        ^
a.cc:129:56: error: extended character 」 is not valid in an identifier
a.cc:129:71: error: extended character 「 is not valid in an identifier
  129 |             if new_distance >= ANS[new_Uh][new_Uw]:  # 「新しい距離」 が，今までに記録していたその座標における「古い距離」 よりも大きくなってしまう場合，その新しい地点はキューに追加しない()
      |                                                                       ^
a.cc:129:71: error: extended character 」 is not valid in an identifier
a.cc:137:48: error: stray '#' in program
  137 |             if GRID[new_Uh][new_Uw] == "#":    #
      |                                                ^
a.cc:139:54: error: stray '#' in program
  139 |             if new_distance >= ANS[new_Uh][new_Uw]:  # 「新しい距離」 が，今までに記録していたその座標における「古い距離」 よりも大きくなってしまう場合，その新しい地点はキューに追加しない()
      |                                                      ^
a.cc:139:56: error: extended character 「 is not valid in an identifier
  139 |             if new_distance >= ANS[new_Uh][new_Uw]:  # 「新しい距離」 が，今までに記録していたその座標における「古い距離」 よりも大きくなってしまう場合，その新しい地点はキューに追加しない()
      |                                                        ^
a.cc:139:56: error: extended character 」 is not valid in an identifier
a.cc:139:71: error: extended character 「 is not valid in an identifier
  139 |             if new_distance >= ANS[new_Uh][new_Uw]:  # 「新しい距離」 が，今までに記録していたその座標における「古い距離」 よりも大きくなってしまう場合，その新しい地点はキューに追加しない()
      |                                                                       ^
a.cc:139:71: error: extended character 」 is not valid in an identifier
a.cc:149:16: warning: multi-character literal with 8 characters exceeds 'int' size of 4 bytes
  149 | if __name__ == '__main__':
      |                ^~~~~~~~~~
a.cc:1:1: error: 'from' does not name a type
    1 | from __future__ import print_function
      | ^~~~