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 = 'def getN():\n    return int(input())\ndef getNM():\n    return map(int, input().split())\ndef getList():\n    return list(map(int, input().split()))\ndef getArray(intn):\n    return [int(input()) for i in range(intn)]\ndef input():\n    return sys.stdin.readline().rstrip()\ndef rand_N(ran1, ran2):\n    return random.randint(ran1, ran2)\ndef rand_List(ran1, ran2, rantime):\n    return [random.randint(ran1, ran2) for i in range(rantime)]\ndef rand_ints_nodup(ran1, ran2, rantime):\n  ns = []\n  while len(ns) < rantime:\n    n = random.randint(ran1, ran2)\n    if not n in ns:\n      ns.append(n)\n  return sorted(ns)\n\ndef rand_query(ran1, ran2, rantime):\n  r_query = []\n  while len(r_query) < rantime:\n    n_q = rand_ints_nodup(ran1, ran2, 2)\n    if not n_q in r_query:\n      r_query.append(n_q)\n  return sorted(r_query)\n\nfrom collections import defaultdict, deque, Counter\nfrom decimal import *\nfrom heapq import heapify, heappop, heappush\nimport math\nimport random\nimport string\nfrom copy import deepcopy\nfrom itertools import combinations, permutations, product\nfrom operator import mul, itemgetter\nfrom functools import reduce\nfrom bisect import bisect_left, bisect_right\n\nimport sys\nsys.setrecursionlimit(1000000000)\nmod = 10 ** 9 + 7\n\n#############\n# Main Code #\n#############\n\n"""\n頂点がN個、辺がN - 1本あります\n1110\n任意の辺を一つ取り除くとサイズ1の連結成分が作れる\n任意の辺を一つ取り除くとサイズ2の連結成分が作れる\n任意の辺を一つ取り除くとサイズ3の連結成分が作れる\n\nどの辺を一つ取り除いてもサイズ4の連結成分は作れない\n\nサイズ1の連結成分が作れること、サイズnの連結成分は作れないことは自明\nサイズiの連結成分が作れるなら、サイズn - iの連結成分が作れる\n単純な木構造から考えよう\n・パスグラフ\n・スターグラフ\n\n・パスグラフ\n1(1がN - 1個) + 0になる\n・スターグラフ\n10...010になる\n\n他のものは作れないか\n連結成分iのものが作れる条件、作れない条件\n作れない条件が知りたい\u3000単体であれば必ず作れる\n（連結成分iが作れ、jが作れない）が成り立たない場合がある？\n部分木から考えていく\n大きさ2のパスグラフは11\nこれをrootにつけると 110になる\n大きさ3のスターグラフは101\nこれをrootにつけると1010になる\n\n大きさnのグラフにパス状に/スター状に繋げていくと\n1 - 2のグラフに\nパス状に3を繋げると 110\nスター状に繋げると 110 ここまでは同じ\n1 - 2 - 3のグラフに\nパス状に繋げると 1110\nスター状に繋げると 1010\n\nパスグラフに辺を加えて連結成分jが作れないようにしよう\n\n11010110は作れるか\n一方をパスグラフに、一方をスターグラフにする?\n1 - 2の状態でスタート\nもしS[i] = 1なら親要素にi + 2をつけ、それを親要素にする\nもしS[i] = 0なら現在の親要素につける\n"""\n\nS = input()\nN = len(S)\n# この条件を満たしていると木を作ることができる\nif S[N - 1] == "1" or S[N - 2] == "0" or S[0] == "0":\n    print(-1)\nelse:\n    for i in range(N - 1):\n        if S[i] != S[N - i - 2]:\n            print(-1)\n            return\n    ans = []\n    parent = 1 # 現在のparent\n    for i in range(N - 1):\n        if S[i] == "1":\n            # パスグラフ状\n            ans.append([parent, i + 2])\n            parent = i + 2 # parent変更\n        else:\n            # スターグラフ状\n            ans.append([parent, i + 2])\n    for i in ans:\n        print(i[0], i[1])'
_co = compile(_CODE, USER_FILENAME, "exec")
exec(_co, ns, ns)

```

Measured memory_bytes: