#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 */
scalar_t__ calloc(int, int);
int /*<<< orphan*/ free(char *);
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ scanf(char *, char *, char *, char *, char *);
int main() {
  char *dices = (char *)calloc(8, 8);
  scanf("%hhu %hhu %hhu %hhu", dices, dices + 1, dices + 2, dices + 3);
  scanf("%hhu %hhu %hhu %hhu", dices + 4, dices + 5, dices + 6, dices + 7);
  double result = (((double)(((*(dices + 1) * (*(dices + 1) + 1)) -
                              (*dices * (*dices - 1))) >>
                             1)) /
                   (*(dices + 1) - *dices + 1)) +
                  (((double)(((*(dices + 3) * (*(dices + 3) + 1)) -
                              (*(dices + 2) * (*(dices + 2) - 1))) >>
                             1)) /
                   (*(dices + 3) - *(dices + 2) + 1)) -
                  (((double)(((*(dices + 5) * (*(dices + 5) + 1)) -
                              (*(dices + 4) * (*(dices + 4) - 1))) >>
                             1)) /
                   (*(dices + 5) - *(dices + 4) + 1)) -
                  (((double)(((*(dices + 7) * (*(dices + 7) + 1)) -
                              (*(dices + 6) * (*(dices + 6) - 1))) >>
                             1)) /
                   (*(dices + 7) - *(dices + 6) + 1));
  printf(result > 0 ? "Gunnar" : result < 0 ? "Emma" : "Tie");
  free(dices);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
mov    $0x8,%esi
mov    %esi,%edi
call   1050 <calloc@plt>
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rsi
mov    -0x10(%rbp),%rdx
add    $0x1,%rdx
mov    -0x10(%rbp),%rcx
add    $0x2,%rcx
mov    -0x10(%rbp),%r8
add    $0x3,%r8
lea    0xe7e(%rip),%rdi
call   1060 <scanf@plt>
mov    -0x10(%rbp),%rsi
add    $0x4,%rsi
mov    -0x10(%rbp),%rdx
add    $0x5,%rdx
mov    -0x10(%rbp),%rcx
add    $0x6,%rcx
mov    -0x10(%rbp),%r8
add    $0x7,%r8
lea    0xe52(%rip),%rdi
call   1060 <scanf@plt>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x1(%rcx),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl (%rcx),%ecx
mov    -0x10(%rbp),%rdx
movsbl (%rdx),%edx
sub    $0x1,%edx
imul   %edx,%ecx
sub    %ecx,%eax
sar    $0x1,%eax
cvtsi2sd %eax,%xmm0
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl (%rcx),%ecx
sub    %ecx,%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
divsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x3(%rcx),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
mov    -0x10(%rbp),%rdx
movsbl 0x2(%rdx),%edx
sub    $0x1,%edx
imul   %edx,%ecx
sub    %ecx,%eax
sar    $0x1,%eax
cvtsi2sd %eax,%xmm1
mov    -0x10(%rbp),%rax
movsbl 0x3(%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x2(%rcx),%ecx
sub    %ecx,%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm2
divsd  %xmm2,%xmm1
addsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x5(%rcx),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
mov    -0x10(%rbp),%rdx
movsbl 0x4(%rdx),%edx
sub    $0x1,%edx
imul   %edx,%ecx
sub    %ecx,%eax
sar    $0x1,%eax
cvtsi2sd %eax,%xmm1
mov    -0x10(%rbp),%rax
movsbl 0x5(%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x4(%rcx),%ecx
sub    %ecx,%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x7(%rcx),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
mov    -0x10(%rbp),%rdx
movsbl 0x6(%rdx),%edx
sub    $0x1,%edx
imul   %edx,%ecx
sub    %ecx,%eax
sar    $0x1,%eax
cvtsi2sd %eax,%xmm1
mov    -0x10(%rbp),%rax
movsbl 0x7(%rax),%eax
mov    -0x10(%rbp),%rcx
movsbl 0x6(%rcx),%ecx
sub    %ecx,%eax
add    $0x1,%eax
cvtsi2sd %eax,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x18(%rbp)
movsd  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jbe    132b <main+0x1eb>
lea    0xcf2(%rip),%rax
mov    %rax,-0x20(%rbp)
jmp    134d <main+0x20d>
movsd  -0x18(%rbp),%xmm1
xorps  %xmm0,%xmm0
lea    0xce6(%rip),%rax
lea    0xcda(%rip),%rcx
ucomisd %xmm1,%xmm0
cmova  %rcx,%rax
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rdi
call   1040 <printf@plt>
mov    -0x10(%rbp),%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
push   %rax
mov    $0x8,%edi
mov    $0x8,%esi
call   1050 <calloc@plt>
mov    %rax,%rbx
lea    0x1(%rax),%rdx
lea    0x2(%rax),%rcx
lea    0x3(%rax),%r8
lea    0xe97(%rip),%r14
mov    %r14,%rdi
mov    %rax,%rsi
call   1060 <scanf@plt>
lea    0x4(%rbx),%rsi
lea    0x5(%rbx),%rdx
lea    0x6(%rbx),%rcx
lea    0x7(%rbx),%r8
mov    %r14,%rdi
call   1060 <scanf@plt>
movsbl 0x1(%rbx),%eax
lea    0x1(%rax),%ecx
imul   %ecx,%eax
movsbl (%rbx),%edx
lea    -0x1(%rdx),%esi
imul   %edx,%esi
sub    %esi,%eax
sar    %eax
cvtsi2sd %eax,%xmm1
sub    %edx,%ecx
cvtsi2sd %ecx,%xmm2
movsbl 0x3(%rbx),%eax
lea    0x1(%rax),%ecx
imul   %ecx,%eax
movsbl 0x2(%rbx),%edx
lea    -0x1(%rdx),%esi
imul   %edx,%esi
sub    %esi,%eax
sar    %eax
cvtsi2sd %eax,%xmm0
divsd  %xmm2,%xmm1
sub    %edx,%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsbl 0x5(%rbx),%eax
lea    0x1(%rax),%ecx
imul   %ecx,%eax
movsbl 0x4(%rbx),%edx
lea    -0x1(%rdx),%esi
imul   %edx,%esi
sub    %esi,%eax
sar    %eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
sub    %edx,%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
movsbl 0x7(%rbx),%eax
lea    0x1(%rax),%ecx
imul   %ecx,%eax
movsbl 0x6(%rbx),%edx
lea    -0x1(%rdx),%esi
imul   %edx,%esi
sub    %esi,%eax
sar    %eax
xorps  %xmm1,%xmm1
cvtsi2sd %eax,%xmm1
sub    %edx,%ecx
xorps  %xmm2,%xmm2
cvtsi2sd %ecx,%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
lea    0xdce(%rip),%rax
lea    0xdcc(%rip),%rcx
cmova  %rax,%rcx
ucomisd %xmm1,%xmm0
lea    0xdb1(%rip),%rdi
cmovbe %rcx,%rdi
call   1040 <printf@plt>
mov    %rbx,%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r14
ret

LLVM IR (-O0):
@.str = [20 x i8] c"%hhu %hhu %hhu %hhu\00"
@.str.1 = [7 x i8] c"Gunnar\00"
@.str.2 = [5 x i8] c"Emma\00"
@.str.3 = [4 x i8] c"Tie\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8*
%3 = alloca double
store i32 0, i32* %1
%4 = call i64 @calloc(i32 8, i32 8)
%5 = inttoptr i64 %4 to i8*
store i8* %5, i8** %2
%6 = load i8*, i8** %2
%7 = load i8*, i8** %2
%8 = getelementptr inbounds i8, i8* %7, i64 1
%9 = load i8*, i8** %2
%10 = getelementptr inbounds i8, i8* %9, i64 2
%11 = load i8*, i8** %2
%12 = getelementptr inbounds i8, i8* %11, i64 3
%13 = call i32 @scanf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i8* %6, i8* %8, i8* %10, i8* %12)
%14 = load i8*, i8** %2
%15 = getelementptr inbounds i8, i8* %14, i64 4
%16 = load i8*, i8** %2
%17 = getelementptr inbounds i8, i8* %16, i64 5
%18 = load i8*, i8** %2
%19 = getelementptr inbounds i8, i8* %18, i64 6
%20 = load i8*, i8** %2
%21 = getelementptr inbounds i8, i8* %20, i64 7
%22 = call i32 @scanf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i8* %15, i8* %17, i8* %19, i8* %21)
%23 = load i8*, i8** %2
%24 = getelementptr inbounds i8, i8* %23, i64 1
%25 = load i8, i8* %24
%26 = sext i8 %25 to i32
%27 = load i8*, i8** %2
%28 = getelementptr inbounds i8, i8* %27, i64 1
%29 = load i8, i8* %28
%30 = sext i8 %29 to i32
%31 = add nsw i32 %30, 1
%32 = mul nsw i32 %26, %31
%33 = load i8*, i8** %2
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = load i8*, i8** %2
%37 = load i8, i8* %36
%38 = sext i8 %37 to i32
%39 = sub nsw i32 %38, 1
%40 = mul nsw i32 %35, %39
%41 = sub nsw i32 %32, %40
%42 = ashr i32 %41, 1
%43 = sitofp i32 %42 to double
%44 = load i8*, i8** %2
%45 = getelementptr inbounds i8, i8* %44, i64 1
%46 = load i8, i8* %45
%47 = sext i8 %46 to i32
%48 = load i8*, i8** %2
%49 = load i8, i8* %48
%50 = sext i8 %49 to i32
%51 = sub nsw i32 %47, %50
%52 = add nsw i32 %51, 1
%53 = sitofp i32 %52 to double
%54 = fdiv double %43, %53
%55 = load i8*, i8** %2
%56 = getelementptr inbounds i8, i8* %55, i64 3
%57 = load i8, i8* %56
%58 = sext i8 %57 to i32
%59 = load i8*, i8** %2
%60 = getelementptr inbounds i8, i8* %59, i64 3
%61 = load i8, i8* %60
%62 = sext i8 %61 to i32
%63 = add nsw i32 %62, 1
%64 = mul nsw i32 %58, %63
%65 = load i8*, i8** %2
%66 = getelementptr inbounds i8, i8* %65, i64 2
%67 = load i8, i8* %66
%68 = sext i8 %67 to i32
%69 = load i8*, i8** %2
%70 = getelementptr inbounds i8, i8* %69, i64 2
%71 = load i8, i8* %70
%72 = sext i8 %71 to i32
%73 = sub nsw i32 %72, 1
%74 = mul nsw i32 %68, %73
%75 = sub nsw i32 %64, %74
%76 = ashr i32 %75, 1
%77 = sitofp i32 %76 to double
%78 = load i8*, i8** %2
%79 = getelementptr inbounds i8, i8* %78, i64 3
%80 = load i8, i8* %79
%81 = sext i8 %80 to i32
%82 = load i8*, i8** %2
%83 = getelementptr inbounds i8, i8* %82, i64 2
%84 = load i8, i8* %83
%85 = sext i8 %84 to i32
%86 = sub nsw i32 %81, %85
%87 = add nsw i32 %86, 1
%88 = sitofp i32 %87 to double
%89 = fdiv double %77, %88
%90 = fadd double %54, %89
%91 = load i8*, i8** %2
%92 = getelementptr inbounds i8, i8* %91, i64 5
%93 = load i8, i8* %92
%94 = sext i8 %93 to i32
%95 = load i8*, i8** %2
%96 = getelementptr inbounds i8, i8* %95, i64 5
%97 = load i8, i8* %96
%98 = sext i8 %97 to i32
%99 = add nsw i32 %98, 1
%100 = mul nsw i32 %94, %99
%101 = load i8*, i8** %2
%102 = getelementptr inbounds i8, i8* %101, i64 4
%103 = load i8, i8* %102
%104 = sext i8 %103 to i32
%105 = load i8*, i8** %2
%106 = getelementptr inbounds i8, i8* %105, i64 4
%107 = load i8, i8* %106
%108 = sext i8 %107 to i32
%109 = sub nsw i32 %108, 1
%110 = mul nsw i32 %104, %109
%111 = sub nsw i32 %100, %110
%112 = ashr i32 %111, 1
%113 = sitofp i32 %112 to double
%114 = load i8*, i8** %2
%115 = getelementptr inbounds i8, i8* %114, i64 5
%116 = load i8, i8* %115
%117 = sext i8 %116 to i32
%118 = load i8*, i8** %2
%119 = getelementptr inbounds i8, i8* %118, i64 4
%120 = load i8, i8* %119
%121 = sext i8 %120 to i32
%122 = sub nsw i32 %117, %121
%123 = add nsw i32 %122, 1
%124 = sitofp i32 %123 to double
%125 = fdiv double %113, %124
%126 = fsub double %90, %125
%127 = load i8*, i8** %2
%128 = getelementptr inbounds i8, i8* %127, i64 7
%129 = load i8, i8* %128
%130 = sext i8 %129 to i32
%131 = load i8*, i8** %2
%132 = getelementptr inbounds i8, i8* %131, i64 7
%133 = load i8, i8* %132
%134 = sext i8 %133 to i32
%135 = add nsw i32 %134, 1
%136 = mul nsw i32 %130, %135
%137 = load i8*, i8** %2
%138 = getelementptr inbounds i8, i8* %137, i64 6
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = load i8*, i8** %2
%142 = getelementptr inbounds i8, i8* %141, i64 6
%143 = load i8, i8* %142
%144 = sext i8 %143 to i32
%145 = sub nsw i32 %144, 1
%146 = mul nsw i32 %140, %145
%147 = sub nsw i32 %136, %146
%148 = ashr i32 %147, 1
%149 = sitofp i32 %148 to double
%150 = load i8*, i8** %2
%151 = getelementptr inbounds i8, i8* %150, i64 7
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = load i8*, i8** %2
%155 = getelementptr inbounds i8, i8* %154, i64 6
%156 = load i8, i8* %155
%157 = sext i8 %156 to i32
%158 = sub nsw i32 %153, %157
%159 = add nsw i32 %158, 1
%160 = sitofp i32 %159 to double
%161 = fdiv double %149, %160
%162 = fsub double %126, %161
store double %162, double* %3
%163 = load double, double* %3
%164 = fcmp ogt double %163, 0.000000e+00
br i1 %164, label %165, label %166
165: ; preds = %0
br label %171
166: ; preds = %0
%167 = load double, double* %3
%168 = fcmp olt double %167, 0.000000e+00
%169 = zext i1 %168 to i64
%170 = select i1 %168, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0)
br label %171
171: ; preds = %166, %165
%172 = phi i8* [ getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), %165 ], [ %170, %166 ]
%173 = call i32 @printf(i8* %172)
%174 = load i8*, i8** %2
%175 = call i32 @free(i8* %174)
ret i32 0
}

