# 8882304
n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]
b = []
c = []
for i in range(n):
d = True
e = True
for j in range(n):
if a[j][i] == 1:
d = False
if a[i][j] == 1:
e = False
if d:
b.append(i + 1)
if e:
c.append(i + 1)
print(len(b), *b)
print(len(c), *c)
# 8882302
from sys import setrecursionlimit
setrecursionlimit(200000)
n, s = map(int, input().split())
g = [[] for _ in range(n + 1)]
for i in range(1, n + 1):
t = list(map(int, input().split()))
if t:
t.sort()
g[i] = t
v = []
def dfs(x):
v.append(x)
for y in g[x]:
if y not in v:
dfs(y)
dfs(s)
if len(v) == n:
print(*v)
else:
print("HET")
# 8882305
from collections import deque
n, m, s = map(int, input().split())
g = [[] for _ in range(n + 1)]
for _ in range(m):
u, v = map(int, input().split())
g[u].append(v)
g[v].append(u)
for i in range(1, n + 1):
g[i].sort()
v = []
q = deque([s])
v.append(s)
while q:
x = q.popleft()
for y in g[x]:
if y not in v:
v.append(y)
q.append(y)
if len(v) == n:
print(*v)
else:
print("HET")
# 8882347
from collections import deque
n, m, s = map(int, input().split())
a = [list(map(int, input().split())) for _ in range(n)]
g = [[] for _ in range(n + 1)]
for i in range(n):
for j in range(m):
if a[i][j] == 1:
g[i + 1].append(j + 1)
for i in range(1, n + 1):
g[i].sort()
v = []
q = deque([s])
v.append(s)
while q:
x = q.popleft()
for y in g[x]:
if y <= n and y not in v:
v.append(y)
q.append(y)
if len(v) == n:
print(*v)
else:
print("НЕТ")
# 8882349
n, m = map(int, input().split())
e = set()
for _ in range(m):
u, v = map(int, input().split())
e.add((u, v))
f = True
for i in range(1, n + 1):
for j in range(i + 1, n + 1):
if (i, j) not in e and (j, i) not in e:
f = False
break
if not f:
break
if f and m == n * (n - 1) // 2:
print("YES")
else:
print("NO")
# 8882342
from collections import deque
N, S, V1, V2 = map(int, input().split())
g = [[] for _ in range(N + 1)]
for i in range(1, N + 1):
r = list(map(int, input().split()))
for j in range(1, N + 1):
if r[j - 1] == 1:
g[i].append(j)
def bfs(x):
d = [-1] * (N + 1)
d[x] = 0
q = deque([x])
while q:
c = q.popleft()
for nxt in g[c]:
if d[nxt] == -1:
d[nxt] = d[c] + 1
q.append(nxt)
return d
d1 = bfs(V1)
d2 = bfs(V2)
if d1[S] == -1 and d2[S] == -1:
print("infinity")
elif d1[S] == -1:
print("PI")
elif d2[S] == -1:
print("VI")
elif d1[S] < d2[S]:
print("VI")
elif d2[S] < d1[S]:
print("PI")
else:
print("fifth-fifth")
# 8882341
def dfs(x, y):
if x < 0 or x >= N or y < 0 or y >= N or a[x][y] != '.' or u[x][y]:
return 0
u[x][y] = True
s = 1
for dx, dy in [(1,0),(-1,0),(0,1),(0,-1)]:
s += dfs(x + dx, y + dy)
return s
N = int(input())
a = [list(input().strip()) for _ in range(N)]
x, y = map(int, input().split())
x -= 1
y -= 1
u = [[False] * N for _ in range(N)]
print(dfs(x, y))
# 8882343
n, m = map(int, input().split())
e = set()
for _ in range(m):
u, v = map(int, input().split())
if u > v:
u, v = v, u
e.add((u, v))
f = True
for i in range(1, n + 1):
for j in range(i + 1, n + 1):
if (i, j) not in e:
f = False
break
if not f:
break
print("YES" if f else "NO")
# 8882376
from sys import setrecursionlimit
setrecursionlimit(200000)
n, s = map(int, input().split())
g = [[] for _ in range(n + 1)]
for i in range(1, n + 1):
t = list(map(int, input().split()))
if t:
t.sort()
g[i] = t
v = []
def dfs(x):
v.append(x)
for y in g[x]:
if y not in v:
dfs(y)
dfs(s)
if len(v) == n:
print(*v)
else:
print("HET")
# 8882380
n, s = map(int, input().split())
g = [[] for _ in range(n + 1)]
for i in range(1, n + 1):
t = list(map(int, input().split()))
if t:
t.sort()
g[i] = t
v = []
def dfs(x):
v.append(x)
for y in g[x]:
if y not in v:
dfs(y)
dfs(s)
if len(v) == n:
print(*v)
else:
print("HET")