// File: /workspace/github_cpp_makefile_star2_O2/rtackx[P]ComSim/main.cpp
// Function: usage()
void usage()
{
	cerr << "Usage : comsim <link_list_file> <neighbor_distance> [similarity_index] [depth]" << endl << endl;

	cerr << "ComSim is a community detection algorithm." << endl;
	cerr << "A similarity index is used to measure similarities between nodes." << endl;
	cerr << "Basically the similarity is calculated between 2 nodes at a given distance." << endl;
	cerr << "This creates a new weighted graph on which is applied 2 steps :" << endl;
	cerr << "    1) Cycles are detected and considered as core communities. A cycle is a sequence of nodes which have the highest weights (similarities) all along its path." << endl;
	cerr << "    2) Based on communities previously detected, nodes that don't belong to any cycle are then placed to a neihbor community maximazing the sum of weights to that community." << endl;
	cerr << "After these 2 steps, if there are still remaining nodes and neighbor distance is greater than 0, then a new weighted graph is computed on the induced graph of the remaining nodes at a smaller distance." << endl << endl;

	cerr << "There is the list of available similarity indices (default is cn) :" << endl;
	cerr << "    cn : common neighbors" << endl;
	cerr << "    ji : jaccard index" << endl;
	cerr << "    aa : adamic-adar" << endl;
	cerr << "    ra : resource allocator" << endl;
	cerr << "    lhn : LHN1" << endl;
	cerr << "    pan : preferential attachment neighbor" << endl << endl;

	cerr << "A depth value can be chosen (default is 1). This value indicates how many cycles a node can be part of." << endl;
	cerr << "Choosing a depth value > 1 produces overlapping between communities." << endl << endl;

	cerr << "link_list_file : input network as a list of links" << endl;
	cerr << "A link is : \nnode1 node2 [weight]" << endl << endl;

	cerr << "ComSim examples :" << endl;
	cerr << "\"./comsim uni_network_links 1 > detected_communities\" executes ComSim with cn similarity index between nodes at distance 1 on a unipartite network." << endl;
	cerr << "\"./comsim bip_links 2 aa > detected_communities\" executes ComSim with aa similarity index between nodes at distance 2 on a bipartite network. Since there is no common neighbor between 2 nodes at distance 1 in a bipartite network, it requires an initial distance > 1." << endl;
	cerr << "\"./comsim uni_network_links 1 cm 3 > detected_communities\" executes ComSim with cn similarity index between nodes at distance 1 on a unipartite network and it allows each node to be part of 3 cycles." << endl;
}

// Assembly:
pushq %rbx
movq 0xe911(%rip), %rbx      # 0x10ff0
leaq 0x792a(%rip), %rsi      # 0xa010
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
movq %rax, %rdi
callq 0x2110
leaq 0x795a(%rip), %rsi      # 0xa05f
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x796e(%rip), %rsi      # 0xa08a
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7999(%rip), %rsi      # 0xa0cc
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x79ce(%rip), %rsi      # 0xa118
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x79f7(%rip), %rsi      # 0xa158
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7a80(%rip), %rsi      # 0xa1f8
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7b17(%rip), %rsi      # 0xa2a6
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
movq %rax, %rdi
callq 0x2110
leaq 0x7bc2(%rip), %rsi      # 0xa370
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7bef(%rip), %rsi      # 0xa3b4
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7bf2(%rip), %rsi      # 0xa3ce
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7bf2(%rip), %rsi      # 0xa3e5
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7bf0(%rip), %rsi      # 0xa3fa
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7bf5(%rip), %rsi      # 0xa416
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7bed(%rip), %rsi      # 0xa425
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
movq %rax, %rdi
callq 0x2110
leaq 0x7bf9(%rip), %rsi      # 0xa450
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7c4a(%rip), %rsi      # 0xa4b8
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
movq %rax, %rdi
callq 0x2110
leaq 0x7c70(%rip), %rsi      # 0xa4fd
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7c8b(%rip), %rsi      # 0xa52f
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
movq %rax, %rdi
callq 0x2110
leaq 0x7c8e(%rip), %rsi      # 0xa551
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7c89(%rip), %rsi      # 0xa563
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7d06(%rip), %rsi      # 0xa5f7
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
callq 0x2110
leaq 0x7dfa(%rip), %rsi      # 0xa702
movq %rbx, %rdi
callq 0x2240
movq %rax, %rdi
popq %rbx
jmp 0x2110