Harryxun/stf_run huggingface dataset:
from statistics import median
#import collections
#aa = collections.Counter(a) # list to list || .most_common(2)で最大の2個とりだせるお a[0][0]
from fractions import gcd
from itertools import combinations # (string,3) 3回
from collections import deque
from collections import defaultdict
import bisect
#
#    d = m - k[i] - k[j]
#    if kk[bisect.bisect_right(kk,d) - 1] == d:
#
#
#
# pythonで無理なときは、pypyでやると正解するかも！！
#
#

import sys
sys.setrecursionlimit(10000000)
mod = 10**9 + 7
MENU = [100,101,102,103,104,105]
ok = False

X = int(input())
def readInts():
  return list(map(int,input().split()))
def dfs(Price):
    global X
    global ok
    if Price >= X:
        if Price == X:
            ok = True
            return
        else:
            return
    if not ok:
        for v in MENU:
            Price += v
            if Price > X:
                Price -= v
                continue
            dfs(Price)
            Price -= v
def main():
    dfs(0)
    print(1 if ok else 0)
if __name__ == '__main__':
  main()


### FIXED CODE ###

from statistics import median
#import collections
#aa = collections.Counter(a) # list to list || .most_common(2)で最大の2個とりだせるお a[0][0]
from fractions import gcd
from itertools import combinations # (string,3) 3回
from collections import deque
from collections import defaultdict
import bisect
#
#    d = m - k[i] - k[j]
#    if kk[bisect.bisect_right(kk,d) - 1] == d:
#
#
#
# pythonで無理なときは、pypyでやると正解するかも！！
#
#

import sys
sys.setrecursionlimit(10000000)
mod = 10**9 + 7

def readInts():
  return list(map(int,input().split()))
def main():
    X = int(input())
    # O(1)解法
    quo = X//100
    mo_ = X % 100
    # 0 <= Xを100で割った余り <= 5 * Xを100で割った時の商 (最大で、5 * 商まで表せれるから)
    if 0 <= mo_ <= 5*quo:
        print(1)
    else:
        print(0)

    # 
if __name__ == '__main__':
  main()
n, m, x =map(int, input().split())
a = list(map(int, input().split()))
ans=inf

for i in range(m):
    if a[i+1]<x<a[i+2]:
        ans=min(ans,min(i+1,m-i-1))
print(ans)

### FIXED CODE ###

from numpy import inf
n, m, x =map(int, input().split())
a = list(map(int, input().split()))
ans=inf
if x<a[0] or a[m-1]<x:
    print(0)
    exit()
for i in range(m-1):
    if a[i]<x<a[i+1]:
        ans=min(ans,min(i+1,m-i-1))
print(ans)
N = int(input())
if N == 3 or N==5 or N==7:
    print('Yes')
else:
print('No')

### FIXED CODE ###

N = int(input())
if N == 3 or N==5 or N==7:
    print('YES')
else:
    print('NO')
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from collections import deque
# from copy import deepcopy


def bfs(h, w, board, start_list, dx, dy):

    # キュー
    task_deque = deque()
    # キューにスタート地点リストを追加
    task_deque.append(start_list)
    next_task_list = []
    turn_count = 0

    while task_deque:
        next_task_list.clear()
        task_list = task_deque.popleft()


        # タスクリストからそれぞれの座標を取り出す
        for x, y in task_list:

            for i in range(len(dx)):
                nx = x + dx[i]
                ny = y + dy[i]

                # 条件に合う座標をnext_task_listに追加
                if 0 <= nx < w and 0 <= ny < h and board[ny][nx] == ".":
                    board[ny][nx] = "#"
                    next_task_list.append([nx, ny])


        # 一つもnext_task_listに入っていなければ終了
        if len(next_task_list) == 0:
            return turn_count

        # タスクリストが全部終わったらキューに追加
        turn_count += 1
        lst = []
        for task in next_task_list:
            lst.append(task)
        task_deque.append(lst)



h, w = map(int, input().split())
board = [list(input().rstrip()) for j in range(h)]

start_list = []

# すべてのスタート地点を記録
for i in range(w):
    for j in range(h):
        if board[j][i] == "#":
            start_list.append([i, j])

