Finding Hamiltonian paths in tournaments on clusters View Full Text


Ontology type: schema:ScholarlyArticle     


Article Info

DATE

2006-07

AUTHORS

Chun-Hsi Huang, Sanguthevar Rajasekaran, Laurence Tianruo Yang, Xin He

ABSTRACT

This paper presents a general methodology for the communication-efficient parallelization of graph algorithms using the divide-and-conquer approach and shows that this class of problems can be solved in cluster environments with good communication efficiency. Specifically, the first practical parallel algorithm, based on a general coarse-grained model, for finding Hamiltonian paths in tournaments is presented. On any such parallel machines, this algorithm uses only (3log p+1), where p is the number of processors, communication rounds, which is independent of the tournament size, and can reuse the existing linear-time algorithm in the sequential setting. For theoretical completeness, the algorithm is revised for fine-grained models, where the ratio of computation and communication throughputs is low or the local memory size, \documentclass[12pt]{minimal} \usepackage{amsmath} \usepackage{wasysym} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsbsy} \usepackage{mathrsfs} \usepackage{upgreek} \setlength{\oddsidemargin}{-69pt} \begin{document}$$O(\frac{N}{p})$$\end{document}, of each individual processor is extremely limited \documentclass[12pt]{minimal} \usepackage{amsmath} \usepackage{wasysym} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsbsy} \usepackage{mathrsfs} \usepackage{upgreek} \setlength{\oddsidemargin}{-69pt} \begin{document}$$(\frac{N}{p} \ge p^\epsilon,$$\end{document} for any \documentclass[12pt]{minimal} \usepackage{amsmath} \usepackage{wasysym} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsbsy} \usepackage{mathrsfs} \usepackage{upgreek} \setlength{\oddsidemargin}{-69pt} \begin{document}$$\epsilon > 0)$$\end{document}, solving the problem with O(log p) communication rounds, while the hidden constant grows with the scalability factor 1/∊. Experiments have been carried out on a Linux cluster of 32 Sun Ultra5 computers and an SGI Origin 2000 with 32 R10000 processors. The algorithm performance on the Linux Cluster reaches 75% of the performance on the SGI Origin 2000 when the tournament size is about one million. More... »

PAGES

345-353

