Problem:


Score : 100 points

Problem Statement

Takahashi wants to print a document with N pages double-sided, where two pages of data can be printed on one sheet of paper.

At least how many sheets of paper does he need?

Constraints

N is an integer.

1 \leq N \leq 100

Input

Input is given from Standard Input in the following format:

N

Output

Print the answer.

Sample Input 1

5

Sample Output 1

3

By printing the 1-st, 2-nd pages on the 1-st sheet, 3-rd and 4-th pages on the 2-nd sheet, and 5-th page on the 3-rd sheet, we can print all the data on 3 sheets of paper.

Sample Input 2

2

Sample Output 2

1

Sample Input 3

100

Sample Output 3

50



Sample input:
5


Sample output:
3

Submission status: Runtime Error

Solution code:
import sys
import math
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN
from collections import deque
from bisect import bisect_left
from itertools import product
def I(): return int(sys.stdin.readline())
def MI(): return map(int, sys.stdin.readline().split())
def LI(): return list(map(int, sys.stdin.readline().split()))
def LI2(N): return [list(map(int, sys.stdin.readline().split())) for i in range(N)]
#文字列を一文字ずつ数字に変換、'5678'を[5,6,7,8]とできる
def LSI(): return list(map(int, list(sys.stdin.readline().rstrip())))
def LSI2(N): return [list(map(int, list(sys.stdin.readline().rstrip()))) for i in range(N)]
#文字列として取得
def ST(): return sys.stdin.readline().rstrip()
def LST(): return sys.stdin.readline().split()
def LST2(N): return [sys.stdin.readline().split() for i in range(N)]
def FILL(i,h): return [i for j in range(h)]
def FILL2(i,h,w): return [FILL(i,w) for j in range(h)]
def FILL3(i,h,w,d): return [FILL2(i,w,d) for j in range(h)]
def FILL4(i,h,w,d,d2): return [FILL3(i,w,d,d2) for j in range(h)]
def sisha(num,digit): return Decimal(str(num)).quantize(Decimal(digit),rounding=ROUND_HALF_UP)
#'0.01'や'1E1'などで指定、整数に戻すならintをかます
MOD = 1000000007
INF = float("inf")
sys.setrecursionlimit(10**6+10)

class Node:
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
        self.height = 0 #ノードの高さ