# dx,dy
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]


print(bfs(h, w, board, start_list, dx, dy))


### FIXED CODE ###

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

from collections import deque
# from copy import deepcopy


def bfs(h, w, board, start_list, dx, dy):

    # キュー
    task_deque = deque()
    # キューにスタート地点リストを追加
    task_deque.append(start_list)
    next_task_list = deque()
    turn_count = 0

    while task_deque:
        next_task_list.clear()
        task_list = task_deque.popleft()


        # タスクリストからそれぞれの座標を取り出す
        for x, y in task_list:

            for i in range(len(dx)):
                nx = x + dx[i]
                ny = y + dy[i]

                # 条件に合う座標をnext_task_listに追加
                if 0 <= nx < w and 0 <= ny < h and board[ny][nx] == ".":
                    board[ny][nx] = "#"
                    next_task_list.append([nx, ny])


        # 一つもnext_task_listに入っていなければ終了
        if len(next_task_list) == 0:
            return turn_count

        # タスクリストが全部終わったらキューに追加
        turn_count += 1
        lst = []
        for task in next_task_list:
            lst.append(task)
        task_deque.append(lst)



h, w = map(int, input().split())
board = [list(input().rstrip()) for j in range(h)]

start_list = deque()

# すべてのスタート地点を記録
for i in range(w):
    for j in range(h):
        if board[j][i] == "#":
            start_list.append([i, j])

# dx,dy
dx = [1, 0, -1, 0]
dy = [0, 1, 0, -1]


print(bfs(h, w, board, start_list, dx, dy))
n=int(raw_input())
k=int(raw_input())
s=n*k
l=2*(n+k)
print s,l

### FIXED CODE ###

n=map(int,raw_input().split())
print n[0]*n[1],(n[0]+n[1])*2
import numpy as np

S = input()
N = len(S)
arr = np.zeros((N, N), dtype=np.int)
for n, s in enumerate(S):
    i = n
    j = n + (1 if s == 'R' else -1)
    arr[i, j] += 1
mat = np.matrix(arr)
print(*(np.ones(N, dtype=np.int) * mat ** (10 ** 100)).tolist()[0])


### FIXED CODE ###

import numpy as np
from scipy.sparse import csr_matrix

S = input()
N = len(S)
row = tuple(range(N))
col = [n + (1 if s == 'R' else -1) for n, s in enumerate(S)]
data = [1] * N
mat = csr_matrix((data, (row, col)), shape=(N, N))
print(*np.ones(N, dtype=np.int) * (mat ** 10 ** 100))
#include <stdio.h>
int main()
{
  int N,M;
  scanf("%d %d",&N,%M);
  if (N == M)
      printf("Yes");
  if !(N == M)
      printf("No");
}


### FIXED CODE ###

N , M = map(int, input().split())
if N == M:
    print('Yes')
else:
    print('No')
S = sorted(input(), reverse=False)
print(int(S[0:2])+int(S[2]))


### FIXED CODE ###

S = "".join(sorted(input().split(), reverse=True))
print(int(S[0:2])+int(S[2]))
N = int(input())
list = []
flag = true
for n in range(0, N):
  input = input()
  if n == 0:
    list.append(input)
  else:
    if input in list:
      flag = false
    else:
      list.append(input)
if flag == true:
  print('Yes')


### FIXED CODE ###

a, b = map(int, input().split())
for c in range(1, 4):
  if a*b*c % 2 == 1:
    print('Yes')
    break
  else:
    if c == 3:
      print('No')
N = int(input())
p = list(map(int,input().split()))
 
ans = 0
 
for i in range(N+1):
	if p[i] != (i+1) :
		ans += 1
 
if ans == 0:
	print('Yes')
elif ans == 2:
  	print('Yes')
else :
	print('No')

### FIXED CODE ###

N = int(input())
p = list(map(int,input().split()))
 
ans = 0
 
for i in range(N):
    if p[i] != (i+1) :
        ans += 1
 
if ans == 0:
    print('YES')
elif ans == 2:
      print('YES')
else :
    print('NO')
