You are given a string s of length n.
Does a tree with n vertices that satisfies the following conditions exist?
 - The vertices are numbered 1,2,..., n.
 - The edges are numbered 1,2,..., n-1, and Edge i connects Vertex u_i and v_i.
 - If the i-th character in s is 1, we can have a connected component of size i by removing one edge from the tree.
 - If the i-th character in s is 0, we cannot have a connected component of size i by removing any one edge from the tree.
If such a tree exists, construct one such tree.

-----Constraints-----
 - 2 \leq n \leq 10^5
 - s is a string of length n consisting of 0 and 1.

-----Input-----
Input is given from Standard Input in the following format:
s

-----Output-----
If a tree with n vertices that satisfies the conditions does not exist, print -1.
If a tree with n vertices that satisfies the conditions exist, print n-1 lines.
The i-th line should contain u_i and v_i with a space in between.
If there are multiple trees that satisfy the conditions, any such tree will be accepted.

-----Sample Input-----
1111

-----Sample Output-----
-1

It is impossible to have a connected component of size n after removing one edge from a tree with n vertices.

```python

USER_FILENAME = "<user_code>"
import sys, json, builtins
import math, heapq, bisect, itertools, functools, collections, statistics, fractions, decimal, operator, array, random, re, string, os, pathlib
try:
    import resource as _res
except Exception:
    _res = None
from collections import Counter, defaultdict, deque, OrderedDict
from functools import lru_cache, reduce
from itertools import accumulate, permutations, combinations, product
from math import gcd, ceil, floor, sqrt
from decimal import Decimal
try:
    from typing import *
except Exception:
    pass
try:
    sys.setrecursionlimit(1_000_000)
except Exception:
    pass
try:
    import site as _site
    try:
        _sys_sites = _site.getsitepackages() if hasattr(_site, "getsitepackages") else []
        for _p in _sys_sites:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
    try:
        _usp = _site.getusersitepackages()
        if isinstance(_usp, str):
            _usp = [_usp]
        for _p in _usp:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
except Exception:
    pass

ns = {"__name__": "__main__"}
for _k, _v in list(globals().items()):
    if not _k.startswith("_"):
        ns[_k] = _v
_CODE = 'import sys\nsys.setrecursionlimit(10**7) #再帰関数の上限,10**5以上の場合python\nimport math\nfrom copy import copy, deepcopy\nfrom copy import deepcopy as dcp\nfrom operator import itemgetter\nfrom bisect import bisect_left, bisect, bisect_right#2分探索\n#bisect_left(l,x), bisect(l,x)#aはソート済みである必要あり。aの中からx未満の要素数を返す。rightだと以下\nfrom collections import deque\n#deque(l), pop(), append(x), popleft(), appendleft(x)\n#q.rotate(n)で → にn回ローテート\nfrom collections import Counter#文字列を個数カウント辞書に、\n#S=Counter(l),S.most_common(x),S.keys(),S.values(),S.items()\nfrom itertools import accumulate,combinations,permutations#累積和\n#list(accumulate(l))\nfrom heapq import heapify,heappop,heappush\n#heapify(q),heappush(q,a),heappop(q) #q=heapify(q)としないこと、返り値はNone\n#import fractions#古いatcoderコンテストの場合GCDなどはここからimportする\nfrom functools import lru_cache#pypyでもうごく\n#@lru_cache(maxsize = None)#maxsizeは保存するデータ数の最大値、2**nが最も高効率\nfrom decimal import Decimal\n\ndef input(): \n    x=sys.stdin.readline()\n    return x[:-1] if x[-1]=="\\n" else x\ndef printl(li): _=print(*li, sep="\\n") if li else None\ndef argsort(s, return_sorted=False): \n    inds=sorted(range(len(s)), key=lambda k: s[k])\n    if return_sorted: return inds, [s[i] for i in inds]\n    return inds\ndef alp2num(c,cap=False): return ord(c)-97 if not cap else ord(c)-65\ndef num2alp(i,cap=False): return chr(i+97) if not cap else chr(i+65)\ndef matmat(A,B):\n    K,N,M=len(B),len(A),len(B[0])\n    return [[sum([(A[i][k]*B[k][j]) for k in range(K)]) for j in range(M)] for i in range(N)]\ndef matvec(M,v):\n    N,size=len(v),len(M)\n    return [sum([M[i][j]*v[j] for j in range(N)]) for i in range(size)]\ndef T(M):\n    n,m=len(M),len(M[0])\n    return [[M[j][i] for j in range(n)] for i in range(m)]\ndef main():\n    mod = 1000000007\n    #w.sort(key=itemgetter(1),reversed=True)  #二個目の要素で降順並び替え\n\n    #N = int(input())\n    #N, K = map(int, input().split())\n    #A = tuple(map(int, input().split())) #1行ベクトル\n    #L = tuple(int(input()) for i in range(N)) #改行ベクトル\n    #S = tuple(tuple(map(int, input().split())) for i in range(N)) #改行行列\n\n    s=input()\n    N=len(s)\n    f=1\n    if s[-1]=="1" or s[0]=="0":\n        f=0\n    for i in range(1,N//2+1):\n        if s[i-1]!=s[N-i-1]:\n            f=0\n            break\n    if not f:\n        print(-1)\n        return\n    \n    il=[]\n    edge=[]\n    for i in range(1,N//2+1):\n        if s[i-1]=="0":\n            il.append(i)\n        else:\n            for j in il:\n                edge.append((i,j))\n            il=[i]\n    i=N//2+1\n    for j in il:\n        edge.append((i,j))\n    j=i\n    for i in range(N//2+2,N+1):\n        edge.append((j,i))\n\n    for e in edge:\n        print(*e)\n\n\n\n\n\n\n\ndef __starting_point():\n    main()\n__starting_point()'
_co = compile(_CODE, USER_FILENAME, "exec")
exec(_co, ns, ns)

```

Measured memory_bytes: 178990