条件を満たす0以上の整数がある場合、最小のものを出力する問題です。
「0は1桁の整数。その他の整数については、先頭に0をつけた表記は認めない」と言う条件に注意が必要です。
提出
n, m = map(int, input().split())
li = [0] * n
for i in range(m):
    si, ci = map(int, input().split())
    if li[si-1] != 0 and li[si-1] != ci:
        print(-1)
        exit(0)
    if si == 1 and ci == 0:
        if n > 1:
            print(-1)
            exit(0)
    li[si-1] = ci
if n > 1 and li[0] == 0:
    li[0] = 1
for i in range(n):
    print(li[i], end="")最初に0で埋めたリストを作成します。
このリストに si,ci の条件を用いて入力をしていき、矛盾しない整数を作ります。
リストのインデックスは0始まりなので、リスト内の「si-1」にciを入力することを考えます。
このとき、「li[si-1]」の値が、0でもciでもない場合は、「-1」を出力してプログラムを終了させます。
0でもciでもないということは、すでに指定の数を入力しており、これから入力するciとも異なるということで、矛盾してしまうためです。
同じように、si(左から数えた桁数)が1で、ciが0の場合も同様に矛盾します。
ただ、nが1の場合のみ、1桁で0ということがあり得るので、「n>1」を条件に加えています。
そのほか、すべての整数のパターンを調べる方法もあります。
Nが3以下、条件のMも5以下であるので、時間的にも間に合います。
提出
n, m = map(int, input().split())
sc_li = [list(map(int,input().split())) for _ in range(m)]
sc = []
ans = ""
for i in range(1000):
    flag = True
    ans = str(i)
    if len(ans) != n:
        continue
    for j in range(m):
        si, ci = sc_li[j]
        if int(ans[si-1]) != ci:
            flag = False
    if flag:
        print(ans)
        exit(0)
print(-1)試す整数は0〜999です。
flagを「True」にしておきます。
整数を文字列に変換し、長さがn以下の場合は、「continue」で次の整数を試します。
すべての siを判定して、ciと異なるものが出てきたら、flagが「False」になります。
最後まで「True」だった最初の数(ansは文字列のまま出力してOK)が答えになり、999まで試して、条件に合うものがない場合は「-1」を出力します。
 Pythonで競プロしてる
				Pythonで競プロしてる	