N=int(input())
E=[[] for _ in range(N)]
for _ in range(N-1):
    A,B=map(int,input().split())
    E[A-1].append(B-1)
    E[B-1].append(A-1)
MOD=10**9+7

#頂点xから伸びる部分木に含まれる頂点の個数のリストを返す
def get_sub_tree_node_nums(x):
    ret=[]
    used=[False]*N
    used[x]=True
    for s in E[x]:
        n=1
        stack=[s]
        used[s]=True
        while stack:
            node=stack.pop()
            for ss in E[node]:
                if not used[ss]:
                    stack.append(ss)
                    n+=1
                    used[ss]=True
        ret.append(n)
    return ret

def solve():
    ans=0
    inv2=pow(2,MOD-2,MOD)
    #p0=すべての部分木に黒頂点が1つも含まれない確率
    p0=pow(1<<(N-1),MOD-2,MOD)
    for i in range(N):
        p=0
        subnodes = get_sub_tree_node_nums(i)
        if len(subnodes)>=2:
            #p0*(p1-1)=どれか1つの各部分木に黒頂点が1つ以上含まれる確率
            p1=1
            for s in subnodes:
                p1+=(1<<s)-1
                p1%=MOD
            p=1-(p0*p1)
            p%=MOD
            #頂点iが白の確率
            p=p*inv2[1]%MOD
        ans+=p
        ans%=MOD
    print(ans)

solve()

### FIXED CODE ###

N=int(input())
E=[[] for _ in range(N)]
for _ in range(N-1):
    A,B=map(int,input().split())
    E[A-1].append(B-1)
    E[B-1].append(A-1)
MOD=10**9+7

#dp=子ノードの数+1(自分)
dp=[1]*N

root=0
parent=[0]*N
order=[]
def dfs():
    parent[root]=root
    stack=[root]
    while stack:
        node=stack.pop()
        order.append(node)
        for ss in E[node]:
            if parent[node]!=ss:
                stack.append(ss)
                parent[ss]=node

pow2=[1]*(N+1)
for i in range(1,len(pow2)):
    pow2[i]=pow2[i-1]*2%MOD

def solve():
    ans=0
    inv2=pow(2,MOD-2,MOD)
    #p0=すべての部分木に黒頂点が1つも含まれない確率
    p0=pow(pow2[N-1],MOD-2,MOD)
    for i in reversed(order):
        if root!=i:
            dp[parent[i]]+=dp[i]
        p=0
        if len(E[i])>=2:
            #p0*(p1-1)=どれか1つの各部分木に黒頂点が1つ以上含まれる確率
            p1=1
            for s in E[i]:
                size=0
                if parent[i]!=s:
                    size=dp[s]
                elif i!=root:
                    size=N-dp[i]
                else:
                    continue
                p1+=pow2[size]-1
            p=1-(p0*p1)
            p%=MOD
        ans+=p
        ans%=MOD
    #頂点iが白の確率
    ans=ans*inv2%MOD
    print(ans)

dfs()
solve()
x=[]
for i in range(3):
  x[i]=int(input())
print((x[0]+x[1])*x[2]/2)

### FIXED CODE ###

x=[]
for i in range(3):
  x.append(int(input()))
print(int((x[0]+x[1])*x[2]/2))
S = int(input())
W = int(input())
if W >= S:
  print('unsafe')
else:
  print('safe')

### FIXED CODE ###

S,W = map(int, input().split())
if W >= S:
	print('unsafe')
else:
	print('safe')
import numpy as np
N, M = map(int, input().split())
path = np.zeros((N+1, N+1), dtype=np.int64)

def judge(bool_array):
  for index, bool_value in enumerate(bool_array[1:], 1):
    if bool_value > path[index, 0]:
      # print('index={}, bool_value={}'.format(index, bool_value))
      plus_value = bool_value - path[index, 0]
      np.where(path[index, 1:] > 0, path[index, 1:]+plus_value, 0)
      path[index, 0] = bool_value
      judge(path[index, :1])

