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

# 数値を一けたずつ配列に数値で入れる
N=list(map(int, input()))

s= [input() for _ in range(n)]

w,h,n=map(int,input().split())
a=[list(map(int,input().split())) for _ in range(n)]

s.sort()
print(''.join(s))

s="abcABC"
s[0].upper()+s[1:].lower()

#２次元配列のスライス
import numpy as np
a=[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]
b=np.array(a)
c=b[1:3,1:3].tolist()
print(c)
#２次元配列初期化
z =[[0]*500 for i in range(500)]

#ゼロ埋め
s = '1234'
s_zero = s.zfill(8)

# リストのカウント
import collections
l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)
for i in c.items():
    print(i)
#２次元配列SORT
l.sort(key=lambda x: x[1])


# 組合せ
from operator import mul
from functools import reduce

def cmb(n,r):
    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

a = cmb(n, r)

# 組合せ mod 10**9+7
w,h=map(int,input().split())
n=w+h-2
r=min(w,h)-1
def cmb(n, r, mod):
    if ( r<0 or r>n ):
        return 0
    r = min(r, n-r)
    return g1[n] * g2[r] * g2[n-r] % mod
mod = 10**9+7 #出力の制限
N = 10**4
g1 = [1, 1] # 元テーブル
g2 = [1, 1] #逆元テーブル
inverse = [0, 1] #逆元テーブル計算用テーブル
for i in range( 2, n + 1 ): # 範囲に注意
    g1.append( ( g1[-1] * i ) % mod )
    inverse.append( ( -inverse[mod % i] * (mod//i) ) % mod )
    g2.append( (g2[-1] * inverse[-1]) % mod )
a = cmb(n,r,mod)
print(a%mod)


#DFS
import sys
sys.setrecursionlimit(10 ** 9) # 再帰の上限
H, W = map(int, input().split())
m = [input() for i in range(H)]
# 入力を全部くっつけて１個の文字列にして、s の位置を取得
sindex = ''.join(m).index('s')
# s　のx,yを算出
sh = sindex // W
sw = sindex % W
# 4方向検索用
dy = [0, 1, 0, -1]
dx = [1, 0, -1, 0]
# 探索済みリストを初期化 0=False 1=True
zz = [[0] * W for i in range(H)]
# 深さ優先探索
def dfs(h, w):
    # この,x,yは探索済みリストを1にセット
    zz[h][w] = 1

    # 四方向を順番に実行
    for i in range(4):
        nh = h + dy[i]
        nw = w + dx[i]

        # 次のx,yが枠を超えていたらスルー
        if nh < 0 or nw < 0 or nh >= H or nw >= W:
            continue
        # 次のx,yが壁だったらスルー
        if m[nh][nw] == "#":
            continue
        # 次のx,yが探索済みならスルー
        if zz[nh][nw]:
            continue
        # 次のx,yが ゴールだったらこれで終わり
        if m[nh][nw] == "g":
            print("Yes")
            sys.exit()

        # 次のx,yでDSF実行
        dfs(nh, nw)
# sの位置からdfsスタート
dfs(sh, sw)
# 途中で終わらなかったらNO
print("No")



n = int(input())
h = list(map(int, input().split()))
dp = [10 ** 9] * (n + 1)
dp[0] = 0
for i in range(n):
    for j in range(1, 3):
        if i + j < n:
            dp[i + j] = min(dp[i + j], dp[i] + abs(h[i + j] - h[i]))
print(dp[n - 1])

# くみあわせ
import itertools as it
l=[ i for i in it.product([0, 1], repeat=10)]
print(l)

# 桁指定2進数
bin_str = format(i, '08b') # iを8桁二進数

# グラフ　辺から頂点
a=[list(map(int,input().split())) for _ in range(m)]
G=[[] for _ in range(n+1)]
for j,k in a:
    G[j].append(k)
    G[k].append(j)

### FIXED CODE ###

n = [0]
n1 = list(input())
n2 = [int(s) for s in n1]
nn = len(n1)
n = n + n2
# print(n)

ans = 0
for i in range(nn, -1, -1):
    # print(n[i])
    if n[i] >= 10:
        n[i - 1] += 1
    elif n[i] == 5:
        if n[i - 1] >= 5:
            ans += n[i]
            n[i - 1] += 1
        else:
            ans += n[i]
    elif n[i] < 5:
        ans += n[i]
    else:
        ans += 10 - n[i]
        n[i - 1] += 1
print(ans)