class AVL:
    def __init__(self):
        self.root = None


    def get_height(self, node):
        if not node:
            return -1
        return node.height

    def overwrite_height(self, node):
        return max(self.get_height(node.left),self.get_height(node.right))+1

    def get_balance(self, node):
        '''
        返り値が1以上の時、左がより高いので右回転
        -1以下の時左回転
        '''
        if not node:
            return 0
        return self.get_height(node.left) - self.get_height(node.right)

    def rotate_right(self, node): #nodeが回転の頂点、node.leftが頂点にくる。頂点を返す
        temp_left = node.left
        temp_left_right = temp_left.right
        temp_left.right = node
        node.left = temp_left_right

        node.height = self.overwrite_height(node)
        temp_left.height = self.overwrite_height(temp_left)

        return temp_left

    def rotate_left(self, node): #nodeが回転の頂点、node.leftが頂点にくる
        temp_right = node.right
        temp_right_left = temp_right.left
        temp_right.left = node
        node.right = temp_right_left

        node.height = self.overwrite_height(node)
        temp_right.height = self.overwrite_height(temp_right)

        return temp_right

    def insert(self, data):
        #print('--------------')
        #print('start inserting {}'.format(data))
        self.root = self._insert(data, self.root)
        #print('finish inserting')
        #print('--------------')

    def _insert(self, data, node): #dataをnodeに挿入、回転した上でrootを返す
        if not node:
            return Node(data)

        if data < node.data:
            node.left = self._insert(data,node.left)
        else:
            node.right = self._insert(data, node.right)
        node.height = self.overwrite_height(node)

        return self.settle_unbalance(data, node)

    def settle_unbalance(self, data, node): #回転を行なった上でrootを返す
        balance = self.get_balance(node)
        if balance > 1 and data < node.left.data:
            #print('right')
            return self.rotate_right(node)
        if balance < -1 and data > node.right.data:
            #print('left')
            return self.rotate_left(node)
        if balance > 1 and data > node.left.data:
            #print('left,right')
            node.left = self.rotate_left(node.left)
            return self.rotate_right(node)
        if balance < -1 and data < node.right.data:
            #print('right,left')
            node.right = self.rotate_right(node.right)
            return self.rotate_left(node)
        return node

    def remove(self, data):
        if self.root:
                self.root = self._remove(data, self.root)

    def _remove(self, data, node):
        if not node:
            return None
        if data < node.data:
            node.left = self._remove(data, node.left)
        elif data > node.data:
            node.right = self._remove(data, node.right)
        else:
            if not node.right and not node.left:
                del node
                return None
            if not node.right:
                temp = node.left
                del node
                return temp
            if not node.left:
                temp = node.right
                del node
                return temp

            def _get_max_node(node): #左側のsubtreeの最大ノードを代わりのノードとする
                if node.right:
                    return _get_max_node(node.right)
                return node
            temp = _get_max_node(node.left)
            node.data = temp.data
            node.left = self._remove(temp.data, node.left) #この場合もとのノード削除は不要。削除ノードを、新規ノードにおきかえればよい

        if not node:
            return node

        node.height = self.overwrite_height(node)
        balance = self.get_balance(node)
        if balance > 1 and self.get_balance(node.left) >= 0:
            return self.rotate_right(node)
        if balance < -1 and self.get_balance(node.right) <= 0:
            return self.rotate_left(node)
        if balance > 1 and self.get_balance(node.left) < 0:
            node.left = self.rotate_left(node.left)
            return self.rotate_right(node)
        if balance < -1 and self.get_balance(node.right) > 0:
            node.right = self.rotate_right(node.right)
            return self.rotate_left(node)

        return node


    def search(self, search): #インターフェース
        searcher = self._search(search)
        if searcher is None:
            pass
            #print('Search target is not found.')
        elif searcher == True:
            pass
            #print(str(search)+' is found.')
        elif searcher == False:
            pass
            #print(str(search)+' is not found.')

    def _search(self,search):
            n = self.root
            if n is None:
                return None
            else:
                lst = []
                lst.append(n)
                while len(lst) > 0:
                    node = lst.pop()
                    if node.data == search:
                        return True
                    if node.right is not None:
                        lst.append(node.right)
                    if node.left is not None:
                        lst.append(node.left)
                return False

    def search_higher(self, search):
        if self.root:
            return self._search_higher(search, self.root, None)
        else:
            print('木構造がありません')

    def _search_higher(self, search, node, temp_high):
        '''
        nodeを頂点とする部分木から、searchより大きい中でもっとも小さいnodeのデータを返す
        '''
        if node is None:
            return temp_high
        if node.data > search:
            temp_high = node.data
            if node.left is None:
                return temp_high
            else:
                return self._search_higher(search, node.left, temp_high)
        elif node.data < search:
            if node.right is None:
                return temp_high
            else:
                return self._search_higher(search, node.right, temp_high)
        else:  #nodeの値が探索値と一致する時
            if node.right is None:
                return temp_high
            else:
                if temp_high is None:
                    return self.end_lower(node.right)
                else:
                    return min(temp_high, node.right.end_lower(node.right.data))

    def end_lower(self, node):
        #あるnodeの下の部分木のうち最小値 nodeにdataあることが前提
        if node.left is None:
            return node.data
        else:
            return end_lower(node.left)

    def traverse_inorder(self):
        if self.root:
            self._traverse_inorder(self.root)
            # 改行対策
            print()
        else:
            print('木は空です。')

    def _traverse_inorder(self, node):
        if node.left:
            self._traverse_inorder(node.left)
        sep = '|'*node.height
        print(sep+str(node.data)+sep, end=' ')
        if node.right:
            self._traverse_inorder(node.right)

N = I()
S = ST()
Q = I()
D = {}
for i in range(N):
    letter = S[i]
    D[letter] = D.get(letter,AVL())
    D[letter].insert(i)

for _ in range(Q):
    q = LST()
    if q[0]=='1':
        i = int(q[1])
        c = q[2]
        for letter in D:
            D[letter].remove(i-1)
        D[c] = D.get(c,AVL())
        D[c].insert(i-1)
    else:
        ans = 0
        l = int(q[1])
        r = int(q[2])
        for letter in D:
            next_idx = D[letter].search_higher(l-2)
            if next_idx is not None:
                if r-1 >= next_idx:
                    ans += 1

        print(ans)