for _ in range(M):
  x, y = map(int, input().split())
  # print('x={}, y={}'.format(x, y))
  path[x, y] = path[x, 0] + 1
  bool_array = np.zeros(N+1, dtype=np.int64)
  bool_array[y] = path[x, y]
  judge(bool_array)
  # print(path)
print(path[:, 0].max())

### FIXED CODE ###

import sys
sys.setrecursionlimit(10**5 + 1)

N, M = map(int, input().split())
nodes = [[] for _ in range(N)]

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

dp = [-1] * N

def judge(index):
  if dp[index] != -1:
    return dp[index]
  else:
    edges = 0
    for i in nodes[index]:
      edges = max(edges, 1+judge(i))
    dp[index] = edges
    return edges

answer = 0  
for i in range(N):
  answer = max(answer, judge(i))
print(answer)
n = input()
print(len(set(input().split()))

### FIXED CODE ###

n = input()
if len(set(input().split())) == 3:
	print("Three")
else:
	print("Four")
#include <stdio.h>

int main()
{
    int a,b,c;
    scanf("%d %d %d", &a, &b, &c);
    if((a==b && a != c) || (a==c && a != b) || (c==b && a != c))
    printf("Yes");
    else
    printf("No");

    return 0;
}

### FIXED CODE ###

n = list(map(int,input().strip().split()))

c1 = n.count(n[0])
c2 = n.count(n[1])
if c1==2 or c2 == 2:
  print('Yes')
else:
  print("No")
n=int(input())
ss=[''.join(sorted(input())) for _ in range(n)]
def p(n):
    if n<=1: return n
    return n+p(n-1)
c=0
for s in set(ss):
    c+=p(ss.count(s)-1)
print(c)


### FIXED CODE ###

n=int(input())
d=dict()
a=0
for _ in range(n):
    s=''.join(sorted(input()))
    if s in d:
        a+=d[s]
        d[s]+=1
    else:
        d[s]=1
print(a)
N = int(input())
D = list(map(int, input().split()))

M = max(D)
cnt = [0 for i in range(N - 1)]

for d in D:
    cnt[d] += 1

if cnt[0] != 1:
    print(0)
    exit()

for c in cnt[:M]:
    if c == 0:
        print(0)
        exit()

res = 1
MOD = 998244353
for i in range(1, M + 1):
    for c in range(cnt[i]):
        res = (res * cnt[i - 1]) % MOD

print(res)


### FIXED CODE ###

N = int(input())
D = list(map(int, input().split()))

M = max(D)
cnt = [0 for i in range(M + 1)]

for d in D:
    cnt[d] += 1

if D[0] != 0:
    print(0)
    exit()
if cnt[0] != 1 or 0 in cnt:
    print(0)
    exit()

res = 1
MOD = 998244353
for i in range(2, M + 1):
    res *= cnt[i - 1] ** cnt[i]
    res %= MOD

print(res)
n, k = map(int, input().split())
p = sorted(list(map(int, input().split())))
print(sum[:k])

### FIXED CODE ###

n, k = map(int, input().split())
p = list(map(int, input().split()))

p = sorted(p)

print(sum(p[:k]))
a = int(input())
b = int(input())

if a > b:
 print("a > b")

elif a < b:
 print ("a < b")

elif a == b:
 print ("a == b")

### FIXED CODE ###

a, b = map(int, input().split())
if a < b:
    print('a < b')
elif a > b:
    print('a > b')
else:
    print('a == b')
from sys import stdin

N, M, *A = map(int, stdin.read().split())
req = {1: 2,
       2: 5,
       3: 5,
       4: 4,
       5: 5,
       6: 6,
       7: 3,
       8: 7,
       9: 6}

B = sorted([(a, req[a]) for a in A], key=lambda x: x[0], reverse=True)
min_ = min(B, key=lambda x: x[1])[1]


def dp(N, B, min_):
    if N // min_ == 1:
        for a, n in B:
            if n == N:
                return [a]
        return None
    else:
        for a, n in B:
            if (N // min_) - ((N-n) // min_) == 1:
                ret = dp(N-n, B, min_)
                if ret is not None:
                    return [a] + ret


lst = dp(N, B, min_)
print(''.join(map(str, lst)))

### FIXED CODE ###

from sys import stdin

N, M, *A = map(int, stdin.read().split())
req = {1: 2,
       2: 5,
       3: 5,
       4: 4,
       5: 5,
       6: 6,
       7: 3,
       8: 7,
       9: 6}

B = sorted([(a, req[a]) for a in A], key=lambda x: x[0], reverse=True)
a_min, n_min = min(B, key=lambda x: x[1])
g = [(a, n-n_min) for a, n in B if a > a_min and n > n_min]
l = [(a, n-n_min) for a, n in B if a < a_min and n > n_min]
l.sort(key=lambda x: x[1], reverse=True)
C = g + l

def dp(rem, C):
    ret = None
    if rem == 0:
        ret = []
    elif rem > 0:
        for i in range(len(C)):
            a, m = C[i]
            nxt = dp(rem-m, C[i:])
            if nxt is not None:
                ret = [a] + nxt
                break
    return ret


i = 0
while True:
    quo = N // n_min - i
    rem = N % n_min + i * n_min
    lst = dp(rem, C)
    if lst is not None:
        lst = sorted(lst + [a_min] * (quo-len(lst)), reverse=True)
        print(''.join(map(str, lst)))
        break
    i += 1
def main():
    S = input()
    N = len(S)
    K = int(input())
    dp = [[[0]*(N+1) for j in range(2)] for i in range(N+1)]
    dp[0][0][0] = 1
    for i in range(N):
        for j in range(2):
            for k in range(N):
                lim = (9 if j else int(S[i]))
                for d in range(lim + 1):
                    dp[i+1][j or d < lim][k + (d != 0)] += dp[i][j][k]
    ans = 0
    for j in range(2):
        ans += dp[N][j][K]
    print(ans)


if __name__ == '__main__':
    main()


### FIXED CODE ###

def main():
    S = input()
    N = len(S)
    K = int(input())
    dp = [[[0]*(4) for j in range(2)] for i in range(N+1)]
    dp[0][0][0] = 1
    for i in range(N):
        for j in range(2):
            for k in range(4):
                lim = (9 if j else int(S[i]))
                for d in range(lim + 1):
                    if k + (d != 0) > 3:
                        continue
                    dp[i+1][j or d < lim][k + (d != 0)] += dp[i][j][k]
    ans = 0
    for j in range(2):
        ans += dp[N][j][K]
    print(ans)


if __name__ == '__main__':
    main()
Lily
from collections import defaultdict

n = int(input())
dct = defaultdict(int)

for i in range(n):
    s = input()
    sorted_s = "".join(sorted(s))
    dct[sorted_s] += 1

ans = 0
for k, v in dct.items():
    ans += v * (v - 1) // 2

print(ans)


### FIXED CODE ###

n=int(input())
d=dict()

for i in range(n):
  s="".join(sorted(input()))
  #print(s)
  if s in d:
    d[s]+=1
  else:
    d[s]=1
ans=0
for x in d.values():
  ans+=x*(x-1)//2
print(ans)
A, B = map(int, input().split())
if A % 2 == 0 
  print("No")
else:
  print("Yes")

### FIXED CODE ###

A, B = map(int, input().split())
if A % 2 == 0 or B % 2 == 0:
  print("No")
else:
  print("Yes")
N = int(input())
A = list(map(int, input().split()))

a = 0

for i in range(N):
         a += 1 / A[i]

print(1 / a)

### FIXED CODE ###

a = int(input())
s = input()
if a >= 3200:
  print(s)
else:
  print("red")
n,k=map(int,input().split())
A=tuple(map(int,input().split()))
s=1
state=[s]
count={}
for i in range(1,k+1):
    s=A[s-1]
    if s in count:
        start=state.index(s)
        end=len(state)
        print(state[start+(k-start)%(end-start)])
        break
    else:
        count[state[i]]=i
        state.append(s)
        continue
else:
    print(s)


### FIXED CODE ###

n,k=map(int,input().split())
A=tuple(map(int,input().split()))
s=1
state=[s]
count={}
for i in range(1,k+1):
    s=A[s-1]
    if s in count:
        start=state.index(s)
        end=len(state)
        print(state[start+(k-start)%(end-start)])
        break
    else:
        count[s]=i
        state.append(s)
        continue
else:
    print(s)
import numpy as np
 
N = int(input())
A = list(map(int, input().split()))  
a = 1
if 0 in A:
	print(0)
for i in range(N):
  a *= *A[i] 
  if (a > 10**18):
  	a = -1
print(a)

### FIXED CODE ###

n = int(input())
a = list(map(int,input().split()))
wa = 1
ka = 0
if(a.count(0)>=1):
  print(0)
  ka +=1
else:
  for i in range(n):
    wa = wa*a[i]
    if(wa>10**18):
      print("-1")
      ka +=1
      break
if(ka==0):
  print(wa)
a = input()
s = input()
if a > 3200:
  print(s)
else:
  print('red')

### FIXED CODE ###

a = int(input())
s = str(input())
if a >= 3200:
  print(s)
else:
  print('red')
from array import array

N = int(input())

S = []

for i in range(N):
    s = input()
    slist = list(s)
    slist.sort()
    s = ''.join(slist)
    S.append(s)

FAC = array('l', [0]*(N+1))
FAC[1] = 1

for i in range(2,N+1):
    FAC[i] = FAC[i-1]*i
    
count = 0


for s in set(S):
    s_counts  = S.count(s)
    if s_counts > 1:
        #fac = math.factorial(s_counts)
        #count += fac//2
        count += FAC[s_counts]//2

print(count)


### FIXED CODE ###

from collections import defaultdict
import sys
from scipy.misc import comb

N = int(input())

dd=defaultdict(int)

Sread = sys.stdin.read()


for s in Sread.split('\n'):
    slist = list(s)
    slist.sort()
    s = ''.join(slist)
    #print('-', s)
    dd[s]+=1

#FAC = {}
#FAC[1] = 1
#
#for i in range(2,N+1):
#    FAC[i] = FAC[i-1]*i
    
count = 0

for k in dd:
    s_counts = dd[k]
    if s_counts > 1:
        #count += FAC[s_counts]//2
        count += comb(s_counts, 2, exact=True)

print(count)
import sys

N = int(input().rstrip())

limit = pow(10, 18)

nums = []

nums = input().rsplit()

# for i in range(0, N - 1):
#     a = input()
#     if a == 0:
#         print(0)
#         sys.exit(1)
#     nums.append(a)

accum = 1
for num in nums:
    num = int(num)
    try:
        accum *= num
    except OverflowError:
        print(-1)
        sys.exit(1)

    if accum > limit:
        print(-1)
        sys.exit(1)

print(accum)


### FIXED CODE ###

import sys

N = int(input().rstrip())

limit = pow(10, 18)

nums = list(input().split())

for num in nums:
    num = int(num)
    if num == 0:
        print(0)
        sys.exit(0)

accum = 1
for num in nums:
    num = int(num)
    try:
        accum *= num
    except Exception:
        accum = -1
        break

    if accum > limit:
        accum = -1
        break

print(accum)
# -*- coding: utf-8 -*-
n,k=map(int,input().split(" "))
s=input()
s=s[:k-1]+s[k-1].lower()+s[k]
print(s)

### FIXED CODE ###

# -*- coding: utf-8 -*-
n,k=map(int,input().split(" "))
s=input()
s=s[:k-1]+s[k-1].lower()+s[k:]
print(s)
from fractions import gcd 

N = int(input())
As = list(map(int, input().split()))
P = 10**9+7

lcm = As[0]*As[1]//gcd(As[0],As[1])

for i in range(2,N):
  c = gcd(lcm, As[i])
  lcm *= As[i]//c
  
rlt = 0
for a in As:
  rlt += lcm//a
  rlt %= P

print(rlt)

### FIXED CODE ###

def pow_r(x, n, P):
  if n == 0:
    return 1
  if n % 2 == 0:
    return pow_r(x ** 2 % P, n // 2, P)
  else:
    return x * pow_r(x ** 2 % P, n // 2, P) 

from fractions import gcd

N = int(input())
As = list(map(int, input().split()))
P = 10**9+7

if N == 1:
  print(1)
  exit()

lcm = As[0]*As[1]//gcd(As[0],As[1])
 
for i in range(2,N):
  c = gcd(lcm, As[i])
  lcm *= As[i]//c

rlt = 0
for a in As:
  rlt += lcm*pow_r(a, P-2, P) % P
  rlt %= P
print(rlt)
N, M, C = map(int, input().split())
B = list(map(int, input().split()))
a = 0
sum = 0
for i in range(N):
	A = list(map(int, input().split()))
    for j in range(M):
        sum += A[i][j] * B[j]
    if sum + C > 0:
        a += 1
        sum = 0
    else :
        sum = 0
print(a)

### FIXED CODE ###

N, M, C = map(int, input().split())
B = list(map(int, input().split()))
A = [list(map(int, input().split())) for i in range(N)]
a = 0
sum = 0
for i in range(N):
    for j in range(M):
        sum += A[i][j] * B[j]
    if sum + C > 0:
        a += 1
        sum = 0
    else :
        sum = 0
print(a)
n = int(input())
a = [0]
for i in range(n):
    a.append(int(input()))


btn2 = a.index(2)
cnt = 1
idx = 1
for i in range(n):
    if a[idx] == btn2:
        if cnt != 1:
            cnt += 1
        print(cnt)
        break
    else:
        idx = a[idx]
        cnt += 1
else:
    print(-1)

### FIXED CODE ###

n = int(input())
a = [0]
for i in range(n):
    a.append(int(input()))

cnt = 1
idx = 1
for i in range(n):
    if a[idx] == 2:
        print(cnt)
        break

    else:
        idx = a[idx]
        cnt += 1
else:
    print(-1)
stairs = int(input())
stair_status = list(map(int,input().split(" ")))

move = 0
move_max = 0
for i in range(stairs-1):
    if stair_status[i]>=stair_status[i+1]:
        move += 1
        if move>move_max:
            move_max = move
    else:
        count.append(move)
        if move>move_max:
            move_max = move
        move = 0  #reset
    
    if len(count)!=0:
        if max(count)>=stairs-max(count):
            break
    
    
else:
    print(move_max)

### FIXED CODE ###

stairs = int(input())
stair_status = list(map(int,input().split(" ")))

move = 0
count = [0]
for i in range(stairs-1):
    if stair_status[i]>=stair_status[i+1]:
        move += 1
        count.append(move)
    else:
        count.append(move)
        move = 0  #reset
    
else:
    print(max(count))
s = input()
t = input()
count = 0
for i in range(len(s)):
    if(s[i] != t[i]):
        count += 1
print(count)

### FIXED CODE ###

a = int(input())
print(a+(a*a)+a*a*a)
a1,a2,a3=map(int(input().split()))
if a1+a2+a3>=22:
  print("bust")
else:
  print("win")

### FIXED CODE ###

a1,a2,a3=map(int,input().split())
if a1+a2+a3>=22:
  print("bust")
else:
  print("win")
a,b,n = map(int, input().split())
M = [0]*(n+1)
for x in range(0,n+1):
    M[x] = int(int(a*x/b) - a*int(x/b))

print(max(M))

### FIXED CODE ###

a,b,n = map(int, input().split())
m = min(n,b-1)
print(int(a*m/b)-a*int(m/b))
n,l = map(int,input().ssplit())
s = sorted([input() for i in range(n)])
print(*s,sep="")

### FIXED CODE ###

n,l = map(int,input().split())
s = sorted([input() for i in range(n)])
print(*s,sep='')
n = int(input())
lst = []
for i in range(n):
  s, p = input().split()
  p = int(p)
  lst.append((s, p, i+1))
lst_sorted = sorted(lst, key:lambda x: (x[0], -x[1]))
for _, _, num in lst_sorted:
  print(num)

### FIXED CODE ###

n = int(input())
lst = []
for i in range(n):
  s, p = input().split()
  p = int(p)
  lst.append((s, p, i+1))
lst_sorted = sorted(lst, key=lambda x: (x[0], -x[1], x[2]))
for _, _, num in lst_sorted:
  print(num)