References to SciGraph publications

  • 1984-03. Optimal parallel algorithms for computing convex hulls and for sorting in COMPUTING
  • 1988-11. Parallel computational geometry in ALGORITHMICA
  • 1995. Scalable computing in COMPUTER SCIENCE TODAY
  • 1987-04. Optimal computation of prefix sums on a binary tree of processors in INTERNATIONAL JOURNAL OF PARALLEL PROGRAMMING
  • Identifiers

    URI

    http://scigraph.springernature.com/pub.10.1007/s10586-006-9746-3

    DOI

    http://dx.doi.org/10.1007/s10586-006-9746-3

    DIMENSIONS

    https://app.dimensions.ai/details/publication/pub.1021944870


    Indexing Status Check whether this publication has been indexed by Scopus and Web Of Science using the SN Indexing Status Tool
    Incoming Citations Browse incoming citations for this publication using opencitations.net

    JSON-LD is the canonical representation for SciGraph data.

    TIP: You can open this SciGraph record using an external JSON-LD service: JSON-LD Playground Google SDTT

    [
      {
        "@context": "https://springernature.github.io/scigraph/jsonld/sgcontext.json", 
        "about": [
          {
            "id": "http://purl.org/au-research/vocabulary/anzsrc-for/2008/08", 
            "inDefinedTermSet": "http://purl.org/au-research/vocabulary/anzsrc-for/2008/", 
            "name": "Information and Computing Sciences", 
            "type": "DefinedTerm"
          }, 
          {
            "id": "http://purl.org/au-research/vocabulary/anzsrc-for/2008/0803", 
            "inDefinedTermSet": "http://purl.org/au-research/vocabulary/anzsrc-for/2008/", 
            "name": "Computer Software", 
            "type": "DefinedTerm"
          }
        ], 
        "author": [
          {
            "affiliation": {
              "alternateName": "Department of Computer Science and Engineering, University of Connecticut, 06269, Storrs, CT", 
              "id": "http://www.grid.ac/institutes/grid.63054.34", 
              "name": [
                "Department of Computer Science and Engineering, University of Connecticut, 06269, Storrs, CT"
              ], 
              "type": "Organization"
            }, 
            "familyName": "Huang", 
            "givenName": "Chun-Hsi", 
            "id": "sg:person.01155773776.53", 
            "sameAs": [
              "https://app.dimensions.ai/discover/publication?and_facet_researcher=ur.01155773776.53"
            ], 
            "type": "Person"
          }, 
          {
            "affiliation": {
              "alternateName": "Department of Computer Science and Engineering, University of Connecticut, 06269, Storrs, CT", 
              "id": "http://www.grid.ac/institutes/grid.63054.34", 
              "name": [
                "Department of Computer Science and Engineering, University of Connecticut, 06269, Storrs, CT"
              ], 
              "type": "Organization"
            }, 
            "familyName": "Rajasekaran", 
            "givenName": "Sanguthevar", 
            "id": "sg:person.01135772752.31", 
            "sameAs": [
              "https://app.dimensions.ai/discover/publication?and_facet_researcher=ur.01135772752.31"
            ], 
            "type": "Person"
          }, 
          {
            "affiliation": {
              "alternateName": "Department of Computer Science, St. Francis Xavier University, B2G 2W5, Antigonish, NS, Canada", 
              "id": "http://www.grid.ac/institutes/grid.264060.6", 
              "name": [
                "Department of Computer Science, St. Francis Xavier University, B2G 2W5, Antigonish, NS, Canada"
              ], 
              "type": "Organization"
            }, 
            "familyName": "Yang", 
            "givenName": "Laurence Tianruo", 
            "id": "sg:person.011064222523.60", 
            "sameAs": [
              "https://app.dimensions.ai/discover/publication?and_facet_researcher=ur.011064222523.60"
            ], 
            "type": "Person"
          }, 
          {
            "affiliation": {
              "alternateName": "Department of Computer Science and Engineering, State University of New York at Buffalo, 14260, Buffalo, NY", 
              "id": "http://www.grid.ac/institutes/grid.273335.3", 
              "name": [
                "Department of Computer Science and Engineering, State University of New York at Buffalo, 14260, Buffalo, NY"
              ], 
              "type": "Organization"
            }, 
            "familyName": "He", 
            "givenName": "Xin", 
            "id": "sg:person.011352641523.42", 
            "sameAs": [
              "https://app.dimensions.ai/discover/publication?and_facet_researcher=ur.011352641523.42"
            ], 
            "type": "Person"
          }
        ], 
        "citation": [
          {
            "id": "sg:pub.10.1007/bf02243071", 
            "sameAs": [
              "https://app.dimensions.ai/details/publication/pub.1015690419", 
              "https://doi.org/10.1007/bf02243071"
            ], 
            "type": "CreativeWork"
          }, 
          {
            "id": "sg:pub.10.1007/bf01379098", 
            "sameAs": [
              "https://app.dimensions.ai/details/publication/pub.1042270245", 
              "https://doi.org/10.1007/bf01379098"
            ], 
            "type": "CreativeWork"
          }, 
          {
            "id": "sg:pub.10.1007/bf01762120", 
            "sameAs": [
              "https://app.dimensions.ai/details/publication/pub.1026924454", 
              "https://doi.org/10.1007/bf01762120"
            ], 
            "type": "CreativeWork"
          }, 
          {
            "id": "sg:pub.10.1007/bfb0015236", 
            "sameAs": [
              "https://app.dimensions.ai/details/publication/pub.1030573812", 
              "https://doi.org/10.1007/bfb0015236"
            ], 
            "type": "CreativeWork"
          }
        ], 
        "datePublished": "2006-07", 
        "datePublishedReg": "2006-07-01", 
        "description": "This paper presents a general methodology for the communication-efficient parallelization of graph algorithms using the divide-and-conquer approach and shows that this class of problems can be solved in cluster environments with good communication efficiency. Specifically, the first practical parallel algorithm, based on a general coarse-grained model, for finding Hamiltonian paths in tournaments is presented. On any such parallel machines, this algorithm uses only (3log p+1), where p is the number of processors, communication rounds, which is independent of the tournament size, and can reuse the existing linear-time algorithm in the sequential setting. For theoretical completeness, the algorithm is revised for fine-grained models, where the ratio of computation and communication throughputs is low or the local memory size, \\documentclass[12pt]{minimal}\n\t\t\t\t\\usepackage{amsmath}\n\t\t\t\t\\usepackage{wasysym}\n\t\t\t\t\\usepackage{amsfonts}\n\t\t\t\t\\usepackage{amssymb}\n\t\t\t\t\\usepackage{amsbsy}\n\t\t\t\t\\usepackage{mathrsfs}\n\t\t\t\t\\usepackage{upgreek}\n\t\t\t\t\\setlength{\\oddsidemargin}{-69pt}\n\t\t\t\t\\begin{document}$$O(\\frac{N}{p})$$\\end{document}, of each individual processor is extremely limited \\documentclass[12pt]{minimal}\n\t\t\t\t\\usepackage{amsmath}\n\t\t\t\t\\usepackage{wasysym}\n\t\t\t\t\\usepackage{amsfonts}\n\t\t\t\t\\usepackage{amssymb}\n\t\t\t\t\\usepackage{amsbsy}\n\t\t\t\t\\usepackage{mathrsfs}\n\t\t\t\t\\usepackage{upgreek}\n\t\t\t\t\\setlength{\\oddsidemargin}{-69pt}\n\t\t\t\t\\begin{document}$$(\\frac{N}{p} \\ge p^\\epsilon,$$\\end{document} for any \\documentclass[12pt]{minimal}\n\t\t\t\t\\usepackage{amsmath}\n\t\t\t\t\\usepackage{wasysym}\n\t\t\t\t\\usepackage{amsfonts}\n\t\t\t\t\\usepackage{amssymb}\n\t\t\t\t\\usepackage{amsbsy}\n\t\t\t\t\\usepackage{mathrsfs}\n\t\t\t\t\\usepackage{upgreek}\n\t\t\t\t\\setlength{\\oddsidemargin}{-69pt}\n\t\t\t\t\\begin{document}$$\\epsilon > 0)$$\\end{document}, solving the problem with O(log p) communication rounds, while the hidden constant grows with the scalability factor 1/\u220a. Experiments have been carried out on a Linux cluster of 32 Sun Ultra5 computers and an SGI Origin 2000 with 32 R10000 processors. The algorithm performance on the Linux Cluster reaches 75% of the performance on the SGI Origin 2000 when the tournament size is about one million.", 
        "genre": "article", 
        "id": "sg:pub.10.1007/s10586-006-9746-3", 
        "inLanguage": "en", 
        "isAccessibleForFree": false, 
        "isPartOf": [
          {
            "id": "sg:journal.1046649", 
            "issn": [
              "1386-7857", 
              "1573-7543"
            ], 
            "name": "Cluster Computing", 
            "publisher": "Springer Nature", 
            "type": "Periodical"
          }, 
          {
            "issueNumber": "3", 
            "type": "PublicationIssue"
          }, 
          {
            "type": "PublicationVolume", 
            "volumeNumber": "9"
          }
        ], 
        "keywords": [
          "SGI Origin 2000", 
          "Linux cluster", 
          "Origin 2000", 
          "ratio of computation", 
          "better communication efficiency", 
          "local memory size", 
          "practical parallel algorithm", 
          "number of processors", 
          "tournament size", 
          "linear-time algorithm", 
          "graph algorithms", 
          "Hamiltonian path", 
          "scalability factors", 
          "parallel algorithm", 
          "communication rounds", 
          "communication efficiency", 
          "parallel machines", 
          "communication throughput", 
          "individual processors", 
          "memory size", 
          "conquer approach", 
          "class of problems", 
          "cluster environment", 
          "algorithm performance", 
          "algorithm", 
          "processors", 
          "R10000 processors", 
          "sequential setting", 
          "theoretical completeness", 
          "general methodology", 
          "parallelization", 
          "computer", 
          "machine", 
          "performance", 
          "path", 
          "throughput", 
          "computation", 
          "communication", 
          "clusters", 
          "environment", 
          "completeness", 
          "model", 
          "methodology", 
          "divide", 
          "tournament", 
          "efficiency", 
          "experiments", 
          "class", 
          "number", 
          "size", 
          "rounds", 
          "setting", 
          "ratio", 
          "factors", 
          "constants", 
          "problem", 
          "paper", 
          "approach", 
          "communication-efficient parallelization", 
          "first practical parallel algorithm", 
          "such parallel machines", 
          "Sun Ultra5 computers", 
          "Ultra5 computers"
        ], 
        "name": "Finding Hamiltonian paths in tournaments on clusters", 
        "pagination": "345-353", 
        "productId": [
          {
            "name": "dimensions_id", 
            "type": "PropertyValue", 
            "value": [
              "pub.1021944870"
            ]
          }, 
          {
            "name": "doi", 
            "type": "PropertyValue", 
            "value": [
              "10.1007/s10586-006-9746-3"
            ]
          }
        ], 
        "sameAs": [
          "https://doi.org/10.1007/s10586-006-9746-3", 
          "https://app.dimensions.ai/details/publication/pub.1021944870"
        ], 
        "sdDataset": "articles", 
        "sdDatePublished": "2022-01-01T18:15", 
        "sdLicense": "https://scigraph.springernature.com/explorer/license/", 
        "sdPublisher": {
          "name": "Springer Nature - SN SciGraph project", 
          "type": "Organization"
        }, 
        "sdSource": "s3://com-springernature-scigraph/baseset/20220101/entities/gbq_results/article/article_424.jsonl", 
        "type": "ScholarlyArticle", 
        "url": "https://doi.org/10.1007/s10586-006-9746-3"
      }
    ]
     

    Download the RDF metadata as:  json-ld nt turtle xml License info

    HOW TO GET THIS DATA PROGRAMMATICALLY:

    JSON-LD is a popular format for linked data which is fully compatible with JSON.

    curl -H 'Accept: application/ld+json' 'https://scigraph.springernature.com/pub.10.1007/s10586-006-9746-3'

    N-Triples is a line-based linked data format ideal for batch operations.

    curl -H 'Accept: application/n-triples' 'https://scigraph.springernature.com/pub.10.1007/s10586-006-9746-3'

    Turtle is a human-readable linked data format.

    curl -H 'Accept: text/turtle' 'https://scigraph.springernature.com/pub.10.1007/s10586-006-9746-3'

    RDF/XML is a standard XML format for linked data.

    curl -H 'Accept: application/rdf+xml' 'https://scigraph.springernature.com/pub.10.1007/s10586-006-9746-3'


     

    This table displays all metadata directly associated to this object as RDF triples.

    164 TRIPLES      22 PREDICATES      93 URIs      81 LITERALS      6 BLANK NODES

    Subject Predicate Object
    1 sg:pub.10.1007/s10586-006-9746-3 schema:about anzsrc-for:08
    2 anzsrc-for:0803
    3 schema:author N52fb2423aa014cd1a9e0fc47259bca31
    4 schema:citation sg:pub.10.1007/bf01379098
    5 sg:pub.10.1007/bf01762120
    6 sg:pub.10.1007/bf02243071
    7 sg:pub.10.1007/bfb0015236
    8 schema:datePublished 2006-07
    9 schema:datePublishedReg 2006-07-01
    10 schema:description This paper presents a general methodology for the communication-efficient parallelization of graph algorithms using the divide-and-conquer approach and shows that this class of problems can be solved in cluster environments with good communication efficiency. Specifically, the first practical parallel algorithm, based on a general coarse-grained model, for finding Hamiltonian paths in tournaments is presented. On any such parallel machines, this algorithm uses only (3log p+1), where p is the number of processors, communication rounds, which is independent of the tournament size, and can reuse the existing linear-time algorithm in the sequential setting. For theoretical completeness, the algorithm is revised for fine-grained models, where the ratio of computation and communication throughputs is low or the local memory size, \documentclass[12pt]{minimal} \usepackage{amsmath} \usepackage{wasysym} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsbsy} \usepackage{mathrsfs} \usepackage{upgreek} \setlength{\oddsidemargin}{-69pt} \begin{document}$$O(\frac{N}{p})$$\end{document}, of each individual processor is extremely limited \documentclass[12pt]{minimal} \usepackage{amsmath} \usepackage{wasysym} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsbsy} \usepackage{mathrsfs} \usepackage{upgreek} \setlength{\oddsidemargin}{-69pt} \begin{document}$$(\frac{N}{p} \ge p^\epsilon,$$\end{document} for any \documentclass[12pt]{minimal} \usepackage{amsmath} \usepackage{wasysym} \usepackage{amsfonts} \usepackage{amssymb} \usepackage{amsbsy} \usepackage{mathrsfs} \usepackage{upgreek} \setlength{\oddsidemargin}{-69pt} \begin{document}$$\epsilon > 0)$$\end{document}, solving the problem with O(log p) communication rounds, while the hidden constant grows with the scalability factor 1/∊. Experiments have been carried out on a Linux cluster of 32 Sun Ultra5 computers and an SGI Origin 2000 with 32 R10000 processors. The algorithm performance on the Linux Cluster reaches 75% of the performance on the SGI Origin 2000 when the tournament size is about one million.
    11 schema:genre article
    12 schema:inLanguage en
    13 schema:isAccessibleForFree false
    14 schema:isPartOf N79f8395418a74b16a32894153797779b
    15 Nad16dbfd6be144329110ae20e821a97f
    16 sg:journal.1046649
    17 schema:keywords Hamiltonian path
    18 Linux cluster
    19 Origin 2000
    20 R10000 processors
    21 SGI Origin 2000
    22 Sun Ultra5 computers
    23 Ultra5 computers
    24 algorithm
    25 algorithm performance
    26 approach
    27 better communication efficiency
    28 class
    29 class of problems
    30 cluster environment
    31 clusters
    32 communication
    33 communication efficiency
    34 communication rounds
    35 communication throughput
    36 communication-efficient parallelization
    37 completeness
    38 computation
    39 computer
    40 conquer approach
    41 constants
    42 divide
    43 efficiency
    44 environment
    45 experiments
    46 factors
    47 first practical parallel algorithm
    48 general methodology
    49 graph algorithms
    50 individual processors
    51 linear-time algorithm
    52 local memory size
    53 machine
    54 memory size
    55 methodology
    56 model
    57 number
    58 number of processors
    59 paper
    60 parallel algorithm
    61 parallel machines
    62 parallelization
    63 path
    64 performance
    65 practical parallel algorithm
    66 problem
    67 processors
    68 ratio
    69 ratio of computation
    70 rounds
    71 scalability factors
    72 sequential setting
    73 setting
    74 size
    75 such parallel machines
    76 theoretical completeness
    77 throughput
    78 tournament
    79 tournament size
    80 schema:name Finding Hamiltonian paths in tournaments on clusters
    81 schema:pagination 345-353
    82 schema:productId N085def66aff04f5ab6d8b54ca91be345
    83 Nbbca8d8a4c4c491cbc300de216131f0b
    84 schema:sameAs https://app.dimensions.ai/details/publication/pub.1021944870
    85 https://doi.org/10.1007/s10586-006-9746-3
    86 schema:sdDatePublished 2022-01-01T18:15
    87 schema:sdLicense https://scigraph.springernature.com/explorer/license/
    88 schema:sdPublisher N8cafcc4be0814bb7b030c5a55d97344f
    89 schema:url https://doi.org/10.1007/s10586-006-9746-3
    90 sgo:license sg:explorer/license/
    91 sgo:sdDataset articles
    92 rdf:type schema:ScholarlyArticle
    93 N085def66aff04f5ab6d8b54ca91be345 schema:name doi
    94 schema:value 10.1007/s10586-006-9746-3
    95 rdf:type schema:PropertyValue
    96 N4644f6d48618413b89f9cb1805e5291a rdf:first sg:person.011352641523.42
    97 rdf:rest rdf:nil
    98 N52fb2423aa014cd1a9e0fc47259bca31 rdf:first sg:person.01155773776.53
    99 rdf:rest N876b7adb55d341cdac25f70b0edcd504
    100 N66f80ecff0504eba846015cf55868064 rdf:first sg:person.011064222523.60
    101 rdf:rest N4644f6d48618413b89f9cb1805e5291a
    102 N79f8395418a74b16a32894153797779b schema:issueNumber 3
    103 rdf:type schema:PublicationIssue
    104 N876b7adb55d341cdac25f70b0edcd504 rdf:first sg:person.01135772752.31
    105 rdf:rest N66f80ecff0504eba846015cf55868064
    106 N8cafcc4be0814bb7b030c5a55d97344f schema:name Springer Nature - SN SciGraph project
    107 rdf:type schema:Organization
    108 Nad16dbfd6be144329110ae20e821a97f schema:volumeNumber 9
    109 rdf:type schema:PublicationVolume
    110 Nbbca8d8a4c4c491cbc300de216131f0b schema:name dimensions_id
    111 schema:value pub.1021944870
    112 rdf:type schema:PropertyValue
    113 anzsrc-for:08 schema:inDefinedTermSet anzsrc-for:
    114 schema:name Information and Computing Sciences
    115 rdf:type schema:DefinedTerm
    116 anzsrc-for:0803 schema:inDefinedTermSet anzsrc-for:
    117 schema:name Computer Software
    118 rdf:type schema:DefinedTerm
    119 sg:journal.1046649 schema:issn 1386-7857
    120 1573-7543
    121 schema:name Cluster Computing
    122 schema:publisher Springer Nature
    123 rdf:type schema:Periodical
    124 sg:person.011064222523.60 schema:affiliation grid-institutes:grid.264060.6
    125 schema:familyName Yang
    126 schema:givenName Laurence Tianruo
    127 schema:sameAs https://app.dimensions.ai/discover/publication?and_facet_researcher=ur.011064222523.60
    128 rdf:type schema:Person
    129 sg:person.011352641523.42 schema:affiliation grid-institutes:grid.273335.3
    130 schema:familyName He
    131 schema:givenName Xin
    132 schema:sameAs https://app.dimensions.ai/discover/publication?and_facet_researcher=ur.011352641523.42
    133 rdf:type schema:Person
    134 sg:person.01135772752.31 schema:affiliation grid-institutes:grid.63054.34
    135 schema:familyName Rajasekaran
    136 schema:givenName Sanguthevar
    137 schema:sameAs https://app.dimensions.ai/discover/publication?and_facet_researcher=ur.01135772752.31
    138 rdf:type schema:Person
    139 sg:person.01155773776.53 schema:affiliation grid-institutes:grid.63054.34
    140 schema:familyName Huang
    141 schema:givenName Chun-Hsi
    142 schema:sameAs https://app.dimensions.ai/discover/publication?and_facet_researcher=ur.01155773776.53
    143 rdf:type schema:Person
    144 sg:pub.10.1007/bf01379098 schema:sameAs https://app.dimensions.ai/details/publication/pub.1042270245
    145 https://doi.org/10.1007/bf01379098
    146 rdf:type schema:CreativeWork
    147 sg:pub.10.1007/bf01762120 schema:sameAs https://app.dimensions.ai/details/publication/pub.1026924454
    148 https://doi.org/10.1007/bf01762120
    149 rdf:type schema:CreativeWork
    150 sg:pub.10.1007/bf02243071 schema:sameAs https://app.dimensions.ai/details/publication/pub.1015690419
    151 https://doi.org/10.1007/bf02243071
    152 rdf:type schema:CreativeWork
    153 sg:pub.10.1007/bfb0015236 schema:sameAs https://app.dimensions.ai/details/publication/pub.1030573812
    154 https://doi.org/10.1007/bfb0015236
    155 rdf:type schema:CreativeWork
    156 grid-institutes:grid.264060.6 schema:alternateName Department of Computer Science, St. Francis Xavier University, B2G 2W5, Antigonish, NS, Canada
    157 schema:name Department of Computer Science, St. Francis Xavier University, B2G 2W5, Antigonish, NS, Canada
    158 rdf:type schema:Organization
    159 grid-institutes:grid.273335.3 schema:alternateName Department of Computer Science and Engineering, State University of New York at Buffalo, 14260, Buffalo, NY
    160 schema:name Department of Computer Science and Engineering, State University of New York at Buffalo, 14260, Buffalo, NY
    161 rdf:type schema:Organization
    162 grid-institutes:grid.63054.34 schema:alternateName Department of Computer Science and Engineering, University of Connecticut, 06269, Storrs, CT
    163 schema:name Department of Computer Science and Engineering, University of Connecticut, 06269, Storrs, CT
    164 rdf:type schema:Organization
     




    Preview window. Press ESC to close (or click here)


    ...