Problem p02679 (C++) — buggy submission, verdict: Runtime Error

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
#define rep(i, n) for (int i = 0; (i) < (n); i++)
#define rep1(i, n) for (int i = 1; (i) <= (n); i++)
#define mst(a, b) memset(a, b, sizeof(a))
#define scd(a) scanf("%d", &a)
#define scdd(a, b) scanf("%d%d", &a, &b)
#define scddd(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define dbg(a) cout << "* " << #a << " : " << a << endl
#define fr first
#define se second
// #define ls x<<1
// #define rs x<<1|1
#define ll long long
#define ull unsigned long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<double, double>
#define lowbit(x) x & (-x)
#define ac cout << ans << endl
// #define DEBUG 0
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-8;
const ull hashp = 131;
const ll INF = 0x3f3f3f3f3f3f3f3fll;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 100;
map<pll, int> mp, vis;
ll x[maxn], y[maxn];
int qpow(int a, int b) {
  int ret = 1;
  while (b) {
    if (b & 1)
      ret = 1ll * ret * a % mod;
    b >>= 1;
    a = 1ll * a * a % mod;
  }
  return ret;
}
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
void solve() {
  int n;
  scd(n);
  int num = 0;
  rep1(i, n) {
    scanf("%lld%lld", &x[i], &y[i]);
    if (!x[i] && !y[i]) {
      num++;
      continue;
    }
    // if(!x[i])y[i]/=abs(y[i]);
    // if(!y[i])x[i]/=abs(x[i]);
    ll g = gcd(x[i], y[i]);
    mp[pll(x[i] / g, y[i] / g)]++;
    mp[pll(-x[i] / g, -y[i] / g)]++;
  }
  int ans = 1;
  rep1(i, n) {
    if (!x[i] && !y[i])
      continue;
    ll g = gcd(x[i], y[i]);
    if (vis.count(pll(x[i] / g, y[i] / g)))
      continue;
    vis[pll(x[i] / g, y[i] / g)] = vis[pll(-y[i] / g, x[i] / g)] =
        vis[pll(-x[i] / g, -y[i] / g)] = vis[pll(y[i] / g, -x[i] / g)] = 1;
    ans = 1ll * ans *
          (((qpow(2, mp[pll(x[i] / g, y[i] / g)]) +
             qpow(2, mp[pll(-y[i] / g, x[i] / g)])) %
                mod -
            1 + mod) %
           mod) %
          mod;
  }
  ans = (ans + num) % mod;
  ans = (ans - 1 + mod) % mod;
  ac;
}
int main() {
  // IOS;
  // freopen("D:\\\\data.txt","r",stdin);
  // freopen("D:\\\\out.txt","w",stdout);
  solve();

  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;

  return 0;
}

Error: 0

Fixed submission:

#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <vector>
#define rep(i, n) for (int i = 0; (i) < (n); i++)
#define rep1(i, n) for (int i = 1; (i) <= (n); i++)
#define mst(a, b) memset(a, b, sizeof(a))
#define scd(a) scanf("%d", &a)
#define scdd(a, b) scanf("%d%d", &a, &b)
#define scddd(a, b, c) scanf("%d%d%d", &a, &b, &c)
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define dbg(a) cout << "* " << #a << " : " << a << endl
#define fr first
#define se second
// #define ls x<<1
// #define rs x<<1|1
#define ll long long
#define ull unsigned long long
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pdd pair<double, double>
#define lowbit(x) x & (-x)
#define ac cout << ans << endl
// #define DEBUG 0
using namespace std;
const double pi = acos(-1.0);
const double eps = 1e-8;
const ull hashp = 131;
const ll INF = 0x3f3f3f3f3f3f3f3fll;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 100;
map<pll, int> mp, vis;
ll x[maxn], y[maxn];
int qpow(int a, int b) {
  int ret = 1;
  while (b) {
    if (b & 1)
      ret = 1ll * ret * a % mod;
    b >>= 1;
    a = 1ll * a * a % mod;
  }
  return ret;
}
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
void solve() {
  int n;
  scd(n);
  int num = 0;
  rep1(i, n) {
    scanf("%lld%lld", &x[i], &y[i]);
    if (!x[i] && !y[i]) {
      num++;
      continue;
    }
    ll g = gcd(x[i], y[i]);
    mp[pll(x[i] / g, y[i] / g)]++;
    mp[pll(-x[i] / g, -y[i] / g)]++;
  }
  int ans = 1;
  rep1(i, n) {
    ll g = gcd(x[i], y[i]);
    if (vis.count(pll(x[i] / g, y[i] / g)))
      continue;
    vis[pll(x[i] / g, y[i] / g)] = vis[pll(-y[i] / g, x[i] / g)] =
        vis[pll(-x[i] / g, -y[i] / g)] = vis[pll(y[i] / g, -x[i] / g)] = 1;
    ans = 1ll * ans *
          (((qpow(2, mp[pll(x[i] / g, y[i] / g)]) +
             qpow(2, mp[pll(-y[i] / g, x[i] / g)])) %
                mod -
            1 + mod) %
           mod) %
          mod;
  }
  ans = (ans + qpow(2, num) - 1) % mod;
  ans = (ans - 1 + mod) % mod;
  ac;
}
int main() {
  // IOS;
  // freopen("D:\\\\data.txt","r",stdin);
  // freopen("D:\\\\out.txt","w",stdout);
  solve();

  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;
  ;

  return 0;
}