Harryxun/stf_run huggingface dataset:
from collections import deque


n, m = map(int, input().split())
edges = [set() for _ in range(n)]
r_edges = [set() for _ in range(n)]
out_deg = [0]*n

for _ in range(m):
    a, b = map(int, input().split())
    edges[a-1].add(b-1)
    r_edges[b-1].add(a-1)
    out_deg[a-1] += 1

out_deg_node = sorted(range(len(out_deg)), key=lambda k: out_deg[k])
ng_node = set()

for node in out_deg_node:
    if out_deg[node] == 0:
        for rev in r_edges[node]:
            out_deg[rev] -= 1

        ng_node.add(node)
        edges[node] = []

    else:
        break

for i in range(n):
    edges[i] -= ng_node


def bfs(node):
    seen = [0] * n
    todo = deque([])
    for to in edges[node]:
        todo.append([to, 1, {to}])

    while todo:
        now, distance, path = todo.popleft()
        seen[now] = distance
        if now == node:
            return distance, path

        for next_node in edges[now]:  # type: int
            if seen[next_node] != 0:
                continue
            new_path = path | {next_node}
            todo.append([next_node, distance + 1, new_path])

    return float('INF'), set()


cycle_size = [float('INF')] * n
cycle_nodes = [set()] * n

for i in range(n):
    if i in ng_node:
        continue
    cycle_size[i], cycle_nodes[i] = bfs(i)

mini_cycle = min(cycle_size)
if mini_cycle == float('INF'):
    print(-1)
else:
    idx = cycle_size.index(mini_cycle)
    ans = cycle_nodes[idx]
    print(mini_cycle)
    for node in ans:
        print(node+1)


### FIXED CODE ###

n, m = map(int, input().split())
edges = [[] for _ in range(n)]

for _ in range(m):
    a, b = map(int, input().split())
    edges[a-1].append(b-1)


def get_first_cycle(n, edges):
    seen = [-1] * n  # seen: -1: 未確認, 0: 非cycleのnode, 1: cycle候補
    for start in range(n):
        if seen[start] == 0:
            continue
        seen[start] = 1
        path = [start]
        while path:
            now = path[-1]
            if not edges[now]:
                path.pop()
                seen[now] = 0
                continue

            next_node = edges[now].pop()
            if seen[next_node] == -1:
                path.append(next_node)
                seen[next_node] = 1

            elif seen[next_node] == 1:
                idx = path.index(next_node)
                cycle = path[idx:]
                return cycle
    return False


cycle = get_first_cycle(n, edges)
if not cycle:
    print(-1)
    exit()

nodes = set(cycle)
length = len(cycle)
i = 0
while i < length:
    now = cycle[i]
    routes = edges[now]
    while routes:
        to = routes.pop()
        if to in nodes:
            update = True
            idx = cycle.index(to)
            cycle = cycle[:i+1] + cycle[idx:]
            nodes = set(cycle)
            length = len(cycle)
            break
    i += 1

print(len(cycle))
for node in cycle:
    print(node+1)
n = int(input())
a = list(map(int, input().split()))

if 0 in a:
  print(0)
  break

ans = 1
for i in a:
  ans *= a
  if ans > 10**18:
    print(-1)
    break

print(ans)


### FIXED CODE ###

n = int(input())
a = sorted(map(int, input().split()))

ans = 1
for i in a:
  ans *= i
  if ans > 10**18:
    print(-1)
    break

else:
    print(ans)
setA = set([i for i in range(A,min(A+K,B+1))])
setB = set([i for i in range(max(A,B-K+1),B+1)])
setAB = sorted(setA | setB)
for i in list(setAB):
    print(i)

### FIXED CODE ###

A, B, K = map(int, input().split())
setA = set([i for i in range(A,min(A+K,B+1))])
setB = set([i for i in range(max(A,B-K+1),B+1)])
setAB = sorted(setA | setB)
for i in list(setAB):
    print(i)
n,K=map(int,input().split())
s_list=[]
for i in range(n):
    s_list.append([])
