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.

Difficulty: HARD

Solutions:
def solve(s):
	n = len(s)
	if s[0] != '1':
		print(-1)
		return
	if s[-1] != '0':
		print(-1)
		return
	for i in range((n - 1) // 2):
		if s[i] != s[n - 2 - i]:
			print(-1)
			return
	edges = [(1, 2)]
	s = s[:n // 2]
	p = 1
	if 3 < n and s[1] == '1':
		p = 2
	for i in range(1, n // 2):
		edges.append((p, i + 2))
		if s[i] == '1':
			p = i + 2
	for i in range(n // 2 + 1, n):
		edges.append((p, i + 1))
	for uv in edges:
		(u, v) = uv
		print('{} {}'.format(u, v))

def main():
	s = input()
	solve(s)
main()


import sys
s = input()
n = len(s)
if s[0] == '0' or s[-1] == '1':
	print(-1)
	sys.exit()
possible = []
for i in range(n // 2):
	if s[i] != s[n - i - 2]:
		print(-1)
		sys.exit()
	if i > 0 and s[i] == '1':
		possible.append(i + 1)
l = len(possible)
edges = []
cnt = 0
for i in range(l):
	for j in range(cnt + 1, possible[i]):
		edges.append([j, possible[i]])
	if i != l - 1:
		edges.append([possible[i], possible[i + 1]])
	else:
		edges.append([possible[i], possible[i] + 1])
	cnt = possible[i]
for i in range(cnt + 2, n + 1):
	edges.append([cnt + 1, i])
for e in edges:
	print(*e)