This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<cstdio>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
typedef unsigned long long ull;
ull gcd(ull a, ull b){
    return ( a % b == 0 ) ? b : gcd(b, a % b);
}
const ull mod = 1000000007;
struct Solution { ull gcd, x, y;
    Solution(ull gcd, ull x, ull y)
        :gcd(gcd), x(x), y(y)
    {
        
    }
    
    
};
Solution extendedEuclid(ull a, ull b) {
  ull q = a / b, r = a % b;
  if(r == 0) return Solution(b, 0, 1); 
  Solution s = extendedEuclid(b, r);                                                                                                            
  // now, we have
  // s.gcd = s.x * b + s.y * r
  //       = s.x * b + s.y * (a - q * b)
  //       = s.y * a + (s.x - q * s.y) * b
  return Solution(s.gcd, s.y, s.x - q * s.y);
}
int main(){
    ull h, w;
    cin >> h>> w;
    ull bot = 1;
    ull g;
    h = h+2;
    w= w+2;
    
    g=  gcd(h, bot);
    bot /= g;
    h /= g;
    
    g = gcd(w, bot);
    w/= g;
    bot /= g;
    
    h %= mod;
    w %= mod;
    
    ull top = ( h * w ) % mod;
    ull rev = 1;
    if(bot != 1){
        Solution sol = extendedEuclid(bot, mod);
        rev =  sol.x  + mod;
    }
    
    cout << ( top * rev ) % mod << endl;
    
    
    
    
    
    return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |