#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*/ usage();
void help() {
  printf("\n");
  printf(
      "  RING Module for WORDOM perform a ring searching using the ring "
      "perception \nalgorithm proposed by Hanser et al. (J. Chem. Inf. Comput. "
      "Sci., 1996, 36 (6), \npp 1146?1152 DOI:10.1021/ci960322f). The main "
      "idea is to find supramolecular \ncyclic structures, for example the "
      "formation of hexagons or other polygons, but \nthe algorithm is quite "
      "generic and can be used for any ring perception problem. \n  The input "
      "file consist essentially in a graph in a very easy format: a set of "
      "\nlines each one containing two numbers. These numbers are the id of an "
      "object \n(could be an atom or a molecule, or whatever you want), and "
      "each line means \nthat the two object identified by the two number are "
      "in contact. For example to \ngraph file for a pentagon need only the "
      "following lines:\n\n  1 2\n  2 3\n  3 4\n  4 5\n  5 1\n\nVery "
      "important, each contact must be present only one time and must not be "
      "\npresent duplicates like 1 2 and 2 1. \nIf you want to analyze only "
      "one graph file your WORDOM input file is simply:\n\nBEGIN RING\n--GRAPH "
      "mygraph.inp\nEND\n\n  You can specify two optional parameters: RINGS "
      "and DIM. RINGS allow you to \nspecify an output file where the "
      "perceived rings are saved, the default name is \nrings.dat. The format "
      "of this output is quite simple: the first column contain \nthe "
      "dimension of the ring and the following columns contain the id of each "
      "\nobject that build that ring. The parameter DIM is very useful when "
      "you have a \nlot of condensed rings. In this case a full ring search "
      "will find a very big \nnumber of rings. With the DIM parameter only the "
      "rings with a dimension less \nthan DIM will be saved and printed. The "
      "default value for DIM is 10. A complete \nWORDOM input file if we are "
      "interested only in hexagons could be:\n\nBEGIN RING\n--GRAPH "
      "mygraph.inp\n--RINGS myroutput.dat\n--DIM 6\nEND\n\nor directly via "
      "command line:\n\nwordom -ie RING ?GRAPH mygraph.inp --RINGS "
      "myoutput.dat --DIM 6\n\n  A second way to use this module is via the "
      "LIST parameter which is useful if \nyou need to analyze a lot of graph. "
      "In such case you only need to save each \ngraph in a separate file, and "
      "then put all filenames in a list file one per \nline, for "
      "example:\n\nmygraph1.inp\ngraph2.inp\nmythirdgraph.inp\nfinalgraph."
      "inp\n\nThen you can run WORDOM like:\n\nBEGIN RING\n--LIST "
      "mygraphlist.inp\n--RINGS myroutput.dat\n--DIM 6\nEND\n\nThe GRAPH and "
      "LIST options are obviously mutually exclusive.\n\n  There is a last "
      "parameter you can use: STATS. If you specify this parameter \nfollowed "
      "by an output filename, the module will make a statistics about ring "
      "\ndimension for each analyzed graph and will print the result in the "
      "specified \noutput file. This is interesting, for example, when the "
      "graphs are representative \nof the frame of a trajectory, so you will "
      "obtain the statistics of the formed \nrings along the trajectory. The "
      "format of this file is: in the first column a \nnumber indicating the "
      "input file, and then a list of number indicating the \nfrequency of "
      "cycles at each dimension: so in the second column you will find \nthe "
      "number of cycle with dimension 1 (always zero), in the third column "
      "with \ndimension two (always zero), in the fourth column the triangles, "
      "and so on.\n  Finally, --HELP will print this help, --VERSION will "
      "print version number \nand copyright of the current RING Module for "
      "WORDOM.\n");
  printf("\n");
  usage();
  printf("\n");
  printf("Examples:\n");
  printf(
      "\tAnalyse only a graph in 'mygraph.dat' file and outputs the perceived "
      "\n\trings in rings.dat. No statistics are performed on ring dimension. "
      "\n\tUse the default dimension of 10 for maximum ring dimension.\n");
  printf("\t\twordom -ie RING --GRAPH mygraph.dat --RINGS rings.dat\n");
  printf("\n");
  printf("\tAnalyse all graphs listed in 'mylist.dat', save all perceived "
         "rings \n\tin 'rings.dat' and save a statistic of rings dimension "
         "along all graphs \n\tin 'stats.dat'. Perceive only rings smaller "
         "than a pentagon.\n");
  printf("\t\twordom -ie RING --LIST mylist.dat --RINGS rings.dat --STATS "
         "stats.dat --DIM 5\n");
  printf("\n");
  printf("Report bugs to <simonecnt@gmail.com>.\n");
  printf("\n");
}


x86 assembly (clang, -O0):
<help>:
push   %rbp
mov    %rsp,%rbp
lea    0x1df7(%rip),%rdi
call   1030 <printf@plt>
lea    0xec9(%rip),%rdi
call   1030 <printf@plt>
lea    0x1ddf(%rip),%rdi
call   1030 <printf@plt>
mov    $0x0,%al
call   1040 <usage@plt>
lea    0x1dcc(%rip),%rdi
call   1030 <printf@plt>
lea    0x1b6d(%rip),%rdi
call   1030 <printf@plt>
lea    0x1b6c(%rip),%rdi
call   1030 <printf@plt>
lea    0x1c2a(%rip),%rdi
call   1030 <printf@plt>
lea    0x1d9c(%rip),%rdi
call   1030 <printf@plt>
lea    0x1c4b(%rip),%rdi
call   1030 <printf@plt>
lea    0x1d0e(%rip),%rdi
call   1030 <printf@plt>
lea    0x1d78(%rip),%rdi
call   1030 <printf@plt>
lea    0x1d47(%rip),%rdi
call   1030 <printf@plt>
lea    0x1d60(%rip),%rdi
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<help>:
push   %rax
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xebe(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
xor    %eax,%eax
call   1050 <usage@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1b65(%rip),%rdi
call   1040 <puts@plt>
lea    0x1b63(%rip),%rdi
call   1040 <puts@plt>
lea    0x1c20(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1c42(%rip),%rdi
call   1040 <puts@plt>
lea    0x1d04(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1d3e(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
pop    %rax
jmp    1030 <putchar@plt>

LLVM IR (-O0):
@.str = [2 x i8] c"\0A\00"
@.str.1 = [3279 x i8] c" RING Module for WORDOM perform a ring searching using the ring perception \0Aalgorithm proposed by Hanser et al. (J. Chem. Inf. Comput. Sci., 1996, 36 (6), \0App 1146?1152 DOI:10.1021/ci960322f). The main idea is to find supramolecular \0Acyclic structures, for example the formation of hexagons or other polygons, but \0Athe algorithm is quite generic and can be used for any ring perception problem. \0A The input file consist essentially in a graph in a very easy format: a set of \0Alines each one containing two numbers. These numbers are the id of an object \0A(could be an atom or a molecule, or whatever you want), and each line means \0Athat the two object identified by the two number are in contact. For example to \0Agraph file for a pentagon need only the following lines:\0A\0A 1 2\0A 2 3\0A 3 4\0A 4 5\0A 5 1\0A\0AVery important, each contact must be present only one time and must not be \0Apresent duplicates like 1 2 and 2 1. \0AIf you want to analyze only one graph file your WORDOM input file is simply:\0A\0ABEGIN RING\0A--GRAPH mygraph.inp\0AEND\0A\0A You can specify two optional parameters: RINGS and DIM. RINGS allow you to \0Aspecify an output file where the perceived rings are saved, the default name is \0Arings.dat. The format of this output is quite simple: the first column contain \0Athe dimension of the ring and the following columns contain the id of each \0Aobject that build that ring. The parameter DIM is very useful when you have a \0Alot of condensed rings. In this case a full ring search will find a very big \0Anumber of rings. With the DIM parameter only the rings with a dimension less \0Athan DIM will be saved and printed. The default value for DIM is 10. A complete \0AWORDOM input file if we are interested only in hexagons could be:\0A\0ABEGIN RING\0A--GRAPH mygraph.inp\0A--RINGS myroutput.dat\0A--DIM 6\0AEND\0A\0Aor directly via command line:\0A\0Awordom -ie RING ?GRAPH mygraph.inp --RINGS myoutput.dat --DIM 6\0A\0A A second way to use this module is via the LIST parameter which is useful if \0Ayou need to analyze a lot of graph. In such case you only need to save each \0Agraph in a separate file, and then put all filenames in a list file one per \0Aline, for example:\0A\0Amygraph1.inp\0Agraph2.inp\0Amythirdgraph.inp\0Afinalgraph.inp\0A\0AThen you can run WORDOM like:\0A\0ABEGIN RING\0A--LIST mygraphlist.inp\0A--RINGS myroutput.dat\0A--DIM 6\0AEND\0A\0AThe GRAPH and LIST options are obviously mutually exclusive.\0A\0A There is a last parameter you can use: STATS. If you specify this parameter \0Afollowed by an output filename, the module will make a statistics about ring \0Adimension for each analyzed graph and will print the result in the specified \0Aoutput file. This is interesting, for example, when the graphs are representative \0Aof the frame of a trajectory, so you will obtain the statistics of the formed \0Arings along the trajectory. The format of this file is: in the first column a \0Anumber indicating the input file, and then a list of number indicating the \0Afrequency of cycles at each dimension: so in the second column you will find \0Athe number of cycle with dimension 1 (always zero), in the third column with \0Adimension two (always zero), in the fourth column the triangles, and so on.\0A Finally, --HELP will print this help, --VERSION will print version number \0Aand copyright of the current RING Module for WORDOM.\0A\00"
@.str.2 = [11 x i8] c"Examples:\0A\00"
@.str.3 = [202 x i8] c"\09Analyse only a graph in 'mygraph.dat' file and outputs the perceived \0A\09rings in rings.dat. No statistics are performed on ring dimension. \0A\09Use the default dimension of 10 for maximum ring dimension.\0A\00"
@.str.4 = [57 x i8] c"\09\09wordom -ie RING --GRAPH mygraph.dat --RINGS rings.dat\0A\00"
@.str.5 = [207 x i8] c"\09Analyse all graphs listed in 'mylist.dat', save all perceived rings \0A\09in 'rings.dat' and save a statistic of rings dimension along all graphs \0A\09in 'stats.dat'. Perceive only rings smaller than a pentagon.\0A\00"
@.str.6 = [81 x i8] c"\09\09wordom -ie RING --LIST mylist.dat --RINGS rings.dat --STATS stats.dat --DIM 5\0A\00"
@.str.7 = [39 x i8] c"Report bugs to <simonecnt@gmail.com>.\0A\00"
define void @help() {
%1 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @printf(i8* getelementptr inbounds ([3279 x i8], [3279 x i8]* @.str.1, i64 0, i64 0))
%3 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%4 = call i32 (...) @usage()
%5 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%6 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.2, i64 0, i64 0))
%7 = call i32 @printf(i8* getelementptr inbounds ([202 x i8], [202 x i8]* @.str.3, i64 0, i64 0))
%8 = call i32 @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.4, i64 0, i64 0))
%9 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%10 = call i32 @printf(i8* getelementptr inbounds ([207 x i8], [207 x i8]* @.str.5, i64 0, i64 0))
%11 = call i32 @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.6, i64 0, i64 0))
%12 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%13 = call i32 @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.7, i64 0, i64 0))
%14 = call i32 @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@str = [3278 x i8] c" RING Module for WORDOM perform a ring searching using the ring perception \0Aalgorithm proposed by Hanser et al. (J. Chem. Inf. Comput. Sci., 1996, 36 (6), \0App 1146?1152 DOI:10.1021/ci960322f). The main idea is to find supramolecular \0Acyclic structures, for example the formation of hexagons or other polygons, but \0Athe algorithm is quite generic and can be used for any ring perception problem. \0A The input file consist essentially in a graph in a very easy format: a set of \0Alines each one containing two numbers. These numbers are the id of an object \0A(could be an atom or a molecule, or whatever you want), and each line means \0Athat the two object identified by the two number are in contact. For example to \0Agraph file for a pentagon need only the following lines:\0A\0A 1 2\0A 2 3\0A 3 4\0A 4 5\0A 5 1\0A\0AVery important, each contact must be present only one time and must not be \0Apresent duplicates like 1 2 and 2 1. \0AIf you want to analyze only one graph file your WORDOM input file is simply:\0A\0ABEGIN RING\0A--GRAPH mygraph.inp\0AEND\0A\0A You can specify two optional parameters: RINGS and DIM. RINGS allow you to \0Aspecify an output file where the perceived rings are saved, the default name is \0Arings.dat. The format of this output is quite simple: the first column contain \0Athe dimension of the ring and the following columns contain the id of each \0Aobject that build that ring. The parameter DIM is very useful when you have a \0Alot of condensed rings. In this case a full ring search will find a very big \0Anumber of rings. With the DIM parameter only the rings with a dimension less \0Athan DIM will be saved and printed. The default value for DIM is 10. A complete \0AWORDOM input file if we are interested only in hexagons could be:\0A\0ABEGIN RING\0A--GRAPH mygraph.inp\0A--RINGS myroutput.dat\0A--DIM 6\0AEND\0A\0Aor directly via command line:\0A\0Awordom -ie RING ?GRAPH mygraph.inp --RINGS myoutput.dat --DIM 6\0A\0A A second way to use this module is via the LIST parameter which is useful if \0Ayou need to analyze a lot of graph. In such case you only need to save each \0Agraph in a separate file, and then put all filenames in a list file one per \0Aline, for example:\0A\0Amygraph1.inp\0Agraph2.inp\0Amythirdgraph.inp\0Afinalgraph.inp\0A\0AThen you can run WORDOM like:\0A\0ABEGIN RING\0A--LIST mygraphlist.inp\0A--RINGS myroutput.dat\0A--DIM 6\0AEND\0A\0AThe GRAPH and LIST options are obviously mutually exclusive.\0A\0A There is a last parameter you can use: STATS. If you specify this parameter \0Afollowed by an output filename, the module will make a statistics about ring \0Adimension for each analyzed graph and will print the result in the specified \0Aoutput file. This is interesting, for example, when the graphs are representative \0Aof the frame of a trajectory, so you will obtain the statistics of the formed \0Arings along the trajectory. The format of this file is: in the first column a \0Anumber indicating the input file, and then a list of number indicating the \0Afrequency of cycles at each dimension: so in the second column you will find \0Athe number of cycle with dimension 1 (always zero), in the third column with \0Adimension two (always zero), in the fourth column the triangles, and so on.\0A Finally, --HELP will print this help, --VERSION will print version number \0Aand copyright of the current RING Module for WORDOM.\00"
@str.8 = [10 x i8] c"Examples:\00"
@str.9 = [201 x i8] c"\09Analyse only a graph in 'mygraph.dat' file and outputs the perceived \0A\09rings in rings.dat. No statistics are performed on ring dimension. \0A\09Use the default dimension of 10 for maximum ring dimension.\00"
@str.10 = [56 x i8] c"\09\09wordom -ie RING --GRAPH mygraph.dat --RINGS rings.dat\00"
@str.11 = [206 x i8] c"\09Analyse all graphs listed in 'mylist.dat', save all perceived rings \0A\09in 'rings.dat' and save a statistic of rings dimension along all graphs \0A\09in 'stats.dat'. Perceive only rings smaller than a pentagon.\00"
@str.12 = [80 x i8] c"\09\09wordom -ie RING --LIST mylist.dat --RINGS rings.dat --STATS stats.dat --DIM 5\00"
@str.13 = [38 x i8] c"Report bugs to <simonecnt@gmail.com>.\00"
define void @help() {
%1 = tail call i32 @putchar(i32 10)
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3278 x i8], [3278 x i8]* @str, i64 0, i64 0))
%3 = tail call i32 @putchar(i32 10)
%4 = tail call i32 (...) @usage()
%5 = tail call i32 @putchar(i32 10)
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.8, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([201 x i8], [201 x i8]* @str.9, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([56 x i8], [56 x i8]* @str.10, i64 0, i64 0))
%9 = tail call i32 @putchar(i32 10)
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([206 x i8], [206 x i8]* @str.11, i64 0, i64 0))
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @str.12, i64 0, i64 0))
%12 = tail call i32 @putchar(i32 10)
%13 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.13, i64 0, i64 0))
%14 = tail call i32 @putchar(i32 10)
ret void
}