Submission status: Runtime Error

Solution code:
import queue
import numpy
def main():
    n,m,k=map(int,input().split())
    root=numpy.array([numpy.zeros(n) for i in range(n)])
    for i in range(n):
        root[i][i]=2
    for i in range(m):
        a,b=map(int,input().split())
        root[a-1][b-1]=1
        root[b-1][a-1]=1
    for i in range(k):
        a,b=map(int,input().split())
        root[a-1][b-1]=-100
        root[b-1][a-1]=-100
    toVis=queue.Queue()
    Visted=[]
    checkOK=numpy.zeros(n)#その点に関しての友達候補つくり済みかどうか
    OK={}#友達候補リスト
    checkVis=numpy.zeros(n)#訪れたか確認するためのリスト
    checkVinit=numpy.zeros(n)#初期化のためのりすと
    for i in range(n):
        if checkOK[i]==5:#既にもうお友達候補探索済みならしない
            continue
        print(i)
        checkVis=checkVinit#訪れたかリストの初期化
        Visted=[i]#iは現在地だ
        checkVis[i]=5#当然訪れている
        toVis=queue.Queue()#訪れるべき点のキュー
        
        for j in range(len(root[i])):#iの列を見て、
            nex=root[i][j]          #i->jの値
            if checkVis[j]!=5 and nex==1:#5は既に訪れている 1は不通
                toVis.put(j)#でなけれな訪れるべき場所なので追加

        while toVis.empty()==False:
        
            now=toVis.get()#キューからとって訪れる

            if checkVis[now]==5:##そこが訪れ済みならスルー（ほんらいこれいらないと思う）
                continue

            Visted.append(now)#訪れたリストに追加
            checkVis[now]=5#チェック用にも追加
            for j in range(n):#len(root[now]
                nex=root[now][j]
                if nex==1 and checkVis[j]!=5:#次に訪れることのできる点をキューに入れる
                    toVis.put(j)
    
        for j in Visted:#訪れたリストにある点は互いに行き来ができるはず
            OK[j]=Visted#各点の訪れられる点リストはvistedで共通
            checkOK[j]=5#ｊはもうやらなくていいのでチェック
    print("1 1 1 1 1")
    """
    ans=[]
    for i in range(n):
        num=0
        for value in OK[i]:
            if root[i][value]==0:#各行ける点からお友達じゃないかつブロックじゃないヒトをピックアップ
                num+=1
        ans.append(num)
    print(" ".join(map(str,ans)))"""
if __name__=="__main__":
    main()

Submission status: Runtime Error

Solution code:
import queue
import numpy
def main():
    n,m,k=map(int,input().split())
    root=numpy.array([[0]*n for i in range(n)])
    for i in range(n):
        root[i][i]=2
    for i in range(m):
        a,b=map(int,input().split())
        root[a-1][b-1]=1
        root[b-1][a-1]=1
    for i in range(k):
        a,b=map(int,input().split())
        root[a-1][b-1]=-100
        root[b-1][a-1]=-100
    toVis=queue.Queue()
    Visted=[]
    checkOK=numpy.zeros(n)#その点に関しての友達候補つくり済みかどうか
    OK={}#友達候補リスト
    checkVis=numpy.zeros(n)#訪れたか確認するためのリスト
    checkVinit=numpy.zeros(n)#初期化のためのりすと
    for i in range(n):
        if checkOK[i]==5:
            continue
        checkVis=checkVinit
        Visted=[i]
        checkVis[i]=5
        toVis=queue.Queue()
        
        for j in range(len(root[i])):
            nex=root[i][j]
            if checkVis[j]!=5 and nex==1:
                toVis.put(j)

        while toVis.empty()==False:
        
            now=toVis.get()

            if checkVis[now]==5:
                continue

            Visted.append(now)
            checkVis[now]=5
            for j in range(n):#len(rooot[now]
                nex=root[now][j]
                if nex==1 and checkVis[j]!=5:
                    toVis.put(j)
    
        for j in Visted:
            OK[j]=Visted
            checkOK[j]=5
    ans=[]
    for i in range(n):
        num=0
        for value in OK[i]:
            if root[i][value]==0:
                num+=1
        ans.append(num)
    print(" ".join(map(str,ans)))
if __name__=="__main__":
    main()

Submission status: Runtime Error

Solution code:
import queue
n,m,k=map(int,input().split())
root=[[0]*n for i in range(n)]
for i in range(n):
    root[i][i]=2
#print(root)
for i in range(m):
    a,b=map(int,input().split())
   # print("berfot",root[a-1][b-1])
    root[a-1][b-1]=1
    root[b-1][a-1]=1
  #  print("after",root[a-1][b-1])
for i in range(k):
    a,b=map(int,input().split())
 #   print(a,b)
    root[a-1][b-1]=-float("inf")
    root[b-1][a-1]=-float("inf")
#print(root)
toVis=queue.Queue()
Visted=[]
OK={}

for i in range(n):
    Visted=[i]

    if i in OK.keys():
        continue
    toVis=queue.Queue()
    
    for j in range(len(root[i])):
        nex=root[i][j]
        if j not in Visted and nex==1:
            toVis.put(j)

    while toVis.empty()==False:
    
        now=toVis.get()
        if now in Visted:
            continue
     #   print("now :" ,now)
        Visted.append(now)
        for j in range(len(root[now])):
            nex=root[now][j]
            if nex==1 and j not in Visted:
      #          print("apend",nex)
                toVis.put(j)
   
    for j in range(len(Visted)):
        OK[Visted[j]]=Visted
#print(OK)
ans=[]
for i in range(n):
    num=0
    for value in OK[i]:
        if root[i][value]==0:
            num+=1
    ans.append(num)
print(" ".join(map(str,ans)))

Submission status: Runtime Error

Solution code:
import math
N = input()
print(math.ceil(N/2))

Submission status: Runtime Error

Solution code:
n, m = map(int, input().split())
l = [list(input().split()) for i in range(m)]
for num in range(1000):
    if m == 0:
        if n == 1:
            print(0)
            exit()
        else:
            print(10**(n-1))
            exit()    
    for i in range(m):
        if len(str(num)) < n:
            break
        if str(num)[int(l[i][0])-1] != l[i][1]:
            break
    else:
        print(num)
        exit()
print(-1)

Submission status: Runtime Error

Solution code:
from sys import exit

n,m = map(int,input().split())
A=[-1]*3

cnt=0
for _ in range(m):
	s,c=map(int,input().split())
	if A[s-1]!=c and A[s-1]!=-1:
		cnt=1
	else:
		A[s-1]=c

if cnt==1 or A[0]==0:
	print("-1")
	exit()
	
if A[0]==-1:
	if n==1:
		A[0]=0
	else:
		A[0]=1

res=0
for i in range(n):
	if A[i]==-1:
		A[i]=0
	res+=A[i]*(10**(n-i-1))

print(res)

Submission status: Runtime Error

Solution code:
import sys
input = sys.stdin.readline


def main():
    A = [list(map(int, input().split()))for _ in range(3)]
    N = int(input())
    B = [int(input()) for _ in range(N)]
    for bn in B:
        for i in range(len(A)):
            for j in range(len(A[i])):
                if bn == A[i][j]:
                    A[i][j] = 0
    for m in range(len(A)):
        if all(A[m][n] == 0 for n in range(len(A))):
            print("Yes")
            exit()
        if all(A[n][m] == 0 for n in range(len(A))):
            print("Yes")
            exit()
        if all(A[n][n] == 0 for n in range(len(A))):
            print("Yes")
            exit()
        if all(A[n][len(A)-n-1] == 0 for n in range(len(A))):
            print("Yes")
            exit()
    print("No")


if __name__ == '__main__':
    main()

Submission status: Runtime Error

Solution code:
N,M = map(int,input().split())
 
m = []
for i in range(M):
    m.append(list(map(int,input().split())))
for i in range(10**N):
    a = str(i)
    
    if i >= 10**(N-1)-1:
            
        for j in range(M):
            try:
                
                if a[m[j][0]-1] == str(m[j][1]):
                    True
                
                else:
                    break
            except:
                break
                
            if j == M-1:
                print(i)
                exit()
                
