Problem:
Score : 100 points

Problem Statement

You are given positive integers A and B.

If A is a divisor of B, print A + B; otherwise, print B - A.

Constraints

All values in input are integers.

1 \leq A \leq B \leq 20

Input

Input is given from Standard Input in the following format:

A B

Output

If A is a divisor of B, print A + B; otherwise, print B - A.

Sample Input 1

4 12

Sample Output 1

16

As 4 is a divisor of 12, 4 + 12 = 16 should be printed.

Sample Input 2

8 20

Sample Output 2

12

Sample Input 3

1 1

Sample Output 3

2

1 is a divisor of 1.

Solution in C# (Mono 4.6.2.0) (judge verdict: Runtime Error)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AtCoder
{
    class Program
    {
        private static int Answer = int.MaxValue;

        static void Main(string[] args)
        {
            Console.WriteLine(Solve());
            return;
        }

        private static int Solve()
        {
            int n = int.Parse(Console.ReadLine());
            var array = Console.ReadLine()
                .Split(' ')
                .Select(x => int.Parse(x))
                .ToArray();

            var a0 = Mod(array);
            if (a0.Any(a => a.All(x => x == 0))) return array.Min();

            IEnumerable<int[]> a1 = a0;
            while (true)
            {
                var a2 = Mod(a1);
                a1 = Except(a2);
                if (!a1.Any()) return Answer;
            }
        }

        private static IEnumerable<int[]> Mod(IEnumerable<int[]> array)
        {
            foreach (var a in array)
            {
                var ma = Mod(a);
                foreach (var m in ma) yield return m;
            }
        }

        private static IEnumerable<int[]> Mod(int[] array)
        {
            foreach (var x in array.Where(x => x > 0))
                yield return array.Select(y => y % x).ToArray();
        }

        private static IEnumerable<int[]> Except(IEnumerable<int[]> arrays)
        {
            foreach (var a in arrays.Where(_a => _a.Count(x => x > 0) == 1))
            {
                Answer = Math.Min(Answer, a.Single(x => x != 0));
            }

            var ar2 = arrays.Where(a => a.Count(x => x > 0) > 1).Distinct();

            foreach (var a in ar2.Where(_a => _a.GroupBy(x => x).Count() == 2))
            {
                Answer = Math.Min(Answer, a.First(x => x != 0));
            }

            return ar2.Where(_a => _a.GroupBy(x => x).Count() > 2);
        }
    }
}