#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ scanf(char *, int *, int *, int *);
int main() {
  int a, b, c;
  scanf("%d %d %d", &a, &b, &c);
  if (a + b > c && b + c > a && a + c > b) {
    if (a * a + b * b - c * c == 0 || b * b + c * c - a * a == 0 ||
        a * a + c * c - b * b == 0) {
      printf("Right Triangle");
    } else if (a * a + b * b - c * c > 0 && b * b + c * c - a * a > 0 &&
               a * a + c * c - b * b > 0) {
      printf("Acute Triangle");
    } else if (a * a + b * b - c * c < 0 || b * b + c * c < a * a ||
               a * a + c * c < b * b) {
      printf("Obtuse Triangle");
    }
  } else {
    printf("Invalid Triangle");
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xeca(%rip),%rdi
lea    -0x8(%rbp),%rsi
lea    -0xc(%rbp),%rdx
lea    -0x10(%rbp),%rcx
call   1040 <scanf@plt>
mov    -0x8(%rbp),%eax
add    -0xc(%rbp),%eax
cmp    -0x10(%rbp),%eax
jle    12dd <main+0x1bd>
mov    -0xc(%rbp),%eax
add    -0x10(%rbp),%eax
cmp    -0x8(%rbp),%eax
jle    12dd <main+0x1bd>
mov    -0x8(%rbp),%eax
add    -0x10(%rbp),%eax
cmp    -0xc(%rbp),%eax
jle    12dd <main+0x1bd>
mov    -0x8(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%ecx
imul   -0x10(%rbp),%ecx
sub    %ecx,%eax
cmp    $0x0,%eax
je     11da <main+0xba>
mov    -0xc(%rbp),%eax
imul   -0xc(%rbp),%eax
mov    -0x10(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%ecx
imul   -0x8(%rbp),%ecx
sub    %ecx,%eax
cmp    $0x0,%eax
je     11da <main+0xba>
mov    -0x8(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    -0x10(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    %ecx,%eax
mov    -0xc(%rbp),%ecx
imul   -0xc(%rbp),%ecx
sub    %ecx,%eax
cmp    $0x0,%eax
jne    11eb <main+0xcb>
lea    0xe28(%rip),%rdi
call   1030 <printf@plt>
jmp    12d8 <main+0x1b8>
mov    -0x8(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%ecx
imul   -0x10(%rbp),%ecx
sub    %ecx,%eax
cmp    $0x0,%eax
jle    1262 <main+0x142>
mov    -0xc(%rbp),%eax
imul   -0xc(%rbp),%eax
mov    -0x10(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%ecx
imul   -0x8(%rbp),%ecx
sub    %ecx,%eax
cmp    $0x0,%eax
jle    1262 <main+0x142>
mov    -0x8(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    -0x10(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    %ecx,%eax
mov    -0xc(%rbp),%ecx
imul   -0xc(%rbp),%ecx
sub    %ecx,%eax
cmp    $0x0,%eax
jle    1262 <main+0x142>
lea    0xdc0(%rip),%rdi
call   1030 <printf@plt>
jmp    12d3 <main+0x1b3>
mov    -0x8(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    -0xc(%rbp),%ecx
imul   -0xc(%rbp),%ecx
add    %ecx,%eax
mov    -0x10(%rbp),%ecx
imul   -0x10(%rbp),%ecx
sub    %ecx,%eax
cmp    $0x0,%eax
jl     12c2 <main+0x1a2>
mov    -0xc(%rbp),%eax
imul   -0xc(%rbp),%eax
mov    -0x10(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%ecx
imul   -0x8(%rbp),%ecx
cmp    %ecx,%eax
jl     12c2 <main+0x1a2>
mov    -0x8(%rbp),%eax
imul   -0x8(%rbp),%eax
mov    -0x10(%rbp),%ecx
imul   -0x10(%rbp),%ecx
add    %ecx,%eax
mov    -0xc(%rbp),%ecx
imul   -0xc(%rbp),%ecx
cmp    %ecx,%eax
jge    12ce <main+0x1ae>
lea    0xd5e(%rip),%rdi
call   1030 <printf@plt>
jmp    12d3 <main+0x1b3>
jmp    12d8 <main+0x1b8>
jmp    12e9 <main+0x1c9>
lea    0xd53(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbx
sub    $0x10,%rsp
lea    0xed4(%rip),%rdi
lea    0xc(%rsp),%rsi
lea    0x8(%rsp),%rdx
lea    0x4(%rsp),%rcx
call   1040 <scanf@plt>
mov    0xc(%rsp),%ecx
mov    0x8(%rsp),%eax
lea    (%rax,%rcx,1),%esi
mov    0x4(%rsp),%edx
lea    0xee1(%rip),%rdi
cmp    %edx,%esi
jle    11ae <main+0x8e>
lea    (%rdx,%rax,1),%esi
cmp    %ecx,%esi
jle    11ae <main+0x8e>
lea    (%rdx,%rcx,1),%esi
cmp    %eax,%esi
jle    11ae <main+0x8e>
imul   %ecx,%ecx
imul   %eax,%eax
lea    (%rax,%rcx,1),%r10d
imul   %edx,%edx
mov    %r10d,%esi
lea    0xe8a(%rip),%rdi
sub    %edx,%esi
je     11ae <main+0x8e>
lea    (%rdx,%rax,1),%r8d
mov    %r8d,%r11d
sub    %ecx,%r11d
je     11ae <main+0x8e>
lea    (%rdx,%rcx,1),%r9d
mov    %r9d,%ebx
sub    %eax,%ebx
je     11ae <main+0x8e>
test   %esi,%esi
jle    11bb <main+0x9b>
test   %r11d,%r11d
jle    11bb <main+0x9b>
test   %ebx,%ebx
jle    11bb <main+0x9b>
lea    0xe6a(%rip),%rdi
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x10,%rsp
pop    %rbx
ret
lea    0xe65(%rip),%rdi
cmp    %edx,%r10d
jb     11ae <main+0x8e>
cmp    %ecx,%r8d
jb     11ae <main+0x8e>
cmp    %eax,%r9d
jae    11b3 <main+0x93>
jmp    11ae <main+0x8e>

LLVM IR (-O0):
@.str = [9 x i8] c"%d %d %d\00"
@.str.1 = [15 x i8] c"Right Triangle\00"
@.str.2 = [15 x i8] c"Acute Triangle\00"
@.str.3 = [16 x i8] c"Obtuse Triangle\00"
@.str.4 = [17 x i8] c"Invalid Triangle\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
store i32 0, i32* %1
%5 = call i32 @scanf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32* %2, i32* %3, i32* %4)
%6 = load i32, i32* %2
%7 = load i32, i32* %3
%8 = add nsw i32 %6, %7
%9 = load i32, i32* %4
%10 = icmp sgt i32 %8, %9
br i1 %10, label %11, label %147
11: ; preds = %0
%12 = load i32, i32* %3
%13 = load i32, i32* %4
%14 = add nsw i32 %12, %13
%15 = load i32, i32* %2
%16 = icmp sgt i32 %14, %15
br i1 %16, label %17, label %147
17: ; preds = %11
%18 = load i32, i32* %2
%19 = load i32, i32* %4
%20 = add nsw i32 %18, %19
%21 = load i32, i32* %3
%22 = icmp sgt i32 %20, %21
br i1 %22, label %23, label %147
23: ; preds = %17
%24 = load i32, i32* %2
%25 = load i32, i32* %2
%26 = mul nsw i32 %24, %25
%27 = load i32, i32* %3
%28 = load i32, i32* %3
%29 = mul nsw i32 %27, %28
%30 = add nsw i32 %26, %29
%31 = load i32, i32* %4
%32 = load i32, i32* %4
%33 = mul nsw i32 %31, %32
%34 = sub nsw i32 %30, %33
%35 = icmp eq i32 %34, 0
br i1 %35, label %62, label %36
36: ; preds = %23
%37 = load i32, i32* %3
%38 = load i32, i32* %3
%39 = mul nsw i32 %37, %38
%40 = load i32, i32* %4
%41 = load i32, i32* %4
%42 = mul nsw i32 %40, %41
%43 = add nsw i32 %39, %42
%44 = load i32, i32* %2
%45 = load i32, i32* %2
%46 = mul nsw i32 %44, %45
%47 = sub nsw i32 %43, %46
%48 = icmp eq i32 %47, 0
br i1 %48, label %62, label %49
49: ; preds = %36
%50 = load i32, i32* %2
%51 = load i32, i32* %2
%52 = mul nsw i32 %50, %51
%53 = load i32, i32* %4
%54 = load i32, i32* %4
%55 = mul nsw i32 %53, %54
%56 = add nsw i32 %52, %55
%57 = load i32, i32* %3
%58 = load i32, i32* %3
%59 = mul nsw i32 %57, %58
%60 = sub nsw i32 %56, %59
%61 = icmp eq i32 %60, 0
br i1 %61, label %62, label %64
62: ; preds = %49, %36, %23
%63 = call i32 @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0))
br label %146
64: ; preds = %49
%65 = load i32, i32* %2
%66 = load i32, i32* %2
%67 = mul nsw i32 %65, %66
%68 = load i32, i32* %3
%69 = load i32, i32* %3
%70 = mul nsw i32 %68, %69
%71 = add nsw i32 %67, %70
%72 = load i32, i32* %4
%73 = load i32, i32* %4
%74 = mul nsw i32 %72, %73
%75 = sub nsw i32 %71, %74
%76 = icmp sgt i32 %75, 0
br i1 %76, label %77, label %105
77: ; preds = %64
%78 = load i32, i32* %3
%79 = load i32, i32* %3
%80 = mul nsw i32 %78, %79
%81 = load i32, i32* %4
%82 = load i32, i32* %4
%83 = mul nsw i32 %81, %82
%84 = add nsw i32 %80, %83
%85 = load i32, i32* %2
%86 = load i32, i32* %2
%87 = mul nsw i32 %85, %86
%88 = sub nsw i32 %84, %87
%89 = icmp sgt i32 %88, 0
br i1 %89, label %90, label %105
90: ; preds = %77
%91 = load i32, i32* %2
%92 = load i32, i32* %2
%93 = mul nsw i32 %91, %92
%94 = load i32, i32* %4
%95 = load i32, i32* %4
%96 = mul nsw i32 %94, %95
%97 = add nsw i32 %93, %96
%98 = load i32, i32* %3
%99 = load i32, i32* %3
%100 = mul nsw i32 %98, %99
%101 = sub nsw i32 %97, %100
%102 = icmp sgt i32 %101, 0
br i1 %102, label %103, label %105
103: ; preds = %90
%104 = call i32 @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.2, i64 0, i64 0))
br label %145
105: ; preds = %90, %77, %64
%106 = load i32, i32* %2
%107 = load i32, i32* %2
%108 = mul nsw i32 %106, %107
%109 = load i32, i32* %3
%110 = load i32, i32* %3
%111 = mul nsw i32 %109, %110
%112 = add nsw i32 %108, %111
%113 = load i32, i32* %4
%114 = load i32, i32* %4
%115 = mul nsw i32 %113, %114
%116 = sub nsw i32 %112, %115
%117 = icmp slt i32 %116, 0
br i1 %117, label %142, label %118
118: ; preds = %105
%119 = load i32, i32* %3
%120 = load i32, i32* %3
%121 = mul nsw i32 %119, %120
%122 = load i32, i32* %4
%123 = load i32, i32* %4
%124 = mul nsw i32 %122, %123
%125 = add nsw i32 %121, %124
%126 = load i32, i32* %2
%127 = load i32, i32* %2
%128 = mul nsw i32 %126, %127
%129 = icmp slt i32 %125, %128
br i1 %129, label %142, label %130
130: ; preds = %118
%131 = load i32, i32* %2
%132 = load i32, i32* %2
%133 = mul nsw i32 %131, %132
%134 = load i32, i32* %4
%135 = load i32, i32* %4
%136 = mul nsw i32 %134, %135
%137 = add nsw i32 %133, %136
%138 = load i32, i32* %3
%139 = load i32, i32* %3
%140 = mul nsw i32 %138, %139
%141 = icmp slt i32 %137, %140
br i1 %141, label %142, label %144
142: ; preds = %130, %118, %105
%143 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.3, i64 0, i64 0))
br label %144
144: ; preds = %142, %130
br label %145
145: ; preds = %144, %103
br label %146
146: ; preds = %145, %62
br label %149
147: ; preds = %17, %11, %0
%148 = call i32 @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.4, i64 0, i64 0))
br label %149
149: ; preds = %147, %146
ret i32 0
}

LLVM IR (-O2):
@.str = [9 x i8] c"%d %d %d\00"
@.str.1 = [15 x i8] c"Right Triangle\00"
@.str.2 = [15 x i8] c"Acute Triangle\00"
@.str.3 = [16 x i8] c"Obtuse Triangle\00"
@.str.4 = [17 x i8] c"Invalid Triangle\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = bitcast i32* %1 to i8*
%5 = bitcast i32* %2 to i8*
%6 = bitcast i32* %3 to i8*
%7 = call i32 @scanf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0), i32* %1, i32* %2, i32* %3)
%8 = load i32, i32* %1
%9 = load i32, i32* %2
%10 = add nsw i32 %9, %8
%11 = load i32, i32* %3
%12 = icmp sgt i32 %10, %11
%13 = add nsw i32 %11, %9
%14 = icmp sgt i32 %13, %8
%15 = select i1 %12, i1 %14, i1 false
%16 = add nsw i32 %11, %8
%17 = icmp sgt i32 %16, %9
%18 = select i1 %15, i1 %17, i1 false
br i1 %18, label %19, label %46
19: ; preds = %0
%20 = mul nsw i32 %8, %8
%21 = mul nsw i32 %9, %9
%22 = add nuw nsw i32 %21, %20
%23 = mul nsw i32 %11, %11
%24 = sub nsw i32 %22, %23
%25 = icmp eq i32 %24, 0
br i1 %25, label %46, label %26
26: ; preds = %19
%27 = add nuw nsw i32 %23, %21
%28 = sub nsw i32 %27, %20
%29 = icmp eq i32 %28, 0
br i1 %29, label %46, label %30
30: ; preds = %26
%31 = add nuw nsw i32 %23, %20
%32 = sub nsw i32 %31, %21
%33 = icmp eq i32 %32, 0
br i1 %33, label %46, label %34
34: ; preds = %30
%35 = icmp sgt i32 %24, 0
%36 = icmp sgt i32 %28, 0
%37 = select i1 %35, i1 %36, i1 false
%38 = icmp sgt i32 %32, 0
%39 = select i1 %37, i1 %38, i1 false
br i1 %39, label %46, label %40
40: ; preds = %34
%41 = icmp ult i32 %22, %23
%42 = icmp ult i32 %27, %20
%43 = select i1 %41, i1 true, i1 %42
%44 = icmp ult i32 %31, %21
%45 = select i1 %43, i1 true, i1 %44
br i1 %45, label %46, label %49
46: ; preds = %0, %40, %34, %19, %26, %30
%47 = phi i8* [ getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), %30 ], [ getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), %26 ], [ getelementptr inbounds ([15 x i8], [15 x i8]* @.str.1, i64 0, i64 0), %19 ], [ getelementptr inbounds ([15 x i8], [15 x i8]* @.str.2, i64 0, i64 0), %34 ], [ getelementptr inbounds ([16 x i8], [16 x i8]* @.str.3, i64 0, i64 0), %40 ], [ getelementptr inbounds ([17 x i8], [17 x i8]* @.str.4, i64 0, i64 0), %0 ]
%48 = call i32 @printf(i8* dereferenceable(1) %47)
br label %49
49: ; preds = %46, %40
ret i32 0
}