LLVM IR (-O2):
@.str = [20 x i8] c"%hhu %hhu %hhu %hhu\00"
@.str.1 = [7 x i8] c"Gunnar\00"
@.str.2 = [5 x i8] c"Emma\00"
@.str.3 = [4 x i8] c"Tie\00"
define i32 @main() {
%1 = tail call i64 @calloc(i32 8, i32 8)
%2 = inttoptr i64 %1 to i8*
%3 = getelementptr inbounds i8, i8* %2, i64 1
%4 = getelementptr inbounds i8, i8* %2, i64 2
%5 = getelementptr inbounds i8, i8* %2, i64 3
%6 = tail call i32 @scanf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i8* %2, i8* %3, i8* %4, i8* %5)
%7 = getelementptr inbounds i8, i8* %2, i64 4
%8 = getelementptr inbounds i8, i8* %2, i64 5
%9 = getelementptr inbounds i8, i8* %2, i64 6
%10 = getelementptr inbounds i8, i8* %2, i64 7
%11 = tail call i32 @scanf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str, i64 0, i64 0), i8* %7, i8* %8, i8* %9, i8* %10)
%12 = load i8, i8* %3
%13 = sext i8 %12 to i32
%14 = add nsw i32 %13, 1
%15 = mul nsw i32 %14, %13
%16 = load i8, i8* %2
%17 = sext i8 %16 to i32
%18 = add nsw i32 %17, -1
%19 = mul nsw i32 %18, %17
%20 = sub nsw i32 %15, %19
%21 = ashr i32 %20, 1
%22 = sitofp i32 %21 to double
%23 = sub nsw i32 %14, %17
%24 = sitofp i32 %23 to double
%25 = fdiv double %22, %24
%26 = load i8, i8* %5
%27 = sext i8 %26 to i32
%28 = add nsw i32 %27, 1
%29 = mul nsw i32 %28, %27
%30 = load i8, i8* %4
%31 = sext i8 %30 to i32
%32 = add nsw i32 %31, -1
%33 = mul nsw i32 %32, %31
%34 = sub nsw i32 %29, %33
%35 = ashr i32 %34, 1
%36 = sitofp i32 %35 to double
%37 = sub nsw i32 %28, %31
%38 = sitofp i32 %37 to double
%39 = fdiv double %36, %38
%40 = fadd double %25, %39
%41 = load i8, i8* %8
%42 = sext i8 %41 to i32
%43 = add nsw i32 %42, 1
%44 = mul nsw i32 %43, %42
%45 = load i8, i8* %7
%46 = sext i8 %45 to i32
%47 = add nsw i32 %46, -1
%48 = mul nsw i32 %47, %46
%49 = sub nsw i32 %44, %48
%50 = ashr i32 %49, 1
%51 = sitofp i32 %50 to double
%52 = sub nsw i32 %43, %46
%53 = sitofp i32 %52 to double
%54 = fdiv double %51, %53
%55 = fsub double %40, %54
%56 = load i8, i8* %10
%57 = sext i8 %56 to i32
%58 = add nsw i32 %57, 1
%59 = mul nsw i32 %58, %57
%60 = load i8, i8* %9
%61 = sext i8 %60 to i32
%62 = add nsw i32 %61, -1
%63 = mul nsw i32 %62, %61
%64 = sub nsw i32 %59, %63
%65 = ashr i32 %64, 1
%66 = sitofp i32 %65 to double
%67 = sub nsw i32 %58, %61
%68 = sitofp i32 %67 to double
%69 = fdiv double %66, %68
%70 = fsub double %55, %69
%71 = fcmp ogt double %70, 0.000000e+00
%72 = fcmp olt double %70, 0.000000e+00
%73 = select i1 %72, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0)
%74 = select i1 %71, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i64 0, i64 0), i8* %73
%75 = tail call i32 @printf(i8* dereferenceable(1) %74)
%76 = tail call i32 @free(i8* %2)
ret i32 0
}