import sys
input = sys.stdin.readline
MOD = 10**9 + 7
def merge(a_len, a_cnt, b_len, b_cnt):
if a_len > b_len:
return a_len, a_cnt
if b_len > a_len:
return b_len, b_cnt
if a_len == 0:
return 0, 0
return a_len, (a_cnt + b_cnt) % MOD
class Fenwick:
def __init__(self, n):
self.n = n
self.len_bit = [0] * (n + 2)
self.cnt_bit = [0] * (n + 2)
def update(self, i, length, count):
n = self.n
len_bit = self.len_bit
cnt_bit = self.cnt_bit
while i <= n:
cur_len = len_bit[i]
if length > cur_len:
len_bit[i] = length
cnt_bit[i] = count
elif length == cur_len:
if length != 0:
cnt_bit[i] = (cnt_bit[i] + count) % MOD
i += i & -i
def query(self, i):
best_len = 0
best_cnt = 0
len_bit = self.len_bit
cnt_bit = self.cnt_bit
while i > 0:
cur_len = len_bit[i]
if cur_len > best_len:
best_len = cur_len
best_cnt = cnt_bit[i]
elif cur_len == best_len and cur_len != 0:
best_cnt = (best_cnt + cnt_bit[i]) % MOD
i -= i & -i
return best_len, best_cnt
def solve():
n = int(input())
arr = list(map(int, input().split()))
vals = sorted(set(arr))
rank = {v: i + 1 for i, v in enumerate(vals)}
m = len(vals)
inc_len = [0] * n
inc_cnt = [0] * n
dec_len = [0] * n
dec_cnt = [0] * n
bit_inc = Fenwick(m)
bit_dec = Fenwick(m)
for i in range(n - 1, -1, -1):
p = rank[arr[i]]
rev = m - p + 1
best_len, ways = bit_inc.query(rev - 1)
if best_len == 0:
inc_len[i] = 1
inc_cnt[i] = 1
else:
inc_len[i] = best_len + 1
inc_cnt[i] = ways
bit_inc.update(rev, inc_len[i], inc_cnt[i])
best_len, ways = bit_dec.query(p - 1)
if best_len == 0:
dec_len[i] = 1
dec_cnt[i] = 1
else:
dec_len[i] = best_len + 1
dec_cnt[i] = ways
bit_dec.update(p, dec_len[i], dec_cnt[i])
best = 0
for i in range(n):
cur = inc_len[i] + dec_len[i] - 1
if cur > best:
best = cur
total = 0
for i in range(n):
if inc_len[i] + dec_len[i] - 1 == best:
total = (total + inc_cnt[i] * dec_cnt[i]) % MOD
total = total * pow(2, n - best, MOD) % MOD
print(best, total)
solve()