#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %string(100) s
_imp_string100 S;
// 3 %string(25) left = "left"
_imp_string25 LEFT;
/* clang-format off */
_imp_strncpy(/*?*/&LEFT, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = _imp_str_literal("left"); (void *)&tmp;}), /*max:*/25);
/* clang-format on */
// 4 %string(20) middle = "middle"
_imp_string20 MIDDLE;
/* clang-format off */
_imp_strncpy(/*?*/&MIDDLE, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = _imp_str_literal("middle"); (void *)&tmp;}), /*max:*/20);
/* clang-format on */
// 5 %string(15) right = "right"
_imp_string15 RIGHT;
/* clang-format off */
_imp_strncpy(/*?*/&RIGHT, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = _imp_str_literal("right"); (void *)&tmp;}), /*max:*/15);
/* clang-format on */
// 6 s = left . right
/* clang-format off */
_imp_strncpy(/*?*/&S, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = *({_imp_string255 tmp = _imp_join((_imp_string *)/*?*/&LEFT, (_imp_string *)/*?*/&RIGHT); (_imp_string255 *)&tmp;}); (void *)&tmp;}), /*max:*/100);
/* clang-format on */
// 7 printstring(s); newline
_imp_PRINTSTRING(
/* clang-format off */
*({ __typeof__(_imp_string100) tmp = S/*q*/; (_imp_string255 *)&tmp; })
/* clang-format on */
);
_imp_NEWLINE();
// 8 s = left . middle . right
/* clang-format off */
_imp_strncpy(/*?*/&S, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = *({_imp_string255 tmp = _imp_join((_imp_string *)/*?*/&*({_imp_string255 tmp = _imp_join((_imp_string *)/*?*/&LEFT, (_imp_string *)/*?*/&MIDDLE); (_imp_string255 *)&tmp;}), (_imp_string *)/*?*/&RIGHT); (_imp_string255 *)&tmp;}); (void *)&tmp;}), /*max:*/100);
/* clang-format on */
// 9 printstring(s); newline
_imp_PRINTSTRING(
/* clang-format off */
*({ __typeof__(_imp_string100) tmp = S/*q*/; (_imp_string255 *)&tmp; })
/* clang-format on */
);
_imp_NEWLINE();
// 10 s <- left . right
/* clang-format off */
_imp_strncpy(/*?*/&S, ({__typeof__(_imp_string255) tmp; /*C*/ tmp = *({_imp_string255 tmp = _imp_join((_imp_string *)/*?*/&LEFT, (_imp_string *)/*?*/&RIGHT); (_imp_string255 *)&tmp;}); (void *)&tmp;}), /*max:*/100);
/* clang-format on */
/* truncated copy of no more than 100 chars */
/* clang-format off */
if (*_imp_LENGTH((_imp_string *)/*?*/&S) > 100) *_imp_LENGTH((_imp_string *)/*?*/&S) = 100;
/* clang-format on */
// 11 printstring(s); newline
_imp_PRINTSTRING(
/* clang-format off */
*({ __typeof__(_imp_string100) tmp = S/*q*/; (_imp_string255 *)&tmp; })
/* clang-format on */
);
_imp_NEWLINE();
// 12 s <- left . middle . right
/* clang-format off */
_imp_strncpy(/*?*/&S, ({__typeof__(_imp_string255) tmp; /*C*/ tmp = *({_imp_string255 tmp = _imp_join((_imp_string *)/*?*/&*({_imp_string255 tmp = _imp_join((_imp_string *)/*?*/&LEFT, (_imp_string *)/*?*/&MIDDLE); (_imp_string255 *)&tmp;}), (_imp_string *)/*?*/&RIGHT); (_imp_string255 *)&tmp;}); (void *)&tmp;}), /*max:*/100);
/* clang-format on */
/* truncated copy of no more than 100 chars */
/* clang-format off */
if (*_imp_LENGTH((_imp_string *)/*?*/&S) > 100) *_imp_LENGTH((_imp_string *)/*?*/&S) = 100;
/* clang-format on */
// 13 printstring(s); newline
_imp_PRINTSTRING(
/* clang-format off */
*({ __typeof__(_imp_string100) tmp = S/*q*/; (_imp_string255 *)&tmp; })
/* clang-format on */
);
_imp_NEWLINE();
// 14 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}