---
# System prepended metadata

title: 七圣召唤

---

## 七圣召唤

时间限制：1s

空间限制：64MB

《七圣召唤》是《原神》的一个卡牌游戏。

现在有 $8$ 个元素骰分别为 $a_1,a_2, \cdots, a_8$，其中 $a_i$ 代表第 $i$ 个元素骰的元素标号。

($0, 1, 2, 3, 4, 5, 6, 7$ 分别代表水元素、火元素、风元素、冰元素、岩元素、草元素、雷元素、万能元素)

现给定 $n$ 个要释放的技能，$(x_1,y_1),\cdots,(x_n,y_n)$，其中 $(x_i, y_i)$ 代表第 $i$ 个技能释放需要标号为 $x_i$ 的元素骰子 $y_i$ 个。

**万能元素骰子可以转换为任何元素的骰子。例如一个万能元素骰子可以转换为一个火元素骰子。**

现在你可以有一次重投机会，即选择任意个元素骰子进行重新投掷，请你计算满足释放 $n$ 个技能重投的方案数。

### 输入格式:

输入的第一行包含 $8$ 个整数 $a_1,a_2, \cdots, a_8$ $(0 \le a_i \le 7)$

输入的第二行包含一个正整数 $n$ $(1 \le n \le 7)$

接下来输入 $n$ 行，每行包含两个整数 $(x_i, y_i)$ $(0 \le x_i \le 6, 1 \le y_i \le 8)$

### 输出格式:

输出满足释放 $n$ 个技能重投的方案数。

### 输入样例:


```in
1 7 6 3 0 1 2 4
3
1 1
2 4
3 3
```

### 输出样例:

```out
24
```

## 样例解释



## STD：
```cpp
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main() {
    cin.tie(0) -> sync_with_stdio(0);
    vector<int> a(8), cnt(8);
    for (int i = 0; i < 8; i ++) {
        cin >> a[i];
        cnt[a[i]] ++;
    }
    int n;
    cin >> n;
    vector<pair<int, int>> p(n);
    for (auto &[x, y] : p) {
        cin >> x >> y;
    }
    int res = 0;
    for (int i = 0; i < 1 << 8; i ++) {
        vector<int> t = cnt;
        for (int j = 0; j < 8; j ++) {
            if (i >> j & 1) {
                t[a[j]] --;
                t[7] ++;
            }
        }
        int c = 0;
        for (auto [x, y] : p) {
            if (t[x] < y) {
                c += y - t[x];
            }
        }
        res += (t[7] >= c);
    }
    cout << res << "\n";
}
```