for i in range(n):
    t,d=map(int,input().split())
    s_list[t-1].append(d)
s_list=[i for i in s_list if not i==[]]
n_list=[]
for i in s_list:
    i.sort(reverse=True)
    n_list.append(len(i))
dp={}
def f(i,v,k):
    if (i,v,k) in dp:
        return dp[(i,v,k)]
    else:
        if i==len(n_list):
            if k==0:
                return 0
            else:
                return -10**9
        elif k==0:
            return 0
        else:
            Max=f(i+1,v,k)
            for j in range(0,n_list[i]):
                if k-j-1>=0:
                    m=f(i+1,v+1,k-j-1)+2*v+1+sum(s_list[i][0:j+1])
                    if m>Max:
                        Max=m
            dp[(i,v,k)]=Max
            return(Max)
print(f(0,0,K))
    
    


### FIXED CODE ###

n,k=map(int,input().split())
sushi=[]
for i in range(n):
    sushi.append([])
for i in range(n):
    t,d=map(int,input().split())
    sushi[t-1].append(d)
Max=[]
Rest=[]
v=0
for i in sushi:
    if not i==[]:
        Max.append(max(i))
        i.remove(max(i))
        for j in i:
            Rest.append(j)
        v=v+1
Max.sort(reverse=True)
Rest.sort(reverse=True)
Max_s=[]
Rest_s=[0]
Sum=0
for i in Max:
    Sum=Sum+i
    Max_s.append(Sum)
Sum=0
l_r=0
for i in Rest:
    Sum=Sum+i
    Rest_s.append(Sum)
    l_r=l_r+1
ans=0
for i in range(1,min(k,v)+1):
    if k-i<=l_r:
        temp=Max_s[i-1]+Rest_s[k-i]+i**2
        if ans<temp:
            ans=temp
print(ans)
input();print(max(int(i) for i in input().split() if int(i) in [1 << i for i in range(9)]))


### FIXED CODE ###

input()
n = eval(input().replace(' ', '|'))
for i in range(201):
    if n & 1 << i:
        print(i)
        break
8 1000 800 100
300
333
400
444
500
555
600
666

### FIXED CODE ###

N, A, B, C = map(int, input().split())
l = []
for i in range(N):
    l.append(int(input()))
ans = 100000000


def rec(a, b, c, d):
    if d == N:
        if a[1] > 0 and b[1] > 0 and c[1] > 0:
            global ans
            ans = min(
                ans,
                abs(
                    a[0] - A) + abs(b[0] - B) + abs(c[0] - C)
                + 10 * (a[1] + b[1] + c[1] - 3)
            )
        return
    rec((a[0] + l[d], a[1] + 1), b, c, d + 1)
    rec(a, (b[0] + l[d], b[1] + 1), c, d + 1)
    rec(a, b, (c[0] + l[d], c[1] + 1), d + 1)
    rec(a, b, c, d + 1)


