fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #include <ext/pb_ds/assoc_container.hpp>
  4. #include <ext/pb_ds/tree_policy.hpp>
  5. using namespace __gnu_pbds;
  6. #define ordered_set tree<long long, null_type,less<>, rb_tree_tag,tree_order_statistics_node_update>
  7.  
  8. using ll = long long;
  9. using ull = unsigned long long;
  10. using ld = long double;
  11. using vll = vector<ll>;
  12. using pll = pair<ll, ll>;
  13. using mll = map<ll,ll>;
  14. using sll = set<ll>;
  15. #define iv(v) for(auto &i:v) cin >> i
  16. #define ov(v) for(auto &i:v) cout << i << " "
  17. #define all(v) v.begin(), v.end()
  18. #define rall(v) v.rbegin(), v.rend()
  19. #define yes cout << "YES\n"
  20. #define no cout << "NO\n"
  21.  
  22. #define Bismillah ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
  23.  
  24. const ll MOD = 1e9 + 7;
  25.  
  26. ll add(ll a, ll b, ll mod=MOD) {return ((a % mod) + (b % mod)) % mod;}
  27. ll mul(ll a, ll b, ll mod=MOD) {return ((a % mod) * (b % mod)) % mod;}
  28. ll sub(ll a, ll b) {return (((a - b) % MOD) + MOD) % MOD;}
  29. ll modExp(ll a, ll b) {
  30. if (b <= 0) return 1;
  31. ll ret = modExp(a * a % MOD, b / 2);
  32. if (b % 2) ret = ret * a % MOD;
  33. return ret;
  34. }
  35. ll inverse(ll b) {return modExp(b, MOD - 2);}
  36. ll divv(ll a, ll b) {return ((a % MOD) * (inverse(b) % MOD)) % MOD;}
  37.  
  38.  
  39. #define ull ll
  40. void solve(ll t) {
  41. ll k,m;
  42. cin >> k >> m;
  43. vll v(m);
  44. iv(v);
  45. ll x=1;
  46. ll ans=0;
  47. for (ll i=m-1; i>=0; i--) {
  48. if(v[i]==0) ans=add(ans,x);
  49. x=mul(x,k);
  50. }
  51. cout << ans << endl;
  52. }
  53. int main() {
  54. ll t=1;
  55. cin >> t;
  56. for (int i=1; i<=t; i++) {
  57. solve(i);
  58. }
  59.  
  60. return 0;
  61. }
Success #stdin #stdout 0s 5312KB
stdin
Standard input is empty
stdout
883106845