import sys input = lambda : sys.stdin.readline().rstrip() sys.setrecursionlimit(max(1000, 10**9)) write = lambda x: sys.stdout.write(x+"\n") """ビット行列 1次方程式、ランクrank """ class BitMatrix: def __init__(self, h, w, v=None): self.h = h self.w = w self.l = [0]*h if v is not None: for i in range(h): for j in range(w): if v[i][j]: self.l[i] |= (1<>j&1) M.append(l) return M def swap(self, i, j): """i行目とj行目のスワップ """ self.l[i], self.l[j] = self.l[j], self.l[i] def __getitem__(self, args): if not hasattr(args, "__getitem__"): return self.l[args] else: assert args[1]>args[1])&1 def __setitem__(self, args, v): if not hasattr(args, "__getitem__"): self.l[args] = v else: assert args[1]>args[1]&1: self.l[args[0]] -= (1<>i)&1) A.append(tmp) b.append((x>>i)&1) for i in range(m): tmp = [] t,l,r = map(int, input().split()) tmp = [0]*(l-1) + [1]*(r-l+1) + [0]*(n-r) A.append(tmp) b.append(t) res, rank = solve(A, b) if rank==-1: ans = 0 else: M = 10**9+7 ans = pow(2, n-rank, M) print(ans)