rec((0, 0), (0, 0), (0, 0), 0)
print(ans)
N=int(input())
for a in range(N//4+1):
    for b in range(N//7+1):
        if 4*a+7*b==N:
            print(Yes)
            exit()
        else:
            print(No)

### FIXED CODE ###

N=int(input())
for a in range(N//4+1):
    for b in range(N//7+1):
        if 4*a+7*b==N:
            print('Yes')
            exit()
  
print('No')
input_line = input()
last_c = ''
bad = False
for i in range(len(input_line)):
  c = input_line[i]
  if last_c == c:
    print('Bad')
    bad = true
    break
  last_c = c
if not bad:
  print('Good')


### FIXED CODE ###

input_line = input()
last_c = ''
bad = False
for i in range(len(input_line)):
  c = input_line[i]
  if last_c == c:
    print('Bad')
    bad = True
    break
  last_c = c
if not bad:
  print('Good')
def search(index: int, dp: list, graph: list) -> int:
    if dp[index] != -1:
        return dp[index]+1

    tmp = 0
    for d in graph[index]:
        tmp = max(tmp, search(d, dp, graph))

    dp[index] = tmp
    return tmp+1


N, M = map(int, input().split())

graph = [ [] for _ in range(N)]
dp = [-1 for _ in range(N)]

for _ in range(M):
    x, y = map(int, input().split())
    graph[x-1].append(y-1)

ans = 0
for i in range(N):
    ans = max(ans, search(i, dp, graph))

print(ans-1)

### FIXED CODE ###

import sys
sys.setrecursionlimit(10 ** 7)

def search(index: int, dp: list, graph: list) -> int:
    if dp[index] != -1:
        return dp[index]+1

    tmp = 0
    for d in graph[index]:
        tmp = max(tmp, search(d, dp, graph))

    dp[index] = tmp
    return tmp+1


N, M = map(int, input().split())

graph = [ [] for _ in range(N)]
dp = [-1 for _ in range(N)]

for _ in range(M):
    x, y = map(int, input().split())
    graph[x-1].append(y-1)

ans = 0
for i in range(N):
    ans = max(ans, search(i, dp, graph))

print(ans-1)
w,h,x,y = map(int,input.split())
s = float((w*h) / 2)
if x+x==w and y+y ==h:
  print(s+"1")
else:
  print(s + "0")

### FIXED CODE ###

w,h,x,y = map(int, input().split())
print('{:.6f} {}'.format(w*h/2, 1 if x+x==w and y+y==h else 0))
a,b = map(int().input().split())
print(max(a+b,a-b,a*b))

### FIXED CODE ###

a,b = map(int,input().split())
print(max(a+b,a-b,a*b))
a = input()
b = input()

if b[0:-1] == a
	print('Yes')
else:
	print('No')


### FIXED CODE ###

S = input()
T = input()
if T[0:-1] == S:
  print('Yes')
else:
  print('No')
x,a,b = [int(input) for i in range(3)]
print((x-a)%b)


### FIXED CODE ###

x,a,b = [int(input()) for i in range(3)]
print((x-a)%b)
while True:
    try:
        a, b, n = map(int, input().split())
    except:
        break

    s = str(a/b)
    sum = 0
    for i in s[2:2+n]:
        sum += int(i)

    print(sum)

### FIXED CODE ###

while True:
    try:
        a, b, n = map(int, input().split())
    except:
        break

    s = str(a/b)
    sum = 0
    x = s.index(".")+1
    for i in s[x:x+n]:
        sum += int(i)

    print(sum)
n = int(input())
a = input().split()
b = a

for i in range(n):
    for j in range(i + 1, n):
        if int(a[j - 1][1]) > int(a[j][1]):
            tmp = a[j - 1]
            a[j - 1] = a[j]
            a[j] = tmp

ra = " ".join(a)

print(ra)
print("Stable")

for i in range(n - 1):
    minj = i
    for j in (i + 1, n):
        if int(b[j][1]) < int(b[minj][1]):
            minj = j
    if minj != i:
        tmp = b[i]
        b[i] = b[minj]
        b[minj] = tmp

rb = " ".join(b)
print(rb)

if ra == rb:
    print("Stable")
else:
    print("Not Stable")

### FIXED CODE ###

import copy

n = int(input())
a = input().split()
b = copy.deepcopy(a)

for i in range(n):
    for j in range(n - 1 - i):
        if int(a[j][1]) > int(a[j + 1][1]):
            tmp = a[j]
            a[j] = a[j + 1]
            a[j + 1] = tmp

ra = " ".join(a)

print(ra)
print("Stable")

for i in range(n - 1):
    minj = i
    for j in range(i + 1, n):
        if int(b[j][1]) < int(b[minj][1]):
            minj = j
    if minj != i:
        tmp = b[i]
        b[i] = b[minj]
        b[minj] = tmp

rb = " ".join(b)
print(rb)

if ra == rb:
    print("Stable")
else:
    print("Not stable")
L, H = map(int, input().split())
N = int(input())
worked_time = [int(input()) for _ in range(N)]

for time in worked_time:
    result = L - time if L > time else "0" if H >= time else "-1"
    print(result)




### FIXED CODE ###

N = int(input())
prices = [int(input()) for _ in range(N)]

print(sum(prices) - max(prices) // 2)
from scipy.special import cmb

# 入力データのinput
N, K = map(int, input().split())

r_cnt = N - K
b_cnt = K

# 1. 赤ボールを並べる
# 2. 青ボールを置く位置のパターン数を求める
#    置ける場所は赤ボールの両端とボールの間

# 3. 青ボールの個数をどのように分けるかのパターン数を求める
#    青ボールの個数を分ける線の数を求める

for i in range(1, K+1):
    print(( cmb( r_cnt+1, i ) * cmb( b_cnt-1, i-1 )) % (10**9+7))

### FIXED CODE ###

from operator import mul
from functools import reduce
def cmb(n, r):
    if r > n:
        return 0
    r = min(n-r, r)
    if r == 0:
        return 1
    over = reduce(mul, range(n, n - r, -1))
    under = reduce(mul, range(1, r + 1))
    return over // under

N, K = map(int, input().split())

r_cnt = N - K
b_cnt = K

for i in range(1, K+1):
    print(( cmb( r_cnt+1, i ) * cmb( b_cnt-1, i-1 )) % (10**9+7))
sl = list(input())
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
if len(sl) != 26:
    for s in ascii_lowercase:
        if s not in sl:
            sl.append(s)
            break
    print("".join(sl))
elif "".join(sl) == "zyxwvutsrqponmlkjihgfedcba":
    print("zyxwvutsrqponmlkjihgfedcba")
else:
    ansl = []
    for s, t in zip(sl, ascii_lowercase):
        if s != t:
            ansl[-1] = t
            print("".join(ansl))
            break
        ansl.append(t)

### FIXED CODE ###

S=input()
if S=='zyxwvutsrqponmlkjihgfedcba':
  print(-1)
  exit()
alp='abcdefghijklmnopqrstuvwxyz'
N=len(S)
if N<26:
  T=S+alp
  i=0
  while T.index(alp[i])<N:
    i+=1
  print(S+alp[i])
  exit()
  
i=-1
nums=[alp.index(S[i])]
while max(nums)==nums[-1]:
  i-=1
  nums.append(alp.index(S[i]))

out=S[:-len(nums)]
tmp=26
for i in nums[:-1]:
  if i>nums[-1] and tmp>i:
    tmp=i
    
print(out+alp[tmp])
A,B = map(int, input().split())
import math
print((A*B)//math.gcd(A,B))

### FIXED CODE ###

A,B = map(int, input().split())
import fractions
print((A*B) // fractions.gcd(A,B))
# -*- coding: utf-8 -*-
"""
Created on Thu May  3 11:39:47 2018

@author: maezawa
"""

# -*- coding: utf-8 -*-
"""
Created on Wed May  2 21:28:06 2018
ALDS1_5a_r2  
@author: maezawa
"""

n = int(input())
a = list(map(int, input().split()))
q = int(input())
m_array = list(map(int, input().split()))

def can_comp(i, m): #i番目以降の数列をつかってmを作れるか？
    if m == 0:
        return True
    elif i == n:
        return False
    else:
        return can_comp(i+1, m) or can_comp(i+1, m-a[i])

for m in m_array:
    if can_comp(0, m):
        print('yes')
    else:
        print('no')



### FIXED CODE ###

# -*- coding: utf-8 -*-
"""
Created on Wed May  2 21:28:06 2018
ALDS1_5a_r1  
@author: maezawa
"""
import itertools as itr

n = int(input())
a = list(map(int, input().split()))
q = int(input())
m = list(map(int, input().split()))

sum_array = []
for r in range(1,n+1):
    for comb in itr.combinations(a, r):
        sum_array.append(sum(comb))
sum_array.sort()

for i in m:
    left = 0
    right = len(sum_array)
    yesorno = 'no'
    while(left < right):
        #print(left, right)
        mid = (left+right)//2
        if sum_array[mid] == i:
            yesorno = 'yes'
            break
        elif sum_array[mid] > i:
            right = mid
        else:
            left = mid+1
            
    print(yesorno)
N = int(input())
A=list(map(int, input().split()))

def sol(i,want):
    num=int(N/(i+1))
    wa=-A[0]
    for j in range(num):
        wa+=A[i+j*i]
    wa=wa%2
    if wa==want:
        x=0
    else:
        x=1
#     print(num)
    return x 

B=A[:]
for i in range(half):
    j=half-1-i
#     print(j)
    B[j]=sol(j,A[j])
    
C=[]
for i in range(N):
    if B[i]==1:
        C.append(i+1)
m=sum(B)
print(m)
print(*C)

### FIXED CODE ###

r = int(input())
print(3*r**2)
def main():
    a, b, c, d, e, f = map(int, input().split())

    maxConcentration = 0

    for i in range(31):
        for j in range(31 - i * a):
            water = (i * a + j * b) * 100
            possibleSugar = int(min(f - water, water * e / 100))
            for k in range((possibleSugar // c) + 1):
                for l in range(((possibleSugar - k * c) // d) + 1):
                    sugar = k * c + l * d

                    if water + sugar > f:
                        break

                    if water + sugar == 0:
                        continue

                    concentration = 100 * sugar / (water + sugar)

                    if concentration > maxConcentration:
                        maxConcentration = concentration
                        resSugarWater = water + sugar
                        resSugar = sugar
    
    print(resSugarWater, resSugar)

if __name__ == '__main__':
    main()

### FIXED CODE ###

def main():
    a, b, c, d, e, f = map(int, input().split())

    maxConcentration = 0
    resSugarWater = 0
    resSugar = 0

    for i in range(31):
        for j in range((29 * a * i // b) + 1):
            water = (i * a + j * b) * 100
            possibleSugar = int(min(f - water, water * e / 100))
            for k in range((possibleSugar // c) + 1):
                for l in range(((possibleSugar - k * c) // d) + 1):
                    sugar = k * c + l * d

                    if water + sugar > f:
                        break

                    if water + sugar == 0:
                        continue

                    concentration = 100 * sugar / (water + sugar)

                    if concentration >= maxConcentration:
                        maxConcentration = concentration
                        resSugarWater = water + sugar
                        resSugar = sugar
    
    print(resSugarWater, resSugar)

if __name__ == '__main__':
    main()
#from collections import deque,defaultdict
printn = lambda x: print(x,end='')
inn = lambda : int(input())
inl   = lambda: list(map(int, input().split()))
inm   = lambda:      map(int, input().split())
ins = lambda : input().strip()
DBG = True # and False
BIG = 10**18
R = 10**9 + 7
#R = 998244353

def ddprint(x):
  if DBG:
    print(x)

s = ins()
if s=='abc':
    3/0
n = len(s)
if s[0]==s[-1]:
    n += 1
print('Second' if n%2==0 else 'First')


### FIXED CODE ###

#from collections import deque,defaultdict
printn = lambda x: print(x,end='')
inn = lambda : int(input())
inl   = lambda: list(map(int, input().split()))
inm   = lambda:      map(int, input().split())
ins = lambda : input().strip()
DBG = True # and False
BIG = 10**18
R = 10**9 + 7
#R = 998244353

def ddprint(x):
  if DBG:
    print(x)

s = ins()
if s=='ab':
    3/0
n = len(s)
if s[0]==s[-1]:
    n += 1
print('Second' if n%2==0 else 'First')
a,b = map(str,input().split())
if a='H' and b = 'H':
  print('H')
if a='D' and b = 'H':
  print('D')
if a='H' and b = 'D':
  print('D')
if a='D' and b = 'D':
  print('H')

### FIXED CODE ###

a,b = map(str,input().split())
if a=='H' and b == 'H':
  print('H')
if a=='D' and b == 'H':
  print('D')
if a=='H' and b == 'D':
  print('D')
if a=='D' and b == 'D':
  print('H')
s,w=input().split()
if s<=w:
  print(unsafe)
else:
  print(safe)

### FIXED CODE ###

s,w=map(int, input().split())
if s<=w:
  print("unsafe")
else:
  print("safe")
#!/usr/bin/env python
# -*- coding: utf-8 -*-

while True:
  num = input()
  if num == 0:
    break
  lis = []
  for i in range(num):
    n = input()
    if i == 0:
      d = n
    else:
      d = max( d + n , n )
      lis.append(d)    
  print max(lis)

### FIXED CODE ###

#!/usr/bin/env python
# -*- coding: utf-8 -*-

while True:
  num = input()
  if num == 0:
    break
  lis = [0]*num
  for i in range(num):
    n = input()
    if i == 0:
      lis[0] = n
    else:
      lis[i] = max( lis[i-1] + n , n )
  print max(lis)
n=int(input())
a=[list(map(input().split())) for _ in range(n)]
x=input()
cnt='x'
for i in a:
  if cnt!='x':
    z=int(i[1])
    cnt+=z
  if i[0]==x:
    cnt=0
print(cnt)


### FIXED CODE ###

n=int(input())
a=[(input().split()) for _ in range(n)]
x=input()
cnt='x'
for i in a:
  if cnt!='x':
    z=int(i[1])
    cnt+=z
  if i[0]==x:
    cnt=0
print(cnt)
N,M=map(int,input().split())
count=0
if N>=1 and M>=2:
    a=M//2
    if N>=a:
        M=M-2*a
        answer=a
    else:
        M=M-2*N
        answer=N
if M>=4:
    kotae=M//4
print(answer+kotae)


### FIXED CODE ###

N,M=map(int,input().split())
count=0
if N>=1 and M>=2:
    a=M//2
    if N>=a:
        M=M-2*a
        answer=a
    else:
        M=M-2*N
        answer=N
else:
    answer=0
if M>=4:
    kotae=M//4
else:
    kotae=0
print(answer+kotae)
N, X = map(int, input().split())
L = list(map(int, input().split()))

D = 0
num = 1

while num <= N+1:
  if D >= X:
    print(num)
    break
  D = D + L[num-1]
  num += 1
else:
  print(N)

### FIXED CODE ###

N, X = map(int, input().split())
L = list(map(int, input().split()))

D = 0
num = 1

while num <= N:
  D = D + L[num-1]
  if D > X:
    print(num)
    break
  num += 1
else:
  print(N+1)
a,b,c,d=map(int,input().split())
if abs(c-a)<=d:
  print('Yes')
elif abc(b-a)<=d and abs(c-b)<=d:
  print('Yes')
else:
  print('No')

### FIXED CODE ###

a,b,c,d=map(int,input().split())
if abs(c-a)<=d:
  print('Yes')
elif abs(b-a)<=d and abs(c-b)<=d:
  print('Yes')
else:
  print('No')
def prime_calc(n):
    if n < 2:
        return 0
    else:
        i = 2
        while i*i <= n:
            if n % i == 0:
                return 0
            else:
                i = i + 1

    return 1

def prime(n):
    cnt = 0
    for i in range(1, n+1):
        ans = prime_calc(i)
        if ans == 1:
           cnt = cnt + 1

    return cnt


def main():
    l = []

    for line in sys.stdin:
        l.append(int(line))

    for line in l:
        print(prime(line))

if __name__ == "__main__":
    main()


### FIXED CODE ###

import math
import sys

sup = 1000000

is_prime = [0] * sup

count = [0] * sup

def setup():
    is_prime[2] = 1
    for n in range(3,sup,2):
        flag = True
        for i in range(3, int(math.floor(math.sqrt(n) + 1)), 2):
            if n % i == 0:
                flag = False
                break
        if flag:
            is_prime[n] = 1

def precount():
    for n in range(2, sup):
        count[n] = count[n-1] + is_prime[n]

def main():
    setup()
    precount()

    l = []

    for line in sys.stdin:
        l.append(int(line))

    for line in l:
         print(count[line])

if __name__ == "__main__":
    main()
def solve():
 
    N = int(input())
 
    ans = 0
    for i in range(N+1):
        if i % 3 == 0 and i % 5 == 0:
            pass
        elif i % 3 == 0:
            pass
        elif i % 5 == 0:
            pass
        else:
            ans += i
 
    print(ans)
 
 
if __name__ == "__main__":
    solve()
def solve():

    N = int(input())

    ans = 0
    for i in range(N):
        if i % 3 == 0 and i % 5 == 0:
            pass
        elif i % 3 == 0:
            pass
        elif i % 5 == 0:
            pass
        else:
            ans += i

    print(ans)


if __name__ == "__main__":
    solve()
提出情報

### FIXED CODE ###

def solve():

    N = int(input())

    ans = 0
    for i in range(N+1):
        if i % 3 == 0 and i % 5 == 0:
            pass
        elif i % 3 == 0:
            pass
        elif i % 5 == 0:
            pass
        else:
            ans += i

    print(ans)


if __name__ == "__main__":
    solve()
import sys
from copy import deepcopy
from collections import deque

h, w = map(int, inputs[0].split())
S = deque(deque(map(lambda x: int(x=='.'), x)) for x in inputs[1:])
S.appendleft(deque([0]*w))
S.append(deque([0]*w))
for row in S:
    row.appendleft(0)
    row.append(0)

max_dist = 0
for y in range(1, h+1):
    for x in range(1, w+1):
        if S[y][x]:
            maze = deepcopy(S)
            queue = deque([(x, y, 0)])
            while queue:
                x, y, d = queue.popleft()
                d += 1
                maze[y][x] = 0
                for dx, dy in zip([0, 1, 0, -1], [-1, 0, 1, 0]):
                    if maze[y+dy][x+dx]:
                        queue.append((x+dx, y+dy, d))
                        maze[y+dy][x+dx] = 0
                        max_dist = max(max_dist, d)
print(max_dist)

### FIXED CODE ###

import sys
from copy import deepcopy
from collections import deque
from itertools import chain

chain_from_iterable = chain.from_iterable
inputs = sys.stdin.readlines()
h, w = map(int, inputs[0].split())
S = [list(map(lambda x: int(x=='.'), x)) for x in inputs[1:]]
S.insert(0, [0]*w)
S.append([0]*w)
for row in S:
    row.insert(0, 0)
    row.append(0)

max_dist = 0
for y in range(1, h+1):
    for x in range(1, w+1):
        if S[y][x] == 0:
            continue
        maze = deepcopy(S)
        maze_d = [[0]*(w+2) for _ in range(h+2)]
        queue = deque([(x, y, 0)])
        d = 0
        while queue:
            x, y, d = queue.popleft()
            d += 1
            maze[y][x] = 0
            if maze[y-1][x]:
                queue.append((x, y-1, d))
                maze[y-1][x] = 0
                maze_d[y-1][x] = d
            if maze[y][x-1]:
                queue.append((x-1, y, d))
                maze[y][x-1] = 0
                maze_d[y][x-1] = d
            if maze[y+1][x]:
                queue.append((x, y+1, d))
                maze[y+1][x] = 0
                maze_d[y+1][x] = d
            if maze[y][x+1]:
                queue.append((x+1, y, d))
                maze[y][x+1] = 0
                maze_d[y][x+1] = d
        max_dist = max(max_dist, max(chain_from_iterable(maze_d)))
print(max_dist)
as. bs = map(str,input().split())
ci, di = map(int,input().split())
es = str(input())

if es == as:
  ca = ci - 1
  print(ca)
elif es == bs:
  da = di -1
  print(da)

### FIXED CODE ###

A, B = map(str, input().split())
N, M = map(int, input().split())
S = input()

if A == S:
  print(N-1,M)
elif B == S:
  print(N,M-1)