+\r
+ // Check mul.ovf\r
+ checked {\r
+ int l;\r
+ int m;\r
+\r
+ int[][] cases = new int [][] { \r
+ new int [] {0, 0, 0},\r
+ new int [] {-5, 0, 0},\r
+ new int [] {3, -5, -15},\r
+ new int [] {3, 5, 15},\r
+ new int [] {-3, -5, 15},\r
+ new int [] {-3, 5, -15},\r
+ new int [] {-1, 32767, -32767},\r
+ new int [] {32767, -1, -32767}};\r
+\r
+\r
+ for (int j = 0; j < cases.Length; ++j)\r
+ if (cases [j][0] * cases [j][1] != cases [j][2])\r
+ return -7 - j;\r
+ }\r
+\r
+ checked {\r
+ int j;\r
+ int k;\r
+\r
+ j = k = 0;\r
+ if (j * k != 0)\r
+ return -7;\r
+\r
+ j = -5;\r
+ k = 0;\r
+ if (j * k != 0)\r
+ return -8;\r
+\r
+ j = 0;\r
+ k = -5;\r
+ if (j * k != 0)\r
+ return -9;\r
+\r
+ j = 3;\r
+ k = -5;\r
+ if (j * k != -15)\r
+ return -10;\r
+\r
+ j = 3;\r
+ k = 5;\r
+ if (j * k != 15)\r
+ return -11;\r
+\r
+ j = -3;\r
+ k = -5;\r
+ if (j * k != 15)\r
+ return -12;\r
+\r
+ j = -3;\r
+ k = 5;\r
+ if (j * k != -15)\r
+ return -13;\r
+\r
+ j = -1;\r
+ k = 32767;\r
+ if (j * k != -32767)\r
+ return -14;\r
+ \r
+ j = 32767;\r
+ k = -1;\r
+ if (j * k != -32767)\r
+ return -15;\r
+ }\r
+\r
+ checked {\r
+ long l;\r
+ long m;\r
+\r
+ long[][] cases = new long [][] { \r
+ new long [] {0, 0, 0},\r
+ new long [] {-5, 0, 0},\r
+ new long [] {3, -5, -15},\r
+ new long [] {3, 5, 15},\r
+ new long [] {-3, -5, 15},\r
+ new long [] {-3, 5, -15},\r
+ new long [] {-1, 2147483647, -2147483647},\r
+ new long [] {2147483647, -1, -2147483647}};\r
+\r
+ for (int j = 0; j < cases.Length; ++j)\r
+ if (cases [j][0] * cases [j][1] != cases [j][2])\r
+ return -15 - j;\r
+ }\r
+ \r