#atcoder template
def main():
    import sys
    imput = sys.stdin.readline
    #文字列入力の時は上記はerrorとなる。
    #ここにコード
    #input
    import numpy as np
    N = int(input())
    C = np.zeros([N, 2], int)

    for i in range(N):
        A, B = map(int, input().split())
        C[i] = [A, B]

    #output
    #A_i * A_j + B_i * B_j = 0
    mod = 1000000007
    #制限なく1匹以上を選ぶ選び方はpow(2, N) - 1通り
    #iに対して内積が0になるものがa通りとする。

    answer = pow(2, N) - 1
    answer %= mod
    for i in range(N):
        D = C[i]
        E = np.dot(C, D)
        a = N - np.count_nonzero(E)
        if a == 1:
            answer -= pow(2, N-2)//2
        elif a > 1:
            answer -= pow(2, N-a-1)//pow(2, a)

    print(answer)
    #N = 1のときなどcorner caseを確認！
if __name__ == "__main__":
    main()