if M==0:
    if N == 1:
        print(0)
    else:
        print(10**(N-1))
else :
    print(-1)

Submission status: Runtime Error

Solution code:
#! env/bin/local python3
# -*- coding: utf-8 -*-

import numpy as np

a_1 = list(map(int, input().split()))
a_2 = list(map(int, input().split()))
a_3 = list(map(int, input().split()))
_ = input()
pickup_number = []
while True:
    try:
        pickup_number.append(int(input()))
    except EOFError:
        break

a = np.array([a_1, a_2, a_3])

for pn in pickup_number:
    a[a == pn] = -1

flag = False
if np.sum(a, axis=0)[0] == -3 or np.sum(a, axis=1)[0] == -3:
    flag = True
if np.sum(a.diagonal()) == -3 or a[0][2] + a[1][1] + a[2][0] == -3:
    flag = True

print('Yes' if flag else 'No')

Submission status: Runtime Error

Solution code:
n=input()

if n%2==0:
    print(n/2)
else:
    print(n//2+1)

Submission status: Runtime Error

Solution code:
n=input()
if(n%2==0):
  print(n/2)
else:
  print((n/2)+1)

Submission status: Runtime Error

Solution code:
n, m = map(int, input().split())

lis = []
for i in range(m):
    lis.append(list(map(int, input().split())))
    
ans = [0,0,0]
if n == 2:
    ans[1] = 1
elif n == 3:
    ans[0] = 1
    
k = 0
out = []

for i in lis:
    if i[0] not in out:
        ans[int(i[0]-1)] = int(i[1])
        out.append(i[0])
    elif i[0] in out and i[1] != ans[i[0]-1]:
        k += 1

inte = ans[0] * 100 + ans[1]*10 + ans[2]
    
    
if inte > 0 and k ==0:
    print(inte)
else:
    print(-1)

Submission status: Runtime Error

Solution code:
f = list(map(int, input().split()))
s = list(map(int, input().split()))
t = list(map(int, input().split()))
n = int(input())
k = []
for i in range(n):
    k.append(int(input()))

lis = []

lis.append(f)
lis.append(s)
lis.append(t)

ans = 0

for i in lis:
    c =0
    for n in range(len(i)):
        if i[n] in k:
            i[n] = 'X'
            c += 1
            if c == 3:
                ans +=1
                break

if f[0] == 'X' and s[0] == 'X' and t[0] == 'X':
    ans +=1
elif f[1] == 'X' and s[1] == 'X' and t[1] == 'X':
    ans += 1
elif f[2] == 'X' and s[2] == 'X' and t[2] == 'X':
    ans += 1
elif f[0] == 'X' and s[1] == 'X' and t[3] == 'X':
    ans += 1
elif f[3] == 'X' and s[2] == 'X' and t[1] == 'X':
    ans += 1
    
if ans >= 1:
    print('Yes')
else:
    print('No')

Submission status: Runtime Error

Solution code:
N = input()

print(N//2 + N % 2)

Submission status: Runtime Error

Solution code:
N=input()
print(N//2+N%2)

Submission status: Runtime Error

Solution code:
N = input()
N = int(S)
A = N / 2
B = (N + 1) / 2
if N % 2 == 0:
  print(A)
else:
  print(B)

Submission status: Runtime Error

Solution code:
N=input()
if N%2==0:
  print("N/2")
else:
  print("N/2+1")

Submission status: Runtime Error

Solution code:
n,m=map(int,input().split())
keep=0
aa=["#"]*n
for i in range(m):
  s,c=map(str,input().split())
  s=int(s)
  if n>=2 and s==1 and c=="0":
    keep=1
    print(-1)
    break
  if aa[s-1]=="#":
    aa[s-1]=c
  elif aa[s-1] !=c:
    keep=1
    print(-1)
    break
if keep==0:
  moji=""
  if aa[0]=="#" and n>=2:
    moji+="1"
  elif n==1 and aa[0]=="#":
    moji+="0"
  else:
    moji+=aa[0]
  for i in range(1,n):
    if aa[i]=="#":
      moji+="0"
    else:
      moji+=aa[i]
  print(moji)

Submission status: Runtime Error

Solution code:
n, m = map(int, input().split())
s = [0] * m
c = [0] * m
tmp = [0] * m

for i in range(m):
    s[i], c[i] = map(int, input().split())
    
for x, y in zip(s, c):
    if tmp[x-1]==0:
        tmp[x-1] = y
    elif tmp[x-1]==y:
        continue
    else:
        print(-1)
        exit()

ans = 0

for i, a in enumerate(tmp[::-1]):
    ans += a*10**(i)

if n==1 & ans==0:
    print(ans)
elif ans // 10**(m-1) < 1:
    print(-1)
    exit()
    
print(ans)

Submission status: Runtime Error

Solution code:
A=[list(map(int,input().split())) for i in range(3)]
n=int(input())
for i in range(n):
    b=int(input())
    for Row in range(3):
        for Col in range(3):
            if b==A[Row][Col]:
                A[Row][Col]=0  

print(A)

Submission status: Runtime Error

Solution code:
import sys
n, m = map(int, input().split())
S = [0] * m
C = [0] * m
tmp = [0] * n

for i in range(m):
    S[i], C[i] = map(int, input().split())

for s, c in zip(S, C):
    if tmp[s-1] == 0:
        tmp[s-1] = c
    elif tmp[s-1] == c:
        pass
    else:
        print(-1)
        sys.exit()

ans = 0
for i, a in enumerate(tmp[::-1]):
    ans += a*10**(i)

print(ans)

Submission status: Runtime Error

Solution code:
N, M = map(int, input().split())
sc = [list(map(int, input().split())) for _ in range(M)]
dic = {}

# 一桁で0のときの対応
if sc == [] and N == 1:
    print(0)
    exit()
if sc == [[1, 0]] and N == 1:
    print(0)
    exit()

# 文字を組み立てます。
for k in sc:
    if k[0] in dic:
        if dic[k[0]] != k[1]:  # 重なったら即アウト
            print(-1)
            exit()
    else:
        dic[k[0]] = k[1]
ans = 0

if 1 in dic and dic[1] == 0:  # 一桁めが存在するかどうか判定している。
    print(-1)
    exit()
for k in dic:
    ans += 10**(N - k) * dic[k]
if ans < 10**(N - 1):
    ans += 10**(N - 1)
print(ans)

Submission status: Runtime Error

Solution code:
def solve():
    n = int(input())
    print(n+1)//2

solve()

Submission status: Runtime Error

Solution code:
n,m = map(int,input().split())
s = [0] * m
c = [0] * m
ans = [0] * n
flg = [0] * n
for i in range(m):
    s[i],c[i] = map(int,input().split())
for j in range(m):
    if flg[s[j]-1] == 1 and ans[s[j]-1] != c[j]:
        print(-1)
        exit()
    else:
        ans[s[j]-1] = c[j]
        flg[s[j]-1] = 1
    
if n > 1 and flg[0] == 1 and ans[0] == 0 :
    print(-1)
elif n > 1 and flg[0] == 0:
    ans[0] = 1
    print(''.join(map(str,ans)))
    exit()
else:
    print(''.join(map(str,ans)))

Submission status: Runtime Error

Solution code:
print((int(input() + 1) // 2)

Submission status: Runtime Error

Solution code:
n,m=map(int,input().split())
list=[list(map(int,input().split())) for _ in range(m)]
flag=False
ans=['0']*n
for i in range(m):
  if list[i][0]==n:
    flag=True
  for j in range(i+1,m):
    if list[i][0]==list[j][0] and list[i][1]!=list[j][1]:
      print('-1')
      exit()
  ans[list[i][0]-1]=str(min(int(ans[list[i][0]-1]),list[i][1]))
if flag==True:
  print(''.join(ans))
else:
  print('-1')

Submission status: Runtime Error

Solution code:
import sys
sys.setrecursionlimit(4100000)

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

to = [[] for i in range(N)]
block = [[] for i in range(N)]
sets = []

is_visited = [False] * N
graph_g = [None] * N
graph_cnt = -1

def dfs(s, g):
    global graph_cnt
    if is_visited[s]:
        return graph_g[s]

    is_visited[s] = True
    if g == None:
        graph_cnt += 1
        graph_g[s] = graph_cnt
    else:
        graph_g[s] = g

    for edge in to[s]:
        dfs(edge, graph_cnt)


for i in range(M):
    A, B = map(int, input().split())
    to[A-1].append(B-1)
    to[B-1].append(A-1)

for i in range(K):
    C, D = map(int, input().split())
    block[C-1].append(D-1)
    block[D-1].append(C-1)

for i in range(N):
    dfs(i, None)

group_to_idx = [set() for i in range(graph_cnt+1)]
if len(group_to_idx) != 0:
    for i in range(N):
        group_to_idx[graph_g[i]].add(i)

ret = []
for i in range(N):
    cand = len(group_to_idx[graph_g[i]])
    fri = len(to[i])
    tmp_block = len(group_to_idx[graph_g[i]] & set(block[i]))

    tmp_ret = cand - fri - tmp_block - 1
    ret.append(tmp_ret)

print(*ret)

Submission status: Runtime Error

Solution code:
n = int(input())
if n % 2 = 0:
  ans = n // 2
if n % 2 = 1:
  ans = n // 2 + 1
print(ans)

Submission status: Runtime Error

Solution code:
n = int(input())
if n % 2 = 0:
  ans = n // 2
if n % 2 = 1:
  ans = n //2 + 1
print(ans)

Submission status: Runtime Error

Solution code:
N = input()

if N % 2 == 0:
  print(int(N//2))
  
else:
  print(int(N//2+1))

Submission status: Runtime Error

Solution code:
import sys
input = sys.stdin.readline

N, M, K = map(int, input().split())
friends_table = [[] for i in range(N)]
for _ in range(M):
    a, b = map(int, input().split())
    friends_table[a-1] += [b-1]
    friends_table[b-1] += [a-1]

group_list = [i for i in range(N)]
friends_candidate = [[] for i in range(N)]

for i in range(N):
    # すでにDFS済み
    if i != group_list[i]:
        continue
    next_stack = [i]
    friend = [i]
    while next_stack:
        u = next_stack.pop(-1)
        for v in friends_table[u]:
            # 訪問済み
            if i == group_list[v]:
                continue
            friend += [v]
            group_list[v] = i
            next_stack += [v]
    for f in friend:
        friends_candidate[f] = friend

blocks_table = [[] for i in range(N)]
for _ in range(K):
    a, b = map(int, input().split())
    if group_list[a-1] == group_list[b-1]:
        blocks_table[a-1] += [b-1]
        blocks_table[b-1] += [a-1]

for i in range(N):
    print(len(friends_candidate[i]) - len(friends_table[i]) - len(blocks_table[i])-1)

Submission status: Runtime Error

Solution code:
N, M, K = map(int, input().split())
friends_table = [[] for i in range(N)]
for _ in range(M):
    a, b = map(int, input().split())
    friends_table[a-1] += [b-1]
    friends_table[b-1] += [a-1]

blocks_table = [[] for i in range(N)]
for _ in range(K):
    a, b = map(int, input().split())
    blocks_table[a-1] += [b-1]
    blocks_table[b-1] += [a-1]

group_list = [i for i in range(N)]
friends_candidate = [[] for i in range(N)]

for i in range(N):
    friend = [i]
    # すでにDFS済み
    if i != group_list[i]:
        continue
    next_stack = friends_table[i][:]]
    while next_stack:
        next = next_stack.pop()
        # 訪問済み
        if i == group_list[next]:
            continue
        friend += [next]
        group_list[next] = i
        next_stack += friends_table[next]
    for f in friend:
        friends_candidate[f] = friend

for i in range(N):
    print(len(set(friends_candidate[i]).difference(set(friends_table[i] + blocks_table[i])))-1)

Submission status: Runtime Error

Solution code:
import sys
import os
import math
import string
import collections

ii = lambda: int(sys.stdin.buffer.readline().rstrip())
il = lambda: list(map(int, sys.stdin.buffer.readline().split()))
fl = lambda: list(map(float, sys.stdin.buffer.readline().split()))
iln = lambda n: [int(sys.stdin.buffer.readline().rstrip()) for _ in range(n)]

iss = lambda: sys.stdin.buffer.readline().decode().rstrip()
sl = lambda: list(map(str, sys.stdin.buffer.readline().decode().split()))
isn = lambda n: [sys.stdin.buffer.readline().decode().rstrip() for _ in range(n)]

lcm = lambda x, y: x * y / math.gcd(x, y)

MOD = 10 ** 9 + 7
MAX = float('inf')


def f(N):
    return sum(map(int, str(N)))


def main():
    if os.getenv("LOCAL"):
        sys.stdin = open("input.txt", "r")

    N, M = il()
    SC = [il() for _ in range(M)]
    ret = [0] * N
    for s, c in SC:
        if ret[s - 1] == 0 or ret[s - 1] == c:
            ret[s - 1] = c
        else:
            print(-1)
            exit()
    else:
        q = ''.join(map(str, ret))
        print(q if q[0] != str(0) and len(q) == N else -1)


if __name__ == '__main__':
    main()

Submission status: Runtime Error

Solution code:
print(sum(divmod(input(a),2)))

Submission status: Runtime Error

Solution code:
i = input()
a = i//2
b = i%2
print(a+b)

Submission status: Runtime Error

Solution code:
print(round(int(input()/2))

Submission status: Runtime Error

Solution code:
import math
n=int(input())
print(math.ceil(n/2)

Submission status: Runtime Error

Solution code:
import math
N = int(input())
print(math.veil(N/2))

Submission status: Runtime Error

Solution code:
n = int(input())

if n%2 = 0:
    ans = n//2
else:
    ans = (n+1)//2

print(ans)ß

Submission status: Runtime Error

Solution code:
s=input()
if s%2==0:
  print(s//2)
else:
  print(s//2+1)

Submission status: Runtime Error

Solution code:
def ii():return int(input())
def iim():return map(int,input().split())
def iil():return list(map(int,input().split()))
def ism():return map(str,input().split())
def isl():return list(map(str,input().split()))

n,m = iim()
l = [-1]*n
flag = True
for i in range(m):
    s,c = iim()
    if l[s-1] != -1 and l[s-1] != c:
        flag = False
    else:
        l[s-1] = c

if n > 1 and l[0] == 0:
    flag = False

ans = ''
for i,item in enumerate(l):
    if item == -1:
        if i == 0 and n > 1:
            ans += '1'
        else:
            ans += '0'
    else:
        ans += str(item)
print(ans if flag else -1)

Submission status: Runtime Error

Solution code:
s = input()
print(s//2 + s%2)

Submission status: Runtime Error

Solution code:
n = int(input())
int ans = (n + 1) // 2
print(ans)

Submission status: Runtime Error

Solution code:
n = int(input())
int ans = (n + 1) // 2;
print(ans)

Submission status: Runtime Error

Solution code:
import queue
q = queue.Queue()

n, m, k = map(int, input().split())

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

block = [[] for _ in range(n)]
for _ in range(k):
    c, d = map(int, input().split())
    block[c-1].append(d-1)
    block[d-1].append(c-1)
    
#print(friend)
#print(block)
c_list = []
for i in range(n):
    counter = 0
    seen = [i]
    for j in friend[i]:
        q.put(j)
        seen.append(j)
    while q.qsize() != 0:
        x = q.get()
        for k in friend[x]:
            if not k in seen and not k in block[i]:
                q.put(k)
                seen.append(k)
                counter += 1
    c_list.append(counter)
    
print(c_list)

Submission status: Runtime Error

Solution code:
n = int(input())

if n%2 == 0:
    print(n/2)
else:
    print(math.floor(n/2)+1)

Submission status: Runtime Error

Solution code:
# -*- coding: utf-8 -*-
def main():
    N, M =  [int(i) for i in input().split()]

    S = []
    for i in range(M):
        S.append([int(i) for i in input().split()])

    answer = "0" * N
    if N != 1 and [1, 0] in S:
        print(-1)
        return

    for s in S:
        if answer[int(s[0])-1] == "0":
            answer = answer[:int(s[0])-1] + str(s[1]) + answer[int(s[0]):]
            #print(answer)
        elif answer[int(s[0])-1] != str(s[1]):
            #print(answer)
            print(-1)
            return
        else:
            continue

    if answer[0] == "0":
        print("1" + answer[1:])
    else:
        print(answer)

if __name__ == "__main__":
    main()