{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "*This notebook contains material from [PyRosetta](https://RosettaCommons.github.io/PyRosetta.notebooks);\n", "content is available [on Github](https://github.com/RosettaCommons/PyRosetta.notebooks.git).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Using Rosetta Gen KIC](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/09.01-Using-Gen-KIC.ipynb) | [Contents](toc.ipynb) | [Index](index.ipynb) | [Working With Density](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/11.00-Working-With-Density.ipynb) >

\"Open" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Working With Symmetry\n", "Keywords: symmetry, asymmetric, SetupForSymmetryMover, virtual\n", "\n", "## Overview\n", "Symmetry is an important concept to learn when working with biomolecules. When a protein is crystalized, it is in the precense of its symmetrical neighbors - which can be important if testing particular protocols or using crystal density for refinement or full structure building.\n", "\n", "Symmetry can also be useful for designing symmetrical structures or large repeating meta-proteins like protein cages. \n", "\n", "### Symmetry In Rosetta\n", "So why do we care if our protein is symmetrical or not when it comes to Rosetta? Each residue and atom that is loaded into Rosetta takes time to both load, and time to score. Since scoring can happen thousands of times - even in a short protocol, anything we can do to speed this up becomes important. The most expensive operation in Rosetta is minimization, and by using symmetry - we can reduce the minimization time exponentially by minimizing a single copy instead of ALL copies. We will get into the details about how this works below.\n", "\n", "When we use symmetry in Rosetta - we are basically telling rosetta that the symmetrical partners are 'special', however, the total number of residues is now ALL residues, including symmetrical partners. Upon setting up symmety in Rosetta, Rosetta will replace the `Conformation` within the pose with a **Symmetrical** version, called the `SymmetricConformation`. If you know anything about classes, this `SymmetricConformation` is derived from the actual `Conformation` object, but contains extra information about the pose and some functions are replaced. \n", "\n", "### Symmetric Scoring and Moving\n", "Ok, so now lets assume that we have our symmetric pose. Now what? Well, the symmetric copies are all tied to their real counterparts. Once you move a chain, residue, or atom by packing or minimization, the symmetric copies of that residue are all moved in the same way. \n", "\n", "Cool. But what about scoring? Scoring works very similarly - instead of scoring each and every residue in our pose, Rosetta will score just our assymetric unit, and multiply that out to the number of symmetric copies we have. Intelligently, Rosetta will also figure out the symmetric interfaces that arise from the interactions of our assymetric unit to the symmetric copies and score them appropriately.\n", "\n", "### Symmetry-aware movers\n", "Most of our common movers are symmetry-aware. At one point there were different symmetric and non-symmetric versions of particular code, such as MinMover and PackRotamersMover. Now though, Rosetta will automatically use the pose to figure out what needs to be done. You should seek original documentation (and contact the author if not explicit) to make sure that an uncommon protocol you are using is symmetry-aware.\n", "\n", "## Documentation\n", "More information on RosettaSymmetry can be found in the following places:\n", "- https://www.rosettacommons.org/docs/latest/rosetta_basics/structural_concepts/symmetry\n", "- https://www.rosettacommons.org/demos/latest/tutorials/Symmetry/Symmetry\n", "- https://www.rosettacommons.org/docs/latest/application_documentation/utilities/make-symmdef-file\n", "- https://www.rosettacommons.org/docs/latest/scripting_documentation/RosettaScripts/Movers/movers_pages/SetupForSymmetryMover\n", "- https://www.rosettacommons.org/docs/latest/scripting_documentation/RosettaScripts/Movers/movers_pages/ExtractAsymmetricUnitMover\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install pyrosettacolabsetup\n", "import pyrosettacolabsetup; pyrosettacolabsetup.install_pyrosetta()\n", "import pyrosetta; pyrosetta.init()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here, we will use a few specific options. The first three options make Rosetta a bit more robust to input structures. The `-load_PDB_components` cannot be used with glycans, unfortunately, and our structure has a few very important glycans. Finally, we load a bunch of glycan-specific options, which we will cover in the next tutorial." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PyRosetta-4 2019 [Rosetta PyRosetta4.Release.python36.mac 2019.39+release.93456a567a8125cafdf7f8cb44400bc20b570d81 2019-09-26T14:24:44] retrieved from: http://www.pyrosetta.org\n", "(C) Copyright Rosetta Commons Member Institutions. Created in JHU by Sergey Lyskov and PyRosetta Team.\n", "\u001b[0mcore.init: \u001b[0mChecking for fconfig files in pwd and ./rosetta/flags\n", "\u001b[0mcore.init: \u001b[0mReading fconfig.../Users/jadolfbr/.rosetta/flags/common\n", "\u001b[0mcore.init: \u001b[0m\n", "\u001b[0mcore.init: \u001b[0m\n", "\u001b[0mcore.init: \u001b[0mRosetta version: PyRosetta4.Release.python36.mac r233 2019.39+release.93456a567a8 93456a567a8125cafdf7f8cb44400bc20b570d81 http://www.pyrosetta.org 2019-09-26T14:24:44\n", "\u001b[0mcore.init: \u001b[0mcommand: PyRosetta -ignore_unrecognized_res -load_PDB_components false -ignore_zero_occupancy false @inputs/glycan_flags -database /Users/jadolfbr/Library/Python/3.6/lib/python/site-packages/pyrosetta-2019.39+release.93456a567a8-py3.6-macosx-10.6-intel.egg/pyrosetta/database\n", "\u001b[0mbasic.random.init_random_generator: \u001b[0m'RNG device' seed mode, using '/dev/urandom', seed=1544006277 seed_offset=0 real_seed=1544006277\n", "\u001b[0mbasic.random.init_random_generator: \u001b[0mRandomGenerator:init: Normal mode, seed=1544006277 RG_type=mt19937\n" ] } ], "source": [ "from pyrosetta import *\n", "from pyrosetta.rosetta import *\n", "from pyrosetta.teaching import *\n", "import os\n", "\n", "init('-ignore_unrecognized_res -load_PDB_components false -ignore_zero_occupancy false @inputs/glycan_flags')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Creating a SymDef file\n", "\n", "Here, we will start with how to create a basic symdef file for cyrstal symmetry. Note that there are ways to do this without a symdef file, but these do not currently work for glycan structures, which we will be using here. \n", "\n", "The `make_symdef_file.pl` file is within Rosetta3. To use it, you will need to download and licence Rosetta3. The code is in the `Rosetta/main/src/apps/public` directory. In the interest of reducing code drift, this file is NOT included in the tutorial directory as we may then have version drift. \n", "\n", "If you have done this, we can use the following command to create the symdef file. Here, the radius of symmetrical partners is 12A, which is certainly fairly large, but produces a very well represented crystal." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cd inputs && make_symmdef_file.pl -r 12 -m CRYST -p inputs/1jnd.pdb.pdb > inputs/1jnd.pdb_crys.symm && cd -\n" ] } ], "source": [ "pdb = \"inputs/1jnd.pdb\"\n", "base_cmd = f'cd inputs && make_symmdef_file.pl -r 12 -m CRYST -p {pdb}.pdb > {pdb}_crys.symm && cd -'\n", "print(base_cmd)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use this base command and the `os.system(cmd)` function to run the code or use the provided symdef file. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "os.system('cp inputs/1jnd_crys.symm .')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take a look at the symmetrized structure in pymol (`inputs/1jnd_symm.pdb`). What would happen if we increased the radius to 24 instead of 12?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup a Symmetrized Pose\n", "\n", "Here, we will run a basic Rosetta protocol with symmetry. There are much more complicated things you can do with symmetry, but for now, we just want to symmetrically pack the protein. Please see the docs for more on symmetry. The full Rosetta C++ tutorial for symmetry is a great place to go from here: - https://www.rosettacommons.org/demos/latest/tutorials/Symmetry/Symmetry \n", "\n", "Lets first create a pose, and then use the `SetupForSymmetryMover` on the pose. Note this is an unrefined input structure. This is so that minmover will actually do something. A pareto-optimal refined structure can be found in the inputs as `1jnd_refined.pdb.gz`" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.import_pose.import_pose: \u001b[0mFile 'inputs/1jnd.pdb' automatically determined to be of type PDB\n", "\u001b[0mcore.io.pdb.pdb_reader: \u001b[0mParsing 82 .pdb records with unknown format to search for Rosetta-specific comments.\n", "\u001b[0mcore.io.util: \u001b[0mAutomatic glycan connection is activated.\n", "\u001b[0mcore.io.util: \u001b[0mStart reordering residues.\n", "\u001b[0mcore.io.util: \u001b[0mCorrected glycan residue order (internal numbering): [401, 402, 403, 404]\n", "\u001b[0mcore.io.util: \u001b[0m\n", "\u001b[0mcore.io.pose_from_sfr.PoseFromSFRBuilder: \u001b[0mSetting chain termination for 404\n", "\u001b[0mcore.io.pose_from_sfr.PoseFromSFRBuilder: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m Glc401 has an unfavorable ring conformation; the coordinates for this input structure may have been poorly assigned.\n", "\u001b[0mcore.io.pose_from_sfr.PoseFromSFRBuilder: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m Glc402 has an unfavorable ring conformation; the coordinates for this input structure may have been poorly assigned.\n", "\u001b[0mcore.io.pose_from_sfr.PoseFromSFRBuilder: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m Man403 has an unfavorable ring conformation; the coordinates for this input structure may have been poorly assigned.\n", "\u001b[0mcore.io.pose_from_sfr.PoseFromSFRBuilder: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m Man404 has an unfavorable ring conformation; the coordinates for this input structure may have been poorly assigned.\n", "\u001b[0mcore.chemical.AtomICoor: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m IcoorAtomID::atom_id(): Cannot get atom_id for POLYMER_LOWER of residue ->4)-beta-D-Glcp:2-AcNH 401. Returning BOGUS ID instead.\n", "\u001b[0mcore.conformation.Residue: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m missing an atom: 401 H1 that depends on a nonexistent polymer connection!\n", "\u001b[0mcore.conformation.Residue: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m --> generating it using idealized coordinates.\n", "\u001b[0mcore.chemical.AtomICoor: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m IcoorAtomID::atom_id(): Cannot get atom_id for POLYMER_LOWER of residue ->4)-beta-D-Glcp:2-AcNH 401. Returning BOGUS ID instead.\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mFound disulfide between residues 5 32\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mcurrent variant for 5 CYS\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mcurrent variant for 32 CYS\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mcurrent variant for 5 CYD\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mcurrent variant for 32 CYD\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mFound disulfide between residues 302 385\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mcurrent variant for 302 CYS\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mcurrent variant for 385 CYS\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mcurrent variant for 302 CYD\n", "\u001b[0mcore.conformation.Conformation: \u001b[0mcurrent variant for 385 CYD\n", "\u001b[0mcore.conformation.carbohydrates.GlycanTreeSet: \u001b[0mSetting up Glycan Trees\n", "\u001b[0mcore.conformation.carbohydrates.GlycanTreeSet: \u001b[0mFound 1 glycan trees.\n" ] } ], "source": [ "p = pose_from_pdb('inputs/1jnd.pdb')\n", "original = p.clone()" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "404" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p.total_residue()" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "pyrosetta.rosetta.core.conformation.Conformation" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(p.conformation())" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m Setting weight of master jump ( jump-id=1 ) to 1.0 (was undefined)\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m Setting jump_group JUMPGROUP1: [master 1] 6:0 7:0 2:0 3:0 4:0 5:0 8:0 9:0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m Setting weight of master jump ( jump-id=10 ) to 1.0 (was undefined)\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m Setting jump_group JUMPGROUP2: [master 10] 20:0 22:0 12:0 14:0 16:0 18:0 24:0 26:0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0msymmetry name: 1jnd_P_32_2_1\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mnumber of subunits: 9\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mnumber of interfaces: 1\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mscore subunit number: VRT_0_0_0_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0manchor the subunits at residue: 1\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_0_0_0_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: 1 0 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: 0 1 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 73.8756 49.0221 11.025\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_0_0_0_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: 1 0 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: 0 1 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 72.8756 48.0221 10.025\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_1_1_0_n1\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0.866025 -0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 26.9528 39.4671 -18.9707\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_1_1_0_n1_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0.866025 -0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 28.3188 39.1011 -19.9707\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_2_1_1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 -0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: 0.866025 -0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 58.6891 3.60826 41.0206\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_2_1_1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 -0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: 0.866025 -0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 58.3231 4.97428 40.0206\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_3_0_n1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: 0.866025 0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 58.6891 -3.60826 -11.025\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_3_0_n1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: 0.866025 0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 58.3231 -4.97428 -10.025\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_3_1_0_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: 0.866025 0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 111.862 88.4892 -11.025\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_3_1_0_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: 0.866025 0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 111.496 87.1232 -10.025\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_4_2_1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 -0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0.866025 0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 80.1253 52.6304 48.9664\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_4_2_1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 -0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0.866025 0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 81.4913 52.9964 49.9664\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_4_2_1_n1\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 -0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0.866025 0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 80.1253 52.6304 -41.0206\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_4_2_1_n1_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: -0.5 -0.866025 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0.866025 0.5 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 81.4913 52.9964 -40.0206\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_5_0_1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: 1 0 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0 -1 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 20.7031 43.0754 18.9707\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_5_0_1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: 1 0 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0 -1 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 19.7031 44.0754 19.9707\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_5_1_1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: 1 0 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0 -1 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 127.048 43.0754 18.9707\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0m Virtual coordinate system VRT_5_1_1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx: 1 0 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my: -0 -1 0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0morigin: 126.048 44.0754 19.9707\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mDof for jump: 1\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx 0:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my 0:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mz 0:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx_angle 1:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my_angle 1:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mz_angle 1:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mDof for jump: 10\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx 1:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my 1:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mz 1:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mx_angle 0:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0my_angle 0:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mz_angle 0:0,0:0,0 n2c\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_0_0_0_0_to_com VRT_0_0_0_0 VRT_0_0_0_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_0_0_0_0_to_subunit VRT_0_0_0_0_base SUBUNIT\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_1_1_0_n1 VRT_0_0_0_0 VRT_1_1_0_n1\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_1_1_0_n1_to_com VRT_1_1_0_n1 VRT_1_1_0_n1_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_1_1_0_n1_to_subunit VRT_1_1_0_n1_base SUBUNIT\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_2_1_1_0 VRT_0_0_0_0 VRT_2_1_1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_2_1_1_0_to_com VRT_2_1_1_0 VRT_2_1_1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_2_1_1_0_to_subunit VRT_2_1_1_0_base SUBUNIT\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_3_0_n1_0 VRT_0_0_0_0 VRT_3_0_n1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_3_0_n1_0_to_com VRT_3_0_n1_0 VRT_3_0_n1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_3_0_n1_0_to_subunit VRT_3_0_n1_0_base SUBUNIT\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_3_1_0_0 VRT_0_0_0_0 VRT_3_1_0_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_3_1_0_0_to_com VRT_3_1_0_0 VRT_3_1_0_0_base\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_3_1_0_0_to_subunit VRT_3_1_0_0_base SUBUNIT\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_4_2_1_0 VRT_0_0_0_0 VRT_4_2_1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_4_2_1_0_to_com VRT_4_2_1_0 VRT_4_2_1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_4_2_1_0_to_subunit VRT_4_2_1_0_base SUBUNIT\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_4_2_1_n1 VRT_0_0_0_0 VRT_4_2_1_n1\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_4_2_1_n1_to_com VRT_4_2_1_n1 VRT_4_2_1_n1_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_4_2_1_n1_to_subunit VRT_4_2_1_n1_base SUBUNIT\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_5_0_1_0 VRT_0_0_0_0 VRT_5_0_1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_5_0_1_0_to_com VRT_5_0_1_0 VRT_5_0_1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_5_0_1_0_to_subunit VRT_5_0_1_0_base SUBUNIT\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_5_1_1_0 VRT_0_0_0_0 VRT_5_1_1_0\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_5_1_1_0_to_com VRT_5_1_1_0 VRT_5_1_1_0_base\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mJump JUMP_5_1_1_0_to_subunit VRT_5_1_1_0_base SUBUNIT\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mInclude subunit:\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mOutput subunit:\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mSlideType: RANDOM\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mSlideCriteriaType: CEN_DOCK_SCORE\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mSlideCriteriaVal: AUTOMATIC\n", "\u001b[0mcore.conformation.symmetry.SymmData: \u001b[0mSlideOrder: none\n", "\u001b[0mcore.conformation.symmetry.util: \u001b[0m=================== SYM FOLD TREE, jump notation: =symfixed= *indep* #symdof# jump[=follows] ========================\n", "VRT_0_0_0_0(3637)\n", "|----#j10#--->VRT_0_0_0_0_base(3638)----#j1#------>1:Sub1A(1-400)\n", "|----=j11=--->VRT_1_1_0_n1(3643)---j12=10--->VRT_1_1_0_n1_base(3644)----j2=1---->1213:Sub4A(1213-1612)\n", "|----=j13=--->VRT_2_1_1_0(3645)---j14=10--->VRT_2_1_1_0_base(3646)----j3=1---->1617:Sub5A(1617-2016)\n", "|----=j15=--->VRT_3_0_n1_0(3647)---j16=10--->VRT_3_0_n1_0_base(3648)----j4=1---->2021:Sub6A(2021-2420)\n", "|----=j17=--->VRT_3_1_0_0(3649)---j18=10--->VRT_3_1_0_0_base(3650)----j5=1---->2425:Sub7A(2425-2824)\n", "|----=j19=--->VRT_4_2_1_0(3639)---j20=10--->VRT_4_2_1_0_base(3640)----j6=1---->405:Sub2A(405-804)\n", "|----=j21=--->VRT_4_2_1_n1(3641)---j22=10--->VRT_4_2_1_n1_base(3642)----j7=1---->809:Sub3A(809-1208)\n", "|----=j23=--->VRT_5_0_1_0(3651)---j24=10--->VRT_5_0_1_0_base(3652)----j8=1---->2829:Sub8A(2829-3228)\n", "\\----=j25=--->VRT_5_1_1_0(3653)---j26=10--->VRT_5_1_1_0_base(3654)----j9=1---->3233:Sub9A(3233-3632)\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mFound disulfide between residues 5 32\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 5 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 32 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 5 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 32 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 409 to 436\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 813 to 840\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1217 to 1244\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1621 to 1648\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2025 to 2052\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2429 to 2456\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2833 to 2860\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 3237 to 3264\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 5 to 32\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mFound disulfide between residues 302 385\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 302 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 385 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 302 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 385 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 706 to 789\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1110 to 1193\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1514 to 1597\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1918 to 2001\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2322 to 2405\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2726 to 2809\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 3130 to 3213\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 3534 to 3617\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 302 to 385\n", "\u001b[0mcore.conformation.carbohydrates.GlycanTreeSet: \u001b[0mSetting up Glycan Trees\n", "\u001b[0mcore.conformation.carbohydrates.GlycanTreeSet: \u001b[0mFound 9 glycan trees.\n", "\u001b[0mprotocols.simple_moves_symmetry.SymDockingInitialPerturbation: \u001b[0mReading options...\n" ] } ], "source": [ "symmetrize = rosetta.protocols.symmetry.SetupForSymmetryMover(\"1jnd_crys.symm\")\n", "symmetrize.apply(p)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3654\n", "\n" ] } ], "source": [ "print(p.total_residue())\n", "print(type(p.conformation()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How many symmetric copies do we have in our pose?\n", "How do the scores compare for our original pose and our symmetrized version?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now lets use some of the functionality to understand how this all works. We can use the `SymetricInfo` object that is part of the `SymmetricConformation` to get at some info. Lets take a look at all residues and find the assymetric unit residues and equivalent residues for the rest." ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "AssymUnit? equivalent_res\n", "1 True 0\n", "2 True 0\n", "3 True 0\n", "4 True 0\n", "5 True 0\n", "6 True 0\n", "7 True 0\n", "8 True 0\n", "9 True 0\n", "10 True 0\n", "11 True 0\n", "12 True 0\n", "13 True 0\n", "14 True 0\n", "15 True 0\n", "16 True 0\n", "17 True 0\n", "18 True 0\n", "19 True 0\n", "20 True 0\n", "21 True 0\n", "22 True 0\n", "23 True 0\n", "24 True 0\n", "25 True 0\n", "26 True 0\n", "27 True 0\n", "28 True 0\n", "29 True 0\n", "30 True 0\n", "31 True 0\n", "32 True 0\n", "33 True 0\n", "34 True 0\n", "35 True 0\n", "36 True 0\n", "37 True 0\n", "38 True 0\n", "39 True 0\n", "40 True 0\n", "41 True 0\n", "42 True 0\n", "43 True 0\n", "44 True 0\n", "45 True 0\n", "46 True 0\n", "47 True 0\n", "48 True 0\n", "49 True 0\n", "50 True 0\n", "51 True 0\n", "52 True 0\n", "53 True 0\n", "54 True 0\n", "55 True 0\n", "56 True 0\n", "57 True 0\n", "58 True 0\n", "59 True 0\n", "60 True 0\n", "61 True 0\n", "62 True 0\n", "63 True 0\n", "64 True 0\n", "65 True 0\n", "66 True 0\n", "67 True 0\n", "68 True 0\n", "69 True 0\n", "70 True 0\n", "71 True 0\n", "72 True 0\n", "73 True 0\n", "74 True 0\n", "75 True 0\n", "76 True 0\n", "77 True 0\n", "78 True 0\n", "79 True 0\n", "80 True 0\n", "81 True 0\n", "82 True 0\n", "83 True 0\n", "84 True 0\n", "85 True 0\n", "86 True 0\n", "87 True 0\n", "88 True 0\n", "89 True 0\n", "90 True 0\n", "91 True 0\n", "92 True 0\n", "93 True 0\n", "94 True 0\n", "95 True 0\n", "96 True 0\n", "97 True 0\n", "98 True 0\n", "99 True 0\n", "100 True 0\n", "101 True 0\n", "102 True 0\n", "103 True 0\n", "104 True 0\n", "105 True 0\n", "106 True 0\n", "107 True 0\n", "108 True 0\n", "109 True 0\n", "110 True 0\n", "111 True 0\n", "112 True 0\n", "113 True 0\n", "114 True 0\n", "115 True 0\n", "116 True 0\n", "117 True 0\n", "118 True 0\n", "119 True 0\n", "120 True 0\n", "121 True 0\n", "122 True 0\n", "123 True 0\n", "124 True 0\n", "125 True 0\n", "126 True 0\n", "127 True 0\n", "128 True 0\n", "129 True 0\n", "130 True 0\n", "131 True 0\n", "132 True 0\n", "133 True 0\n", "134 True 0\n", "135 True 0\n", "136 True 0\n", "137 True 0\n", "138 True 0\n", "139 True 0\n", "140 True 0\n", "141 True 0\n", "142 True 0\n", "143 True 0\n", "144 True 0\n", "145 True 0\n", "146 True 0\n", "147 True 0\n", "148 True 0\n", "149 True 0\n", "150 True 0\n", "151 True 0\n", "152 True 0\n", "153 True 0\n", "154 True 0\n", "155 True 0\n", "156 True 0\n", "157 True 0\n", "158 True 0\n", "159 True 0\n", "160 True 0\n", "161 True 0\n", "162 True 0\n", "163 True 0\n", "164 True 0\n", "165 True 0\n", "166 True 0\n", "167 True 0\n", "168 True 0\n", "169 True 0\n", "170 True 0\n", "171 True 0\n", "172 True 0\n", "173 True 0\n", "174 True 0\n", "175 True 0\n", "176 True 0\n", "177 True 0\n", "178 True 0\n", "179 True 0\n", "180 True 0\n", "181 True 0\n", "182 True 0\n", "183 True 0\n", "184 True 0\n", "185 True 0\n", "186 True 0\n", "187 True 0\n", "188 True 0\n", "189 True 0\n", "190 True 0\n", "191 True 0\n", "192 True 0\n", "193 True 0\n", "194 True 0\n", "195 True 0\n", "196 True 0\n", "197 True 0\n", "198 True 0\n", "199 True 0\n", "200 True 0\n", "201 True 0\n", "202 True 0\n", "203 True 0\n", "204 True 0\n", "205 True 0\n", "206 True 0\n", "207 True 0\n", "208 True 0\n", "209 True 0\n", "210 True 0\n", "211 True 0\n", "212 True 0\n", "213 True 0\n", "214 True 0\n", "215 True 0\n", "216 True 0\n", "217 True 0\n", "218 True 0\n", "219 True 0\n", "220 True 0\n", "221 True 0\n", "222 True 0\n", "223 True 0\n", "224 True 0\n", "225 True 0\n", "226 True 0\n", "227 True 0\n", "228 True 0\n", "229 True 0\n", "230 True 0\n", "231 True 0\n", "232 True 0\n", "233 True 0\n", "234 True 0\n", "235 True 0\n", "236 True 0\n", "237 True 0\n", "238 True 0\n", "239 True 0\n", "240 True 0\n", "241 True 0\n", "242 True 0\n", "243 True 0\n", "244 True 0\n", "245 True 0\n", "246 True 0\n", "247 True 0\n", "248 True 0\n", "249 True 0\n", "250 True 0\n", "251 True 0\n", "252 True 0\n", "253 True 0\n", "254 True 0\n", "255 True 0\n", "256 True 0\n", "257 True 0\n", "258 True 0\n", "259 True 0\n", "260 True 0\n", "261 True 0\n", "262 True 0\n", "263 True 0\n", "264 True 0\n", "265 True 0\n", "266 True 0\n", "267 True 0\n", "268 True 0\n", "269 True 0\n", "270 True 0\n", "271 True 0\n", "272 True 0\n", "273 True 0\n", "274 True 0\n", "275 True 0\n", "276 True 0\n", "277 True 0\n", "278 True 0\n", "279 True 0\n", "280 True 0\n", "281 True 0\n", "282 True 0\n", "283 True 0\n", "284 True 0\n", "285 True 0\n", "286 True 0\n", "287 True 0\n", "288 True 0\n", "289 True 0\n", "290 True 0\n", "291 True 0\n", "292 True 0\n", "293 True 0\n", "294 True 0\n", "295 True 0\n", "296 True 0\n", "297 True 0\n", "298 True 0\n", "299 True 0\n", "300 True 0\n", "301 True 0\n", "302 True 0\n", "303 True 0\n", "304 True 0\n", "305 True 0\n", "306 True 0\n", "307 True 0\n", "308 True 0\n", "309 True 0\n", "310 True 0\n", "311 True 0\n", "312 True 0\n", "313 True 0\n", "314 True 0\n", "315 True 0\n", "316 True 0\n", "317 True 0\n", "318 True 0\n", "319 True 0\n", "320 True 0\n", "321 True 0\n", "322 True 0\n", "323 True 0\n", "324 True 0\n", "325 True 0\n", "326 True 0\n", "327 True 0\n", "328 True 0\n", "329 True 0\n", "330 True 0\n", "331 True 0\n", "332 True 0\n", "333 True 0\n", "334 True 0\n", "335 True 0\n", "336 True 0\n", "337 True 0\n", "338 True 0\n", "339 True 0\n", "340 True 0\n", "341 True 0\n", "342 True 0\n", "343 True 0\n", "344 True 0\n", "345 True 0\n", "346 True 0\n", "347 True 0\n", "348 True 0\n", "349 True 0\n", "350 True 0\n", "351 True 0\n", "352 True 0\n", "353 True 0\n", "354 True 0\n", "355 True 0\n", "356 True 0\n", "357 True 0\n", "358 True 0\n", "359 True 0\n", "360 True 0\n", "361 True 0\n", "362 True 0\n", "363 True 0\n", "364 True 0\n", "365 True 0\n", "366 True 0\n", "367 True 0\n", "368 True 0\n", "369 True 0\n", "370 True 0\n", "371 True 0\n", "372 True 0\n", "373 True 0\n", "374 True 0\n", "375 True 0\n", "376 True 0\n", "377 True 0\n", "378 True 0\n", "379 True 0\n", "380 True 0\n", "381 True 0\n", "382 True 0\n", "383 True 0\n", "384 True 0\n", "385 True 0\n", "386 True 0\n", "387 True 0\n", "388 True 0\n", "389 True 0\n", "390 True 0\n", "391 True 0\n", "392 True 0\n", "393 True 0\n", "394 True 0\n", "395 True 0\n", "396 True 0\n", "397 True 0\n", "398 True 0\n", "399 True 0\n", "400 True 0\n", "401 True 0\n", "402 True 0\n", "403 True 0\n", "404 True 0\n", "405 False 1\n", "406 False 2\n", "407 False 3\n", "408 False 4\n", "409 False 5\n", "410 False 6\n", "411 False 7\n", "412 False 8\n", "413 False 9\n", "414 False 10\n", "415 False 11\n", "416 False 12\n", "417 False 13\n", "418 False 14\n", "419 False 15\n", "420 False 16\n", "421 False 17\n", "422 False 18\n", "423 False 19\n", "424 False 20\n", "425 False 21\n", "426 False 22\n", "427 False 23\n", "428 False 24\n", "429 False 25\n", "430 False 26\n", "431 False 27\n", "432 False 28\n", "433 False 29\n", "434 False 30\n", "435 False 31\n", "436 False 32\n", "437 False 33\n", "438 False 34\n", "439 False 35\n", "440 False 36\n", "441 False 37\n", "442 False 38\n", "443 False 39\n", "444 False 40\n", "445 False 41\n", "446 False 42\n", "447 False 43\n", "448 False 44\n", "449 False 45\n", "450 False 46\n", "451 False 47\n", "452 False 48\n", "453 False 49\n", "454 False 50\n", "455 False 51\n", "456 False 52\n", "457 False 53\n", "458 False 54\n", "459 False 55\n", "460 False 56\n", "461 False 57\n", "462 False 58\n", "463 False 59\n", "464 False 60\n", "465 False 61\n", "466 False 62\n", "467 False 63\n", "468 False 64\n", "469 False 65\n", "470 False 66\n", "471 False 67\n", "472 False 68\n", "473 False 69\n", "474 False 70\n", "475 False 71\n", "476 False 72\n", "477 False 73\n", "478 False 74\n", "479 False 75\n", "480 False 76\n", "481 False 77\n", "482 False 78\n", "483 False 79\n", "484 False 80\n", "485 False 81\n", "486 False 82\n", "487 False 83\n", "488 False 84\n", "489 False 85\n", "490 False 86\n", "491 False 87\n", "492 False 88\n", "493 False 89\n", "494 False 90\n", "495 False 91\n", "496 False 92\n", "497 False 93\n", "498 False 94\n", "499 False 95\n", "500 False 96\n", "501 False 97\n", "502 False 98\n", "503 False 99\n", "504 False 100\n", "505 False 101\n", "506 False 102\n", "507 False 103\n", "508 False 104\n", "509 False 105\n", "510 False 106\n", "511 False 107\n", "512 False 108\n", "513 False 109\n", "514 False 110\n", "515 False 111\n", "516 False 112\n", "517 False 113\n", "518 False 114\n", "519 False 115\n", "520 False 116\n", "521 False 117\n", "522 False 118\n", "523 False 119\n", "524 False 120\n", "525 False 121\n", "526 False 122\n", "527 False 123\n", "528 False 124\n", "529 False 125\n", "530 False 126\n", "531 False 127\n", "532 False 128\n", "533 False 129\n", "534 False 130\n", "535 False 131\n", "536 False 132\n", "537 False 133\n", "538 False 134\n", "539 False 135\n", "540 False 136\n", "541 False 137\n", "542 False 138\n", "543 False 139\n", "544 False 140\n", "545 False 141\n", "546 False 142\n", "547 False 143\n", "548 False 144\n", "549 False 145\n", "550 False 146\n", "551 False 147\n", "552 False 148\n", "553 False 149\n", "554 False 150\n", "555 False 151\n", "556 False 152\n", "557 False 153\n", "558 False 154\n", "559 False 155\n", "560 False 156\n", "561 False 157\n", "562 False 158\n", "563 False 159\n", "564 False 160\n", "565 False 161\n", "566 False 162\n", "567 False 163\n", "568 False 164\n", "569 False 165\n", "570 False 166\n", "571 False 167\n", "572 False 168\n", "573 False 169\n", "574 False 170\n", "575 False 171\n", "576 False 172\n", "577 False 173\n", "578 False 174\n", "579 False 175\n", "580 False 176\n", "581 False 177\n", "582 False 178\n", "583 False 179\n", "584 False 180\n", "585 False 181\n", "586 False 182\n", "587 False 183\n", "588 False 184\n", "589 False 185\n", "590 False 186\n", "591 False 187\n", "592 False 188\n", "593 False 189\n", "594 False 190\n", "595 False 191\n", "596 False 192\n", "597 False 193\n", "598 False 194\n", "599 False 195\n", "600 False 196\n", "601 False 197\n", "602 False 198\n", "603 False 199\n", "604 False 200\n", "605 False 201\n", "606 False 202\n", "607 False 203\n", "608 False 204\n", "609 False 205\n", "610 False 206\n", "611 False 207\n", "612 False 208\n", "613 False 209\n", "614 False 210\n", "615 False 211\n", "616 False 212\n", "617 False 213\n", "618 False 214\n", "619 False 215\n", "620 False 216\n", "621 False 217\n", "622 False 218\n", "623 False 219\n", "624 False 220\n", "625 False 221\n", "626 False 222\n", "627 False 223\n", "628 False 224\n", "629 False 225\n", "630 False 226\n", "631 False 227\n", "632 False 228\n", "633 False 229\n", "634 False 230\n", "635 False 231\n", "636 False 232\n", "637 False 233\n", "638 False 234\n", "639 False 235\n", "640 False 236\n", "641 False 237\n", "642 False 238\n", "643 False 239\n", "644 False 240\n", "645 False 241\n", "646 False 242\n", "647 False 243\n", "648 False 244\n", "649 False 245\n", "650 False 246\n", "651 False 247\n", "652 False 248\n", "653 False 249\n", "654 False 250\n", "655 False 251\n", "656 False 252\n", "657 False 253\n", "658 False 254\n", "659 False 255\n", "660 False 256\n", "661 False 257\n", "662 False 258\n", "663 False 259\n", "664 False 260\n", "665 False 261\n", "666 False 262\n", "667 False 263\n", "668 False 264\n", "669 False 265\n", "670 False 266\n", "671 False 267\n", "672 False 268\n", "673 False 269\n", "674 False 270\n", "675 False 271\n", "676 False 272\n", "677 False 273\n", "678 False 274\n", "679 False 275\n", "680 False 276\n", "681 False 277\n", "682 False 278\n", "683 False 279\n", "684 False 280\n", "685 False 281\n", "686 False 282\n", "687 False 283\n", "688 False 284\n", "689 False 285\n", "690 False 286\n", "691 False 287\n", "692 False 288\n", "693 False 289\n", "694 False 290\n", "695 False 291\n", "696 False 292\n", "697 False 293\n", "698 False 294\n", "699 False 295\n", "700 False 296\n", "701 False 297\n", "702 False 298\n", "703 False 299\n", "704 False 300\n", "705 False 301\n", "706 False 302\n", "707 False 303\n", "708 False 304\n", "709 False 305\n", "710 False 306\n", "711 False 307\n", "712 False 308\n", "713 False 309\n", "714 False 310\n", "715 False 311\n", "716 False 312\n", "717 False 313\n", "718 False 314\n", "719 False 315\n", "720 False 316\n", "721 False 317\n", "722 False 318\n", "723 False 319\n", "724 False 320\n", "725 False 321\n", "726 False 322\n", "727 False 323\n", "728 False 324\n", "729 False 325\n", "730 False 326\n", "731 False 327\n", "732 False 328\n", "733 False 329\n", "734 False 330\n", "735 False 331\n", "736 False 332\n", "737 False 333\n", "738 False 334\n", "739 False 335\n", "740 False 336\n", "741 False 337\n", "742 False 338\n", "743 False 339\n", "744 False 340\n", "745 False 341\n", "746 False 342\n", "747 False 343\n", "748 False 344\n", "749 False 345\n", "750 False 346\n", "751 False 347\n", "752 False 348\n", "753 False 349\n", "754 False 350\n", "755 False 351\n", "756 False 352\n", "757 False 353\n", "758 False 354\n", "759 False 355\n", "760 False 356\n", "761 False 357\n", "762 False 358\n", "763 False 359\n", "764 False 360\n", "765 False 361\n", "766 False 362\n", "767 False 363\n", "768 False 364\n", "769 False 365\n", "770 False 366\n", "771 False 367\n", "772 False 368\n", "773 False 369\n", "774 False 370\n", "775 False 371\n", "776 False 372\n", "777 False 373\n", "778 False 374\n", "779 False 375\n", "780 False 376\n", "781 False 377\n", "782 False 378\n", "783 False 379\n", "784 False 380\n", "785 False 381\n", "786 False 382\n", "787 False 383\n", "788 False 384\n", "789 False 385\n", "790 False 386\n", "791 False 387\n", "792 False 388\n", "793 False 389\n", "794 False 390\n", "795 False 391\n", "796 False 392\n", "797 False 393\n", "798 False 394\n", "799 False 395\n", "800 False 396\n", "801 False 397\n", "802 False 398\n", "803 False 399\n", "804 False 400\n", "805 False 401\n", "806 False 402\n", "807 False 403\n", "808 False 404\n", "809 False 1\n", "810 False 2\n", "811 False 3\n", "812 False 4\n", "813 False 5\n", "814 False 6\n", "815 False 7\n", "816 False 8\n", "817 False 9\n", "818 False 10\n", "819 False 11\n", "820 False 12\n", "821 False 13\n", "822 False 14\n", "823 False 15\n", "824 False 16\n", "825 False 17\n", "826 False 18\n", "827 False 19\n", "828 False 20\n", "829 False 21\n", "830 False 22\n", "831 False 23\n", "832 False 24\n", "833 False 25\n", "834 False 26\n", "835 False 27\n", "836 False 28\n", "837 False 29\n", "838 False 30\n", "839 False 31\n", "840 False 32\n", "841 False 33\n", "842 False 34\n", "843 False 35\n", "844 False 36\n", "845 False 37\n", "846 False 38\n", "847 False 39\n", "848 False 40\n", "849 False 41\n", "850 False 42\n", "851 False 43\n", "852 False 44\n", "853 False 45\n", "854 False 46\n", "855 False 47\n", "856 False 48\n", "857 False 49\n", "858 False 50\n", "859 False 51\n", "860 False 52\n", "861 False 53\n", "862 False 54\n", "863 False 55\n", "864 False 56\n", "865 False 57\n", "866 False 58\n", "867 False 59\n", "868 False 60\n", "869 False 61\n", "870 False 62\n", "871 False 63\n", "872 False 64\n", "873 False 65\n", "874 False 66\n", "875 False 67\n", "876 False 68\n", "877 False 69\n", "878 False 70\n", "879 False 71\n", "880 False 72\n", "881 False 73\n", "882 False 74\n", "883 False 75\n", "884 False 76\n", "885 False 77\n", "886 False 78\n", "887 False 79\n", "888 False 80\n", "889 False 81\n", "890 False 82\n", "891 False 83\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "892 False 84\n", "893 False 85\n", "894 False 86\n", "895 False 87\n", "896 False 88\n", "897 False 89\n", "898 False 90\n", "899 False 91\n", "900 False 92\n", "901 False 93\n", "902 False 94\n", "903 False 95\n", "904 False 96\n", "905 False 97\n", "906 False 98\n", "907 False 99\n", "908 False 100\n", "909 False 101\n", "910 False 102\n", "911 False 103\n", "912 False 104\n", "913 False 105\n", "914 False 106\n", "915 False 107\n", "916 False 108\n", "917 False 109\n", "918 False 110\n", "919 False 111\n", "920 False 112\n", "921 False 113\n", "922 False 114\n", "923 False 115\n", "924 False 116\n", "925 False 117\n", "926 False 118\n", "927 False 119\n", "928 False 120\n", "929 False 121\n", "930 False 122\n", "931 False 123\n", "932 False 124\n", "933 False 125\n", "934 False 126\n", "935 False 127\n", "936 False 128\n", "937 False 129\n", "938 False 130\n", "939 False 131\n", "940 False 132\n", "941 False 133\n", "942 False 134\n", "943 False 135\n", "944 False 136\n", "945 False 137\n", "946 False 138\n", "947 False 139\n", "948 False 140\n", "949 False 141\n", "950 False 142\n", "951 False 143\n", "952 False 144\n", "953 False 145\n", "954 False 146\n", "955 False 147\n", "956 False 148\n", "957 False 149\n", "958 False 150\n", "959 False 151\n", "960 False 152\n", "961 False 153\n", "962 False 154\n", "963 False 155\n", "964 False 156\n", "965 False 157\n", "966 False 158\n", "967 False 159\n", "968 False 160\n", "969 False 161\n", "970 False 162\n", "971 False 163\n", "972 False 164\n", "973 False 165\n", "974 False 166\n", "975 False 167\n", "976 False 168\n", "977 False 169\n", "978 False 170\n", "979 False 171\n", "980 False 172\n", "981 False 173\n", "982 False 174\n", "983 False 175\n", "984 False 176\n", "985 False 177\n", "986 False 178\n", "987 False 179\n", "988 False 180\n", "989 False 181\n", "990 False 182\n", "991 False 183\n", "992 False 184\n", "993 False 185\n", "994 False 186\n", "995 False 187\n", "996 False 188\n", "997 False 189\n", "998 False 190\n", "999 False 191\n", "1000 False 192\n", "1001 False 193\n", "1002 False 194\n", "1003 False 195\n", "1004 False 196\n", "1005 False 197\n", "1006 False 198\n", "1007 False 199\n", "1008 False 200\n", "1009 False 201\n", "1010 False 202\n", "1011 False 203\n", "1012 False 204\n", "1013 False 205\n", "1014 False 206\n", "1015 False 207\n", "1016 False 208\n", "1017 False 209\n", "1018 False 210\n", "1019 False 211\n", "1020 False 212\n", "1021 False 213\n", "1022 False 214\n", "1023 False 215\n", "1024 False 216\n", "1025 False 217\n", "1026 False 218\n", "1027 False 219\n", "1028 False 220\n", "1029 False 221\n", "1030 False 222\n", "1031 False 223\n", "1032 False 224\n", "1033 False 225\n", "1034 False 226\n", "1035 False 227\n", "1036 False 228\n", "1037 False 229\n", "1038 False 230\n", "1039 False 231\n", "1040 False 232\n", "1041 False 233\n", "1042 False 234\n", "1043 False 235\n", "1044 False 236\n", "1045 False 237\n", "1046 False 238\n", "1047 False 239\n", "1048 False 240\n", "1049 False 241\n", "1050 False 242\n", "1051 False 243\n", "1052 False 244\n", "1053 False 245\n", "1054 False 246\n", "1055 False 247\n", "1056 False 248\n", "1057 False 249\n", "1058 False 250\n", "1059 False 251\n", "1060 False 252\n", "1061 False 253\n", "1062 False 254\n", "1063 False 255\n", "1064 False 256\n", "1065 False 257\n", "1066 False 258\n", "1067 False 259\n", "1068 False 260\n", "1069 False 261\n", "1070 False 262\n", "1071 False 263\n", "1072 False 264\n", "1073 False 265\n", "1074 False 266\n", "1075 False 267\n", "1076 False 268\n", "1077 False 269\n", "1078 False 270\n", "1079 False 271\n", "1080 False 272\n", "1081 False 273\n", "1082 False 274\n", "1083 False 275\n", "1084 False 276\n", "1085 False 277\n", "1086 False 278\n", "1087 False 279\n", "1088 False 280\n", "1089 False 281\n", "1090 False 282\n", "1091 False 283\n", "1092 False 284\n", "1093 False 285\n", "1094 False 286\n", "1095 False 287\n", "1096 False 288\n", "1097 False 289\n", "1098 False 290\n", "1099 False 291\n", "1100 False 292\n", "1101 False 293\n", "1102 False 294\n", "1103 False 295\n", "1104 False 296\n", "1105 False 297\n", "1106 False 298\n", "1107 False 299\n", "1108 False 300\n", "1109 False 301\n", "1110 False 302\n", "1111 False 303\n", "1112 False 304\n", "1113 False 305\n", "1114 False 306\n", "1115 False 307\n", "1116 False 308\n", "1117 False 309\n", "1118 False 310\n", "1119 False 311\n", "1120 False 312\n", "1121 False 313\n", "1122 False 314\n", "1123 False 315\n", "1124 False 316\n", "1125 False 317\n", "1126 False 318\n", "1127 False 319\n", "1128 False 320\n", "1129 False 321\n", "1130 False 322\n", "1131 False 323\n", "1132 False 324\n", "1133 False 325\n", "1134 False 326\n", "1135 False 327\n", "1136 False 328\n", "1137 False 329\n", "1138 False 330\n", "1139 False 331\n", "1140 False 332\n", "1141 False 333\n", "1142 False 334\n", "1143 False 335\n", "1144 False 336\n", "1145 False 337\n", "1146 False 338\n", "1147 False 339\n", "1148 False 340\n", "1149 False 341\n", "1150 False 342\n", "1151 False 343\n", "1152 False 344\n", "1153 False 345\n", "1154 False 346\n", "1155 False 347\n", "1156 False 348\n", "1157 False 349\n", "1158 False 350\n", "1159 False 351\n", "1160 False 352\n", "1161 False 353\n", "1162 False 354\n", "1163 False 355\n", "1164 False 356\n", "1165 False 357\n", "1166 False 358\n", "1167 False 359\n", "1168 False 360\n", "1169 False 361\n", "1170 False 362\n", "1171 False 363\n", "1172 False 364\n", "1173 False 365\n", "1174 False 366\n", "1175 False 367\n", "1176 False 368\n", "1177 False 369\n", "1178 False 370\n", "1179 False 371\n", "1180 False 372\n", "1181 False 373\n", "1182 False 374\n", "1183 False 375\n", "1184 False 376\n", "1185 False 377\n", "1186 False 378\n", "1187 False 379\n", "1188 False 380\n", "1189 False 381\n", "1190 False 382\n", "1191 False 383\n", "1192 False 384\n", "1193 False 385\n", "1194 False 386\n", "1195 False 387\n", "1196 False 388\n", "1197 False 389\n", "1198 False 390\n", "1199 False 391\n", "1200 False 392\n", "1201 False 393\n", "1202 False 394\n", "1203 False 395\n", "1204 False 396\n", "1205 False 397\n", "1206 False 398\n", "1207 False 399\n", "1208 False 400\n", "1209 False 401\n", "1210 False 402\n", "1211 False 403\n", "1212 False 404\n", "1213 False 1\n", "1214 False 2\n", "1215 False 3\n", "1216 False 4\n", "1217 False 5\n", "1218 False 6\n", "1219 False 7\n", "1220 False 8\n", "1221 False 9\n", "1222 False 10\n", "1223 False 11\n", "1224 False 12\n", "1225 False 13\n", "1226 False 14\n", "1227 False 15\n", "1228 False 16\n", "1229 False 17\n", "1230 False 18\n", "1231 False 19\n", "1232 False 20\n", "1233 False 21\n", "1234 False 22\n", "1235 False 23\n", "1236 False 24\n", "1237 False 25\n", "1238 False 26\n", "1239 False 27\n", "1240 False 28\n", "1241 False 29\n", "1242 False 30\n", "1243 False 31\n", "1244 False 32\n", "1245 False 33\n", "1246 False 34\n", "1247 False 35\n", "1248 False 36\n", "1249 False 37\n", "1250 False 38\n", "1251 False 39\n", "1252 False 40\n", "1253 False 41\n", "1254 False 42\n", "1255 False 43\n", "1256 False 44\n", "1257 False 45\n", "1258 False 46\n", "1259 False 47\n", "1260 False 48\n", "1261 False 49\n", "1262 False 50\n", "1263 False 51\n", "1264 False 52\n", "1265 False 53\n", "1266 False 54\n", "1267 False 55\n", "1268 False 56\n", "1269 False 57\n", "1270 False 58\n", "1271 False 59\n", "1272 False 60\n", "1273 False 61\n", "1274 False 62\n", "1275 False 63\n", "1276 False 64\n", "1277 False 65\n", "1278 False 66\n", "1279 False 67\n", "1280 False 68\n", "1281 False 69\n", "1282 False 70\n", "1283 False 71\n", "1284 False 72\n", "1285 False 73\n", "1286 False 74\n", "1287 False 75\n", "1288 False 76\n", "1289 False 77\n", "1290 False 78\n", "1291 False 79\n", "1292 False 80\n", "1293 False 81\n", "1294 False 82\n", "1295 False 83\n", "1296 False 84\n", "1297 False 85\n", "1298 False 86\n", "1299 False 87\n", "1300 False 88\n", "1301 False 89\n", "1302 False 90\n", "1303 False 91\n", "1304 False 92\n", "1305 False 93\n", "1306 False 94\n", "1307 False 95\n", "1308 False 96\n", "1309 False 97\n", "1310 False 98\n", "1311 False 99\n", "1312 False 100\n", "1313 False 101\n", "1314 False 102\n", "1315 False 103\n", "1316 False 104\n", "1317 False 105\n", "1318 False 106\n", "1319 False 107\n", "1320 False 108\n", "1321 False 109\n", "1322 False 110\n", "1323 False 111\n", "1324 False 112\n", "1325 False 113\n", "1326 False 114\n", "1327 False 115\n", "1328 False 116\n", "1329 False 117\n", "1330 False 118\n", "1331 False 119\n", "1332 False 120\n", "1333 False 121\n", "1334 False 122\n", "1335 False 123\n", "1336 False 124\n", "1337 False 125\n", "1338 False 126\n", "1339 False 127\n", "1340 False 128\n", "1341 False 129\n", "1342 False 130\n", "1343 False 131\n", "1344 False 132\n", "1345 False 133\n", "1346 False 134\n", "1347 False 135\n", "1348 False 136\n", "1349 False 137\n", "1350 False 138\n", "1351 False 139\n", "1352 False 140\n", "1353 False 141\n", "1354 False 142\n", "1355 False 143\n", "1356 False 144\n", "1357 False 145\n", "1358 False 146\n", "1359 False 147\n", "1360 False 148\n", "1361 False 149\n", "1362 False 150\n", "1363 False 151\n", "1364 False 152\n", "1365 False 153\n", "1366 False 154\n", "1367 False 155\n", "1368 False 156\n", "1369 False 157\n", "1370 False 158\n", "1371 False 159\n", "1372 False 160\n", "1373 False 161\n", "1374 False 162\n", "1375 False 163\n", "1376 False 164\n", "1377 False 165\n", "1378 False 166\n", "1379 False 167\n", "1380 False 168\n", "1381 False 169\n", "1382 False 170\n", "1383 False 171\n", "1384 False 172\n", "1385 False 173\n", "1386 False 174\n", "1387 False 175\n", "1388 False 176\n", "1389 False 177\n", "1390 False 178\n", "1391 False 179\n", "1392 False 180\n", "1393 False 181\n", "1394 False 182\n", "1395 False 183\n", "1396 False 184\n", "1397 False 185\n", "1398 False 186\n", "1399 False 187\n", "1400 False 188\n", "1401 False 189\n", "1402 False 190\n", "1403 False 191\n", "1404 False 192\n", "1405 False 193\n", "1406 False 194\n", "1407 False 195\n", "1408 False 196\n", "1409 False 197\n", "1410 False 198\n", "1411 False 199\n", "1412 False 200\n", "1413 False 201\n", "1414 False 202\n", "1415 False 203\n", "1416 False 204\n", "1417 False 205\n", "1418 False 206\n", "1419 False 207\n", "1420 False 208\n", "1421 False 209\n", "1422 False 210\n", "1423 False 211\n", "1424 False 212\n", "1425 False 213\n", "1426 False 214\n", "1427 False 215\n", "1428 False 216\n", "1429 False 217\n", "1430 False 218\n", "1431 False 219\n", "1432 False 220\n", "1433 False 221\n", "1434 False 222\n", "1435 False 223\n", "1436 False 224\n", "1437 False 225\n", "1438 False 226\n", "1439 False 227\n", "1440 False 228\n", "1441 False 229\n", "1442 False 230\n", "1443 False 231\n", "1444 False 232\n", "1445 False 233\n", "1446 False 234\n", "1447 False 235\n", "1448 False 236\n", "1449 False 237\n", "1450 False 238\n", "1451 False 239\n", "1452 False 240\n", "1453 False 241\n", "1454 False 242\n", "1455 False 243\n", "1456 False 244\n", "1457 False 245\n", "1458 False 246\n", "1459 False 247\n", "1460 False 248\n", "1461 False 249\n", "1462 False 250\n", "1463 False 251\n", "1464 False 252\n", "1465 False 253\n", "1466 False 254\n", "1467 False 255\n", "1468 False 256\n", "1469 False 257\n", "1470 False 258\n", "1471 False 259\n", "1472 False 260\n", "1473 False 261\n", "1474 False 262\n", "1475 False 263\n", "1476 False 264\n", "1477 False 265\n", "1478 False 266\n", "1479 False 267\n", "1480 False 268\n", "1481 False 269\n", "1482 False 270\n", "1483 False 271\n", "1484 False 272\n", "1485 False 273\n", "1486 False 274\n", "1487 False 275\n", "1488 False 276\n", "1489 False 277\n", "1490 False 278\n", "1491 False 279\n", "1492 False 280\n", "1493 False 281\n", "1494 False 282\n", "1495 False 283\n", "1496 False 284\n", "1497 False 285\n", "1498 False 286\n", "1499 False 287\n", "1500 False 288\n", "1501 False 289\n", "1502 False 290\n", "1503 False 291\n", "1504 False 292\n", "1505 False 293\n", "1506 False 294\n", "1507 False 295\n", "1508 False 296\n", "1509 False 297\n", "1510 False 298\n", "1511 False 299\n", "1512 False 300\n", "1513 False 301\n", "1514 False 302\n", "1515 False 303\n", "1516 False 304\n", "1517 False 305\n", "1518 False 306\n", "1519 False 307\n", "1520 False 308\n", "1521 False 309\n", "1522 False 310\n", "1523 False 311\n", "1524 False 312\n", "1525 False 313\n", "1526 False 314\n", "1527 False 315\n", "1528 False 316\n", "1529 False 317\n", "1530 False 318\n", "1531 False 319\n", "1532 False 320\n", "1533 False 321\n", "1534 False 322\n", "1535 False 323\n", "1536 False 324\n", "1537 False 325\n", "1538 False 326\n", "1539 False 327\n", "1540 False 328\n", "1541 False 329\n", "1542 False 330\n", "1543 False 331\n", "1544 False 332\n", "1545 False 333\n", "1546 False 334\n", "1547 False 335\n", "1548 False 336\n", "1549 False 337\n", "1550 False 338\n", "1551 False 339\n", "1552 False 340\n", "1553 False 341\n", "1554 False 342\n", "1555 False 343\n", "1556 False 344\n", "1557 False 345\n", "1558 False 346\n", "1559 False 347\n", "1560 False 348\n", "1561 False 349\n", "1562 False 350\n", "1563 False 351\n", "1564 False 352\n", "1565 False 353\n", "1566 False 354\n", "1567 False 355\n", "1568 False 356\n", "1569 False 357\n", "1570 False 358\n", "1571 False 359\n", "1572 False 360\n", "1573 False 361\n", "1574 False 362\n", "1575 False 363\n", "1576 False 364\n", "1577 False 365\n", "1578 False 366\n", "1579 False 367\n", "1580 False 368\n", "1581 False 369\n", "1582 False 370\n", "1583 False 371\n", "1584 False 372\n", "1585 False 373\n", "1586 False 374\n", "1587 False 375\n", "1588 False 376\n", "1589 False 377\n", "1590 False 378\n", "1591 False 379\n", "1592 False 380\n", "1593 False 381\n", "1594 False 382\n", "1595 False 383\n", "1596 False 384\n", "1597 False 385\n", "1598 False 386\n", "1599 False 387\n", "1600 False 388\n", "1601 False 389\n", "1602 False 390\n", "1603 False 391\n", "1604 False 392\n", "1605 False 393\n", "1606 False 394\n", "1607 False 395\n", "1608 False 396\n", "1609 False 397\n", "1610 False 398\n", "1611 False 399\n", "1612 False 400\n", "1613 False 401\n", "1614 False 402\n", "1615 False 403\n", "1616 False 404\n", "1617 False 1\n", "1618 False 2\n", "1619 False 3\n", "1620 False 4\n", "1621 False 5\n", "1622 False 6\n", "1623 False 7\n", "1624 False 8\n", "1625 False 9\n", "1626 False 10\n", "1627 False 11\n", "1628 False 12\n", "1629 False 13\n", "1630 False 14\n", "1631 False 15\n", "1632 False 16\n", "1633 False 17\n", "1634 False 18\n", "1635 False 19\n", "1636 False 20\n", "1637 False 21\n", "1638 False 22\n", "1639 False 23\n", "1640 False 24\n", "1641 False 25\n", "1642 False 26\n", "1643 False 27\n", "1644 False 28\n", "1645 False 29\n", "1646 False 30\n", "1647 False 31\n", "1648 False 32\n", "1649 False 33\n", "1650 False 34\n", "1651 False 35\n", "1652 False 36\n", "1653 False 37\n", "1654 False 38\n", "1655 False 39\n", "1656 False 40\n", "1657 False 41\n", "1658 False 42\n", "1659 False 43\n", "1660 False 44\n", "1661 False 45\n", "1662 False 46\n", "1663 False 47\n", "1664 False 48\n", "1665 False 49\n", "1666 False 50\n", "1667 False 51\n", "1668 False 52\n", "1669 False 53\n", "1670 False 54\n", "1671 False 55\n", "1672 False 56\n", "1673 False 57\n", "1674 False 58\n", "1675 False 59\n", "1676 False 60\n", "1677 False 61\n", "1678 False 62\n", "1679 False 63\n", "1680 False 64\n", "1681 False 65\n", "1682 False 66\n", "1683 False 67\n", "1684 False 68\n", "1685 False 69\n", "1686 False 70\n", "1687 False 71\n", "1688 False 72\n", "1689 False 73\n", "1690 False 74\n", "1691 False 75\n", "1692 False 76\n", "1693 False 77\n", "1694 False 78\n", "1695 False 79\n", "1696 False 80\n", "1697 False 81\n", "1698 False 82\n", "1699 False 83\n", "1700 False 84\n", "1701 False 85\n", "1702 False 86\n", "1703 False 87\n", "1704 False 88\n", "1705 False 89\n", "1706 False 90\n", "1707 False 91\n", "1708 False 92\n", "1709 False 93\n", "1710 False 94\n", "1711 False 95\n", "1712 False 96\n", "1713 False 97\n", "1714 False 98\n", "1715 False 99\n", "1716 False 100\n", "1717 False 101\n", "1718 False 102\n", "1719 False 103\n", "1720 False 104\n", "1721 False 105\n", "1722 False 106\n", "1723 False 107\n", "1724 False 108\n", "1725 False 109\n", "1726 False 110\n", "1727 False 111\n", "1728 False 112\n", "1729 False 113\n", "1730 False 114\n", "1731 False 115\n", "1732 False 116\n", "1733 False 117\n", "1734 False 118\n", "1735 False 119\n", "1736 False 120\n", "1737 False 121\n", "1738 False 122\n", "1739 False 123\n", "1740 False 124\n", "1741 False 125\n", "1742 False 126\n", "1743 False 127\n", "1744 False 128\n", "1745 False 129\n", "1746 False 130\n", "1747 False 131\n", "1748 False 132\n", "1749 False 133\n", "1750 False 134\n", "1751 False 135\n", "1752 False 136\n", "1753 False 137\n", "1754 False 138\n", "1755 False 139\n", "1756 False 140\n", "1757 False 141\n", "1758 False 142\n", "1759 False 143\n", "1760 False 144\n", "1761 False 145\n", "1762 False 146\n", "1763 False 147\n", "1764 False 148\n", "1765 False 149\n", "1766 False 150\n", "1767 False 151\n", "1768 False 152\n", "1769 False 153\n", "1770 False 154\n", "1771 False 155\n", "1772 False 156\n", "1773 False 157\n", "1774 False 158\n", "1775 False 159\n", "1776 False 160\n", "1777 False 161\n", "1778 False 162\n", "1779 False 163\n", "1780 False 164\n", "1781 False 165\n", "1782 False 166\n", "1783 False 167\n", "1784 False 168\n", "1785 False 169\n", "1786 False 170\n", "1787 False 171\n", "1788 False 172\n", "1789 False 173\n", "1790 False 174\n", "1791 False 175\n", "1792 False 176\n", "1793 False 177\n", "1794 False 178\n", "1795 False 179\n", "1796 False 180\n", "1797 False 181\n", "1798 False 182\n", "1799 False 183\n", "1800 False 184\n", "1801 False 185\n", "1802 False 186\n", "1803 False 187\n", "1804 False 188\n", "1805 False 189\n", "1806 False 190\n", "1807 False 191\n", "1808 False 192\n", "1809 False 193\n", "1810 False 194\n", "1811 False 195\n", "1812 False 196\n", "1813 False 197\n", "1814 False 198\n", "1815 False 199\n", "1816 False 200\n", "1817 False 201\n", "1818 False 202\n", "1819 False 203\n", "1820 False 204\n", "1821 False 205\n", "1822 False 206\n", "1823 False 207\n", "1824 False 208\n", "1825 False 209\n", "1826 False 210\n", "1827 False 211\n", "1828 False 212\n", "1829 False 213\n", "1830 False 214\n", "1831 False 215\n", "1832 False 216\n", "1833 False 217\n", "1834 False 218\n", "1835 False 219\n", "1836 False 220\n", "1837 False 221\n", "1838 False 222\n", "1839 False 223\n", "1840 False 224\n", "1841 False 225\n", "1842 False 226\n", "1843 False 227\n", "1844 False 228\n", "1845 False 229\n", "1846 False 230\n", "1847 False 231\n", "1848 False 232\n", "1849 False 233\n", "1850 False 234\n", "1851 False 235\n", "1852 False 236\n", "1853 False 237\n", "1854 False 238\n", "1855 False 239\n", "1856 False 240\n", "1857 False 241\n", "1858 False 242\n", "1859 False 243\n", "1860 False 244\n", "1861 False 245\n", "1862 False 246\n", "1863 False 247\n", "1864 False 248\n", "1865 False 249\n", "1866 False 250\n", "1867 False 251\n", "1868 False 252\n", "1869 False 253\n", "1870 False 254\n", "1871 False 255\n", "1872 False 256\n", "1873 False 257\n", "1874 False 258\n", "1875 False 259\n", "1876 False 260\n", "1877 False 261\n", "1878 False 262\n", "1879 False 263\n", "1880 False 264\n", "1881 False 265\n", "1882 False 266\n", "1883 False 267\n", "1884 False 268\n", "1885 False 269\n", "1886 False 270\n", "1887 False 271\n", "1888 False 272\n", "1889 False 273\n", "1890 False 274\n", "1891 False 275\n", "1892 False 276\n", "1893 False 277\n", "1894 False 278\n", "1895 False 279\n", "1896 False 280\n", "1897 False 281\n", "1898 False 282\n", "1899 False 283\n", "1900 False 284\n", "1901 False 285\n", "1902 False 286\n", "1903 False 287\n", "1904 False 288\n", "1905 False 289\n", "1906 False 290\n", "1907 False 291\n", "1908 False 292\n", "1909 False 293\n", "1910 False 294\n", "1911 False 295\n", "1912 False 296\n", "1913 False 297\n", "1914 False 298\n", "1915 False 299\n", "1916 False 300\n", "1917 False 301\n", "1918 False 302\n", "1919 False 303\n", "1920 False 304\n", "1921 False 305\n", "1922 False 306\n", "1923 False 307\n", "1924 False 308\n", "1925 False 309\n", "1926 False 310\n", "1927 False 311\n", "1928 False 312\n", "1929 False 313\n", "1930 False 314\n", "1931 False 315\n", "1932 False 316\n", "1933 False 317\n", "1934 False 318\n", "1935 False 319\n", "1936 False 320\n", "1937 False 321\n", "1938 False 322\n", "1939 False 323\n", "1940 False 324\n", "1941 False 325\n", "1942 False 326\n", "1943 False 327\n", "1944 False 328\n", "1945 False 329\n", "1946 False 330\n", "1947 False 331\n", "1948 False 332\n", "1949 False 333\n", "1950 False 334\n", "1951 False 335\n", "1952 False 336\n", "1953 False 337\n", "1954 False 338\n", "1955 False 339\n", "1956 False 340\n", "1957 False 341\n", "1958 False 342\n", "1959 False 343\n", "1960 False 344\n", "1961 False 345\n", "1962 False 346\n", "1963 False 347\n", "1964 False 348\n", "1965 False 349\n", "1966 False 350\n", "1967 False 351\n", "1968 False 352\n", "1969 False 353\n", "1970 False 354\n", "1971 False 355\n", "1972 False 356\n", "1973 False 357\n", "1974 False 358\n", "1975 False 359\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "1976 False 360\n", "1977 False 361\n", "1978 False 362\n", "1979 False 363\n", "1980 False 364\n", "1981 False 365\n", "1982 False 366\n", "1983 False 367\n", "1984 False 368\n", "1985 False 369\n", "1986 False 370\n", "1987 False 371\n", "1988 False 372\n", "1989 False 373\n", "1990 False 374\n", "1991 False 375\n", "1992 False 376\n", "1993 False 377\n", "1994 False 378\n", "1995 False 379\n", "1996 False 380\n", "1997 False 381\n", "1998 False 382\n", "1999 False 383\n", "2000 False 384\n", "2001 False 385\n", "2002 False 386\n", "2003 False 387\n", "2004 False 388\n", "2005 False 389\n", "2006 False 390\n", "2007 False 391\n", "2008 False 392\n", "2009 False 393\n", "2010 False 394\n", "2011 False 395\n", "2012 False 396\n", "2013 False 397\n", "2014 False 398\n", "2015 False 399\n", "2016 False 400\n", "2017 False 401\n", "2018 False 402\n", "2019 False 403\n", "2020 False 404\n", "2021 False 1\n", "2022 False 2\n", "2023 False 3\n", "2024 False 4\n", "2025 False 5\n", "2026 False 6\n", "2027 False 7\n", "2028 False 8\n", "2029 False 9\n", "2030 False 10\n", "2031 False 11\n", "2032 False 12\n", "2033 False 13\n", "2034 False 14\n", "2035 False 15\n", "2036 False 16\n", "2037 False 17\n", "2038 False 18\n", "2039 False 19\n", "2040 False 20\n", "2041 False 21\n", "2042 False 22\n", "2043 False 23\n", "2044 False 24\n", "2045 False 25\n", "2046 False 26\n", "2047 False 27\n", "2048 False 28\n", "2049 False 29\n", "2050 False 30\n", "2051 False 31\n", "2052 False 32\n", "2053 False 33\n", "2054 False 34\n", "2055 False 35\n", "2056 False 36\n", "2057 False 37\n", "2058 False 38\n", "2059 False 39\n", "2060 False 40\n", "2061 False 41\n", "2062 False 42\n", "2063 False 43\n", "2064 False 44\n", "2065 False 45\n", "2066 False 46\n", "2067 False 47\n", "2068 False 48\n", "2069 False 49\n", "2070 False 50\n", "2071 False 51\n", "2072 False 52\n", "2073 False 53\n", "2074 False 54\n", "2075 False 55\n", "2076 False 56\n", "2077 False 57\n", "2078 False 58\n", "2079 False 59\n", "2080 False 60\n", "2081 False 61\n", "2082 False 62\n", "2083 False 63\n", "2084 False 64\n", "2085 False 65\n", "2086 False 66\n", "2087 False 67\n", "2088 False 68\n", "2089 False 69\n", "2090 False 70\n", "2091 False 71\n", "2092 False 72\n", "2093 False 73\n", "2094 False 74\n", "2095 False 75\n", "2096 False 76\n", "2097 False 77\n", "2098 False 78\n", "2099 False 79\n", "2100 False 80\n", "2101 False 81\n", "2102 False 82\n", "2103 False 83\n", "2104 False 84\n", "2105 False 85\n", "2106 False 86\n", "2107 False 87\n", "2108 False 88\n", "2109 False 89\n", "2110 False 90\n", "2111 False 91\n", "2112 False 92\n", "2113 False 93\n", "2114 False 94\n", "2115 False 95\n", "2116 False 96\n", "2117 False 97\n", "2118 False 98\n", "2119 False 99\n", "2120 False 100\n", "2121 False 101\n", "2122 False 102\n", "2123 False 103\n", "2124 False 104\n", "2125 False 105\n", "2126 False 106\n", "2127 False 107\n", "2128 False 108\n", "2129 False 109\n", "2130 False 110\n", "2131 False 111\n", "2132 False 112\n", "2133 False 113\n", "2134 False 114\n", "2135 False 115\n", "2136 False 116\n", "2137 False 117\n", "2138 False 118\n", "2139 False 119\n", "2140 False 120\n", "2141 False 121\n", "2142 False 122\n", "2143 False 123\n", "2144 False 124\n", "2145 False 125\n", "2146 False 126\n", "2147 False 127\n", "2148 False 128\n", "2149 False 129\n", "2150 False 130\n", "2151 False 131\n", "2152 False 132\n", "2153 False 133\n", "2154 False 134\n", "2155 False 135\n", "2156 False 136\n", "2157 False 137\n", "2158 False 138\n", "2159 False 139\n", "2160 False 140\n", "2161 False 141\n", "2162 False 142\n", "2163 False 143\n", "2164 False 144\n", "2165 False 145\n", "2166 False 146\n", "2167 False 147\n", "2168 False 148\n", "2169 False 149\n", "2170 False 150\n", "2171 False 151\n", "2172 False 152\n", "2173 False 153\n", "2174 False 154\n", "2175 False 155\n", "2176 False 156\n", "2177 False 157\n", "2178 False 158\n", "2179 False 159\n", "2180 False 160\n", "2181 False 161\n", "2182 False 162\n", "2183 False 163\n", "2184 False 164\n", "2185 False 165\n", "2186 False 166\n", "2187 False 167\n", "2188 False 168\n", "2189 False 169\n", "2190 False 170\n", "2191 False 171\n", "2192 False 172\n", "2193 False 173\n", "2194 False 174\n", "2195 False 175\n", "2196 False 176\n", "2197 False 177\n", "2198 False 178\n", "2199 False 179\n", "2200 False 180\n", "2201 False 181\n", "2202 False 182\n", "2203 False 183\n", "2204 False 184\n", "2205 False 185\n", "2206 False 186\n", "2207 False 187\n", "2208 False 188\n", "2209 False 189\n", "2210 False 190\n", "2211 False 191\n", "2212 False 192\n", "2213 False 193\n", "2214 False 194\n", "2215 False 195\n", "2216 False 196\n", "2217 False 197\n", "2218 False 198\n", "2219 False 199\n", "2220 False 200\n", "2221 False 201\n", "2222 False 202\n", "2223 False 203\n", "2224 False 204\n", "2225 False 205\n", "2226 False 206\n", "2227 False 207\n", "2228 False 208\n", "2229 False 209\n", "2230 False 210\n", "2231 False 211\n", "2232 False 212\n", "2233 False 213\n", "2234 False 214\n", "2235 False 215\n", "2236 False 216\n", "2237 False 217\n", "2238 False 218\n", "2239 False 219\n", "2240 False 220\n", "2241 False 221\n", "2242 False 222\n", "2243 False 223\n", "2244 False 224\n", "2245 False 225\n", "2246 False 226\n", "2247 False 227\n", "2248 False 228\n", "2249 False 229\n", "2250 False 230\n", "2251 False 231\n", "2252 False 232\n", "2253 False 233\n", "2254 False 234\n", "2255 False 235\n", "2256 False 236\n", "2257 False 237\n", "2258 False 238\n", "2259 False 239\n", "2260 False 240\n", "2261 False 241\n", "2262 False 242\n", "2263 False 243\n", "2264 False 244\n", "2265 False 245\n", "2266 False 246\n", "2267 False 247\n", "2268 False 248\n", "2269 False 249\n", "2270 False 250\n", "2271 False 251\n", "2272 False 252\n", "2273 False 253\n", "2274 False 254\n", "2275 False 255\n", "2276 False 256\n", "2277 False 257\n", "2278 False 258\n", "2279 False 259\n", "2280 False 260\n", "2281 False 261\n", "2282 False 262\n", "2283 False 263\n", "2284 False 264\n", "2285 False 265\n", "2286 False 266\n", "2287 False 267\n", "2288 False 268\n", "2289 False 269\n", "2290 False 270\n", "2291 False 271\n", "2292 False 272\n", "2293 False 273\n", "2294 False 274\n", "2295 False 275\n", "2296 False 276\n", "2297 False 277\n", "2298 False 278\n", "2299 False 279\n", "2300 False 280\n", "2301 False 281\n", "2302 False 282\n", "2303 False 283\n", "2304 False 284\n", "2305 False 285\n", "2306 False 286\n", "2307 False 287\n", "2308 False 288\n", "2309 False 289\n", "2310 False 290\n", "2311 False 291\n", "2312 False 292\n", "2313 False 293\n", "2314 False 294\n", "2315 False 295\n", "2316 False 296\n", "2317 False 297\n", "2318 False 298\n", "2319 False 299\n", "2320 False 300\n", "2321 False 301\n", "2322 False 302\n", "2323 False 303\n", "2324 False 304\n", "2325 False 305\n", "2326 False 306\n", "2327 False 307\n", "2328 False 308\n", "2329 False 309\n", "2330 False 310\n", "2331 False 311\n", "2332 False 312\n", "2333 False 313\n", "2334 False 314\n", "2335 False 315\n", "2336 False 316\n", "2337 False 317\n", "2338 False 318\n", "2339 False 319\n", "2340 False 320\n", "2341 False 321\n", "2342 False 322\n", "2343 False 323\n", "2344 False 324\n", "2345 False 325\n", "2346 False 326\n", "2347 False 327\n", "2348 False 328\n", "2349 False 329\n", "2350 False 330\n", "2351 False 331\n", "2352 False 332\n", "2353 False 333\n", "2354 False 334\n", "2355 False 335\n", "2356 False 336\n", "2357 False 337\n", "2358 False 338\n", "2359 False 339\n", "2360 False 340\n", "2361 False 341\n", "2362 False 342\n", "2363 False 343\n", "2364 False 344\n", "2365 False 345\n", "2366 False 346\n", "2367 False 347\n", "2368 False 348\n", "2369 False 349\n", "2370 False 350\n", "2371 False 351\n", "2372 False 352\n", "2373 False 353\n", "2374 False 354\n", "2375 False 355\n", "2376 False 356\n", "2377 False 357\n", "2378 False 358\n", "2379 False 359\n", "2380 False 360\n", "2381 False 361\n", "2382 False 362\n", "2383 False 363\n", "2384 False 364\n", "2385 False 365\n", "2386 False 366\n", "2387 False 367\n", "2388 False 368\n", "2389 False 369\n", "2390 False 370\n", "2391 False 371\n", "2392 False 372\n", "2393 False 373\n", "2394 False 374\n", "2395 False 375\n", "2396 False 376\n", "2397 False 377\n", "2398 False 378\n", "2399 False 379\n", "2400 False 380\n", "2401 False 381\n", "2402 False 382\n", "2403 False 383\n", "2404 False 384\n", "2405 False 385\n", "2406 False 386\n", "2407 False 387\n", "2408 False 388\n", "2409 False 389\n", "2410 False 390\n", "2411 False 391\n", "2412 False 392\n", "2413 False 393\n", "2414 False 394\n", "2415 False 395\n", "2416 False 396\n", "2417 False 397\n", "2418 False 398\n", "2419 False 399\n", "2420 False 400\n", "2421 False 401\n", "2422 False 402\n", "2423 False 403\n", "2424 False 404\n", "2425 False 1\n", "2426 False 2\n", "2427 False 3\n", "2428 False 4\n", "2429 False 5\n", "2430 False 6\n", "2431 False 7\n", "2432 False 8\n", "2433 False 9\n", "2434 False 10\n", "2435 False 11\n", "2436 False 12\n", "2437 False 13\n", "2438 False 14\n", "2439 False 15\n", "2440 False 16\n", "2441 False 17\n", "2442 False 18\n", "2443 False 19\n", "2444 False 20\n", "2445 False 21\n", "2446 False 22\n", "2447 False 23\n", "2448 False 24\n", "2449 False 25\n", "2450 False 26\n", "2451 False 27\n", "2452 False 28\n", "2453 False 29\n", "2454 False 30\n", "2455 False 31\n", "2456 False 32\n", "2457 False 33\n", "2458 False 34\n", "2459 False 35\n", "2460 False 36\n", "2461 False 37\n", "2462 False 38\n", "2463 False 39\n", "2464 False 40\n", "2465 False 41\n", "2466 False 42\n", "2467 False 43\n", "2468 False 44\n", "2469 False 45\n", "2470 False 46\n", "2471 False 47\n", "2472 False 48\n", "2473 False 49\n", "2474 False 50\n", "2475 False 51\n", "2476 False 52\n", "2477 False 53\n", "2478 False 54\n", "2479 False 55\n", "2480 False 56\n", "2481 False 57\n", "2482 False 58\n", "2483 False 59\n", "2484 False 60\n", "2485 False 61\n", "2486 False 62\n", "2487 False 63\n", "2488 False 64\n", "2489 False 65\n", "2490 False 66\n", "2491 False 67\n", "2492 False 68\n", "2493 False 69\n", "2494 False 70\n", "2495 False 71\n", "2496 False 72\n", "2497 False 73\n", "2498 False 74\n", "2499 False 75\n", "2500 False 76\n", "2501 False 77\n", "2502 False 78\n", "2503 False 79\n", "2504 False 80\n", "2505 False 81\n", "2506 False 82\n", "2507 False 83\n", "2508 False 84\n", "2509 False 85\n", "2510 False 86\n", "2511 False 87\n", "2512 False 88\n", "2513 False 89\n", "2514 False 90\n", "2515 False 91\n", "2516 False 92\n", "2517 False 93\n", "2518 False 94\n", "2519 False 95\n", "2520 False 96\n", "2521 False 97\n", "2522 False 98\n", "2523 False 99\n", "2524 False 100\n", "2525 False 101\n", "2526 False 102\n", "2527 False 103\n", "2528 False 104\n", "2529 False 105\n", "2530 False 106\n", "2531 False 107\n", "2532 False 108\n", "2533 False 109\n", "2534 False 110\n", "2535 False 111\n", "2536 False 112\n", "2537 False 113\n", "2538 False 114\n", "2539 False 115\n", "2540 False 116\n", "2541 False 117\n", "2542 False 118\n", "2543 False 119\n", "2544 False 120\n", "2545 False 121\n", "2546 False 122\n", "2547 False 123\n", "2548 False 124\n", "2549 False 125\n", "2550 False 126\n", "2551 False 127\n", "2552 False 128\n", "2553 False 129\n", "2554 False 130\n", "2555 False 131\n", "2556 False 132\n", "2557 False 133\n", "2558 False 134\n", "2559 False 135\n", "2560 False 136\n", "2561 False 137\n", "2562 False 138\n", "2563 False 139\n", "2564 False 140\n", "2565 False 141\n", "2566 False 142\n", "2567 False 143\n", "2568 False 144\n", "2569 False 145\n", "2570 False 146\n", "2571 False 147\n", "2572 False 148\n", "2573 False 149\n", "2574 False 150\n", "2575 False 151\n", "2576 False 152\n", "2577 False 153\n", "2578 False 154\n", "2579 False 155\n", "2580 False 156\n", "2581 False 157\n", "2582 False 158\n", "2583 False 159\n", "2584 False 160\n", "2585 False 161\n", "2586 False 162\n", "2587 False 163\n", "2588 False 164\n", "2589 False 165\n", "2590 False 166\n", "2591 False 167\n", "2592 False 168\n", "2593 False 169\n", "2594 False 170\n", "2595 False 171\n", "2596 False 172\n", "2597 False 173\n", "2598 False 174\n", "2599 False 175\n", "2600 False 176\n", "2601 False 177\n", "2602 False 178\n", "2603 False 179\n", "2604 False 180\n", "2605 False 181\n", "2606 False 182\n", "2607 False 183\n", "2608 False 184\n", "2609 False 185\n", "2610 False 186\n", "2611 False 187\n", "2612 False 188\n", "2613 False 189\n", "2614 False 190\n", "2615 False 191\n", "2616 False 192\n", "2617 False 193\n", "2618 False 194\n", "2619 False 195\n", "2620 False 196\n", "2621 False 197\n", "2622 False 198\n", "2623 False 199\n", "2624 False 200\n", "2625 False 201\n", "2626 False 202\n", "2627 False 203\n", "2628 False 204\n", "2629 False 205\n", "2630 False 206\n", "2631 False 207\n", "2632 False 208\n", "2633 False 209\n", "2634 False 210\n", "2635 False 211\n", "2636 False 212\n", "2637 False 213\n", "2638 False 214\n", "2639 False 215\n", "2640 False 216\n", "2641 False 217\n", "2642 False 218\n", "2643 False 219\n", "2644 False 220\n", "2645 False 221\n", "2646 False 222\n", "2647 False 223\n", "2648 False 224\n", "2649 False 225\n", "2650 False 226\n", "2651 False 227\n", "2652 False 228\n", "2653 False 229\n", "2654 False 230\n", "2655 False 231\n", "2656 False 232\n", "2657 False 233\n", "2658 False 234\n", "2659 False 235\n", "2660 False 236\n", "2661 False 237\n", "2662 False 238\n", "2663 False 239\n", "2664 False 240\n", "2665 False 241\n", "2666 False 242\n", "2667 False 243\n", "2668 False 244\n", "2669 False 245\n", "2670 False 246\n", "2671 False 247\n", "2672 False 248\n", "2673 False 249\n", "2674 False 250\n", "2675 False 251\n", "2676 False 252\n", "2677 False 253\n", "2678 False 254\n", "2679 False 255\n", "2680 False 256\n", "2681 False 257\n", "2682 False 258\n", "2683 False 259\n", "2684 False 260\n", "2685 False 261\n", "2686 False 262\n", "2687 False 263\n", "2688 False 264\n", "2689 False 265\n", "2690 False 266\n", "2691 False 267\n", "2692 False 268\n", "2693 False 269\n", "2694 False 270\n", "2695 False 271\n", "2696 False 272\n", "2697 False 273\n", "2698 False 274\n", "2699 False 275\n", "2700 False 276\n", "2701 False 277\n", "2702 False 278\n", "2703 False 279\n", "2704 False 280\n", "2705 False 281\n", "2706 False 282\n", "2707 False 283\n", "2708 False 284\n", "2709 False 285\n", "2710 False 286\n", "2711 False 287\n", "2712 False 288\n", "2713 False 289\n", "2714 False 290\n", "2715 False 291\n", "2716 False 292\n", "2717 False 293\n", "2718 False 294\n", "2719 False 295\n", "2720 False 296\n", "2721 False 297\n", "2722 False 298\n", "2723 False 299\n", "2724 False 300\n", "2725 False 301\n", "2726 False 302\n", "2727 False 303\n", "2728 False 304\n", "2729 False 305\n", "2730 False 306\n", "2731 False 307\n", "2732 False 308\n", "2733 False 309\n", "2734 False 310\n", "2735 False 311\n", "2736 False 312\n", "2737 False 313\n", "2738 False 314\n", "2739 False 315\n", "2740 False 316\n", "2741 False 317\n", "2742 False 318\n", "2743 False 319\n", "2744 False 320\n", "2745 False 321\n", "2746 False 322\n", "2747 False 323\n", "2748 False 324\n", "2749 False 325\n", "2750 False 326\n", "2751 False 327\n", "2752 False 328\n", "2753 False 329\n", "2754 False 330\n", "2755 False 331\n", "2756 False 332\n", "2757 False 333\n", "2758 False 334\n", "2759 False 335\n", "2760 False 336\n", "2761 False 337\n", "2762 False 338\n", "2763 False 339\n", "2764 False 340\n", "2765 False 341\n", "2766 False 342\n", "2767 False 343\n", "2768 False 344\n", "2769 False 345\n", "2770 False 346\n", "2771 False 347\n", "2772 False 348\n", "2773 False 349\n", "2774 False 350\n", "2775 False 351\n", "2776 False 352\n", "2777 False 353\n", "2778 False 354\n", "2779 False 355\n", "2780 False 356\n", "2781 False 357\n", "2782 False 358\n", "2783 False 359\n", "2784 False 360\n", "2785 False 361\n", "2786 False 362\n", "2787 False 363\n", "2788 False 364\n", "2789 False 365\n", "2790 False 366\n", "2791 False 367\n", "2792 False 368\n", "2793 False 369\n", "2794 False 370\n", "2795 False 371\n", "2796 False 372\n", "2797 False 373\n", "2798 False 374\n", "2799 False 375\n", "2800 False 376\n", "2801 False 377\n", "2802 False 378\n", "2803 False 379\n", "2804 False 380\n", "2805 False 381\n", "2806 False 382\n", "2807 False 383\n", "2808 False 384\n", "2809 False 385\n", "2810 False 386\n", "2811 False 387\n", "2812 False 388\n", "2813 False 389\n", "2814 False 390\n", "2815 False 391\n", "2816 False 392\n", "2817 False 393\n", "2818 False 394\n", "2819 False 395\n", "2820 False 396\n", "2821 False 397\n", "2822 False 398\n", "2823 False 399\n", "2824 False 400\n", "2825 False 401\n", "2826 False 402\n", "2827 False 403\n", "2828 False 404\n", "2829 False 1\n", "2830 False 2\n", "2831 False 3\n", "2832 False 4\n", "2833 False 5\n", "2834 False 6\n", "2835 False 7\n", "2836 False 8\n", "2837 False 9\n", "2838 False 10\n", "2839 False 11\n", "2840 False 12\n", "2841 False 13\n", "2842 False 14\n", "2843 False 15\n", "2844 False 16\n", "2845 False 17\n", "2846 False 18\n", "2847 False 19\n", "2848 False 20\n", "2849 False 21\n", "2850 False 22\n", "2851 False 23\n", "2852 False 24\n", "2853 False 25\n", "2854 False 26\n", "2855 False 27\n", "2856 False 28\n", "2857 False 29\n", "2858 False 30\n", "2859 False 31\n", "2860 False 32\n", "2861 False 33\n", "2862 False 34\n", "2863 False 35\n", "2864 False 36\n", "2865 False 37\n", "2866 False 38\n", "2867 False 39\n", "2868 False 40\n", "2869 False 41\n", "2870 False 42\n", "2871 False 43\n", "2872 False 44\n", "2873 False 45\n", "2874 False 46\n", "2875 False 47\n", "2876 False 48\n", "2877 False 49\n", "2878 False 50\n", "2879 False 51\n", "2880 False 52\n", "2881 False 53\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "2882 False 54\n", "2883 False 55\n", "2884 False 56\n", "2885 False 57\n", "2886 False 58\n", "2887 False 59\n", "2888 False 60\n", "2889 False 61\n", "2890 False 62\n", "2891 False 63\n", "2892 False 64\n", "2893 False 65\n", "2894 False 66\n", "2895 False 67\n", "2896 False 68\n", "2897 False 69\n", "2898 False 70\n", "2899 False 71\n", "2900 False 72\n", "2901 False 73\n", "2902 False 74\n", "2903 False 75\n", "2904 False 76\n", "2905 False 77\n", "2906 False 78\n", "2907 False 79\n", "2908 False 80\n", "2909 False 81\n", "2910 False 82\n", "2911 False 83\n", "2912 False 84\n", "2913 False 85\n", "2914 False 86\n", "2915 False 87\n", "2916 False 88\n", "2917 False 89\n", "2918 False 90\n", "2919 False 91\n", "2920 False 92\n", "2921 False 93\n", "2922 False 94\n", "2923 False 95\n", "2924 False 96\n", "2925 False 97\n", "2926 False 98\n", "2927 False 99\n", "2928 False 100\n", "2929 False 101\n", "2930 False 102\n", "2931 False 103\n", "2932 False 104\n", "2933 False 105\n", "2934 False 106\n", "2935 False 107\n", "2936 False 108\n", "2937 False 109\n", "2938 False 110\n", "2939 False 111\n", "2940 False 112\n", "2941 False 113\n", "2942 False 114\n", "2943 False 115\n", "2944 False 116\n", "2945 False 117\n", "2946 False 118\n", "2947 False 119\n", "2948 False 120\n", "2949 False 121\n", "2950 False 122\n", "2951 False 123\n", "2952 False 124\n", "2953 False 125\n", "2954 False 126\n", "2955 False 127\n", "2956 False 128\n", "2957 False 129\n", "2958 False 130\n", "2959 False 131\n", "2960 False 132\n", "2961 False 133\n", "2962 False 134\n", "2963 False 135\n", "2964 False 136\n", "2965 False 137\n", "2966 False 138\n", "2967 False 139\n", "2968 False 140\n", "2969 False 141\n", "2970 False 142\n", "2971 False 143\n", "2972 False 144\n", "2973 False 145\n", "2974 False 146\n", "2975 False 147\n", "2976 False 148\n", "2977 False 149\n", "2978 False 150\n", "2979 False 151\n", "2980 False 152\n", "2981 False 153\n", "2982 False 154\n", "2983 False 155\n", "2984 False 156\n", "2985 False 157\n", "2986 False 158\n", "2987 False 159\n", "2988 False 160\n", "2989 False 161\n", "2990 False 162\n", "2991 False 163\n", "2992 False 164\n", "2993 False 165\n", "2994 False 166\n", "2995 False 167\n", "2996 False 168\n", "2997 False 169\n", "2998 False 170\n", "2999 False 171\n", "3000 False 172\n", "3001 False 173\n", "3002 False 174\n", "3003 False 175\n", "3004 False 176\n", "3005 False 177\n", "3006 False 178\n", "3007 False 179\n", "3008 False 180\n", "3009 False 181\n", "3010 False 182\n", "3011 False 183\n", "3012 False 184\n", "3013 False 185\n", "3014 False 186\n", "3015 False 187\n", "3016 False 188\n", "3017 False 189\n", "3018 False 190\n", "3019 False 191\n", "3020 False 192\n", "3021 False 193\n", "3022 False 194\n", "3023 False 195\n", "3024 False 196\n", "3025 False 197\n", "3026 False 198\n", "3027 False 199\n", "3028 False 200\n", "3029 False 201\n", "3030 False 202\n", "3031 False 203\n", "3032 False 204\n", "3033 False 205\n", "3034 False 206\n", "3035 False 207\n", "3036 False 208\n", "3037 False 209\n", "3038 False 210\n", "3039 False 211\n", "3040 False 212\n", "3041 False 213\n", "3042 False 214\n", "3043 False 215\n", "3044 False 216\n", "3045 False 217\n", "3046 False 218\n", "3047 False 219\n", "3048 False 220\n", "3049 False 221\n", "3050 False 222\n", "3051 False 223\n", "3052 False 224\n", "3053 False 225\n", "3054 False 226\n", "3055 False 227\n", "3056 False 228\n", "3057 False 229\n", "3058 False 230\n", "3059 False 231\n", "3060 False 232\n", "3061 False 233\n", "3062 False 234\n", "3063 False 235\n", "3064 False 236\n", "3065 False 237\n", "3066 False 238\n", "3067 False 239\n", "3068 False 240\n", "3069 False 241\n", "3070 False 242\n", "3071 False 243\n", "3072 False 244\n", "3073 False 245\n", "3074 False 246\n", "3075 False 247\n", "3076 False 248\n", "3077 False 249\n", "3078 False 250\n", "3079 False 251\n", "3080 False 252\n", "3081 False 253\n", "3082 False 254\n", "3083 False 255\n", "3084 False 256\n", "3085 False 257\n", "3086 False 258\n", "3087 False 259\n", "3088 False 260\n", "3089 False 261\n", "3090 False 262\n", "3091 False 263\n", "3092 False 264\n", "3093 False 265\n", "3094 False 266\n", "3095 False 267\n", "3096 False 268\n", "3097 False 269\n", "3098 False 270\n", "3099 False 271\n", "3100 False 272\n", "3101 False 273\n", "3102 False 274\n", "3103 False 275\n", "3104 False 276\n", "3105 False 277\n", "3106 False 278\n", "3107 False 279\n", "3108 False 280\n", "3109 False 281\n", "3110 False 282\n", "3111 False 283\n", "3112 False 284\n", "3113 False 285\n", "3114 False 286\n", "3115 False 287\n", "3116 False 288\n", "3117 False 289\n", "3118 False 290\n", "3119 False 291\n", "3120 False 292\n", "3121 False 293\n", "3122 False 294\n", "3123 False 295\n", "3124 False 296\n", "3125 False 297\n", "3126 False 298\n", "3127 False 299\n", "3128 False 300\n", "3129 False 301\n", "3130 False 302\n", "3131 False 303\n", "3132 False 304\n", "3133 False 305\n", "3134 False 306\n", "3135 False 307\n", "3136 False 308\n", "3137 False 309\n", "3138 False 310\n", "3139 False 311\n", "3140 False 312\n", "3141 False 313\n", "3142 False 314\n", "3143 False 315\n", "3144 False 316\n", "3145 False 317\n", "3146 False 318\n", "3147 False 319\n", "3148 False 320\n", "3149 False 321\n", "3150 False 322\n", "3151 False 323\n", "3152 False 324\n", "3153 False 325\n", "3154 False 326\n", "3155 False 327\n", "3156 False 328\n", "3157 False 329\n", "3158 False 330\n", "3159 False 331\n", "3160 False 332\n", "3161 False 333\n", "3162 False 334\n", "3163 False 335\n", "3164 False 336\n", "3165 False 337\n", "3166 False 338\n", "3167 False 339\n", "3168 False 340\n", "3169 False 341\n", "3170 False 342\n", "3171 False 343\n", "3172 False 344\n", "3173 False 345\n", "3174 False 346\n", "3175 False 347\n", "3176 False 348\n", "3177 False 349\n", "3178 False 350\n", "3179 False 351\n", "3180 False 352\n", "3181 False 353\n", "3182 False 354\n", "3183 False 355\n", "3184 False 356\n", "3185 False 357\n", "3186 False 358\n", "3187 False 359\n", "3188 False 360\n", "3189 False 361\n", "3190 False 362\n", "3191 False 363\n", "3192 False 364\n", "3193 False 365\n", "3194 False 366\n", "3195 False 367\n", "3196 False 368\n", "3197 False 369\n", "3198 False 370\n", "3199 False 371\n", "3200 False 372\n", "3201 False 373\n", "3202 False 374\n", "3203 False 375\n", "3204 False 376\n", "3205 False 377\n", "3206 False 378\n", "3207 False 379\n", "3208 False 380\n", "3209 False 381\n", "3210 False 382\n", "3211 False 383\n", "3212 False 384\n", "3213 False 385\n", "3214 False 386\n", "3215 False 387\n", "3216 False 388\n", "3217 False 389\n", "3218 False 390\n", "3219 False 391\n", "3220 False 392\n", "3221 False 393\n", "3222 False 394\n", "3223 False 395\n", "3224 False 396\n", "3225 False 397\n", "3226 False 398\n", "3227 False 399\n", "3228 False 400\n", "3229 False 401\n", "3230 False 402\n", "3231 False 403\n", "3232 False 404\n", "3233 False 1\n", "3234 False 2\n", "3235 False 3\n", "3236 False 4\n", "3237 False 5\n", "3238 False 6\n", "3239 False 7\n", "3240 False 8\n", "3241 False 9\n", "3242 False 10\n", "3243 False 11\n", "3244 False 12\n", "3245 False 13\n", "3246 False 14\n", "3247 False 15\n", "3248 False 16\n", "3249 False 17\n", "3250 False 18\n", "3251 False 19\n", "3252 False 20\n", "3253 False 21\n", "3254 False 22\n", "3255 False 23\n", "3256 False 24\n", "3257 False 25\n", "3258 False 26\n", "3259 False 27\n", "3260 False 28\n", "3261 False 29\n", "3262 False 30\n", "3263 False 31\n", "3264 False 32\n", "3265 False 33\n", "3266 False 34\n", "3267 False 35\n", "3268 False 36\n", "3269 False 37\n", "3270 False 38\n", "3271 False 39\n", "3272 False 40\n", "3273 False 41\n", "3274 False 42\n", "3275 False 43\n", "3276 False 44\n", "3277 False 45\n", "3278 False 46\n", "3279 False 47\n", "3280 False 48\n", "3281 False 49\n", "3282 False 50\n", "3283 False 51\n", "3284 False 52\n", "3285 False 53\n", "3286 False 54\n", "3287 False 55\n", "3288 False 56\n", "3289 False 57\n", "3290 False 58\n", "3291 False 59\n", "3292 False 60\n", "3293 False 61\n", "3294 False 62\n", "3295 False 63\n", "3296 False 64\n", "3297 False 65\n", "3298 False 66\n", "3299 False 67\n", "3300 False 68\n", "3301 False 69\n", "3302 False 70\n", "3303 False 71\n", "3304 False 72\n", "3305 False 73\n", "3306 False 74\n", "3307 False 75\n", "3308 False 76\n", "3309 False 77\n", "3310 False 78\n", "3311 False 79\n", "3312 False 80\n", "3313 False 81\n", "3314 False 82\n", "3315 False 83\n", "3316 False 84\n", "3317 False 85\n", "3318 False 86\n", "3319 False 87\n", "3320 False 88\n", "3321 False 89\n", "3322 False 90\n", "3323 False 91\n", "3324 False 92\n", "3325 False 93\n", "3326 False 94\n", "3327 False 95\n", "3328 False 96\n", "3329 False 97\n", "3330 False 98\n", "3331 False 99\n", "3332 False 100\n", "3333 False 101\n", "3334 False 102\n", "3335 False 103\n", "3336 False 104\n", "3337 False 105\n", "3338 False 106\n", "3339 False 107\n", "3340 False 108\n", "3341 False 109\n", "3342 False 110\n", "3343 False 111\n", "3344 False 112\n", "3345 False 113\n", "3346 False 114\n", "3347 False 115\n", "3348 False 116\n", "3349 False 117\n", "3350 False 118\n", "3351 False 119\n", "3352 False 120\n", "3353 False 121\n", "3354 False 122\n", "3355 False 123\n", "3356 False 124\n", "3357 False 125\n", "3358 False 126\n", "3359 False 127\n", "3360 False 128\n", "3361 False 129\n", "3362 False 130\n", "3363 False 131\n", "3364 False 132\n", "3365 False 133\n", "3366 False 134\n", "3367 False 135\n", "3368 False 136\n", "3369 False 137\n", "3370 False 138\n", "3371 False 139\n", "3372 False 140\n", "3373 False 141\n", "3374 False 142\n", "3375 False 143\n", "3376 False 144\n", "3377 False 145\n", "3378 False 146\n", "3379 False 147\n", "3380 False 148\n", "3381 False 149\n", "3382 False 150\n", "3383 False 151\n", "3384 False 152\n", "3385 False 153\n", "3386 False 154\n", "3387 False 155\n", "3388 False 156\n", "3389 False 157\n", "3390 False 158\n", "3391 False 159\n", "3392 False 160\n", "3393 False 161\n", "3394 False 162\n", "3395 False 163\n", "3396 False 164\n", "3397 False 165\n", "3398 False 166\n", "3399 False 167\n", "3400 False 168\n", "3401 False 169\n", "3402 False 170\n", "3403 False 171\n", "3404 False 172\n", "3405 False 173\n", "3406 False 174\n", "3407 False 175\n", "3408 False 176\n", "3409 False 177\n", "3410 False 178\n", "3411 False 179\n", "3412 False 180\n", "3413 False 181\n", "3414 False 182\n", "3415 False 183\n", "3416 False 184\n", "3417 False 185\n", "3418 False 186\n", "3419 False 187\n", "3420 False 188\n", "3421 False 189\n", "3422 False 190\n", "3423 False 191\n", "3424 False 192\n", "3425 False 193\n", "3426 False 194\n", "3427 False 195\n", "3428 False 196\n", "3429 False 197\n", "3430 False 198\n", "3431 False 199\n", "3432 False 200\n", "3433 False 201\n", "3434 False 202\n", "3435 False 203\n", "3436 False 204\n", "3437 False 205\n", "3438 False 206\n", "3439 False 207\n", "3440 False 208\n", "3441 False 209\n", "3442 False 210\n", "3443 False 211\n", "3444 False 212\n", "3445 False 213\n", "3446 False 214\n", "3447 False 215\n", "3448 False 216\n", "3449 False 217\n", "3450 False 218\n", "3451 False 219\n", "3452 False 220\n", "3453 False 221\n", "3454 False 222\n", "3455 False 223\n", "3456 False 224\n", "3457 False 225\n", "3458 False 226\n", "3459 False 227\n", "3460 False 228\n", "3461 False 229\n", "3462 False 230\n", "3463 False 231\n", "3464 False 232\n", "3465 False 233\n", "3466 False 234\n", "3467 False 235\n", "3468 False 236\n", "3469 False 237\n", "3470 False 238\n", "3471 False 239\n", "3472 False 240\n", "3473 False 241\n", "3474 False 242\n", "3475 False 243\n", "3476 False 244\n", "3477 False 245\n", "3478 False 246\n", "3479 False 247\n", "3480 False 248\n", "3481 False 249\n", "3482 False 250\n", "3483 False 251\n", "3484 False 252\n", "3485 False 253\n", "3486 False 254\n", "3487 False 255\n", "3488 False 256\n", "3489 False 257\n", "3490 False 258\n", "3491 False 259\n", "3492 False 260\n", "3493 False 261\n", "3494 False 262\n", "3495 False 263\n", "3496 False 264\n", "3497 False 265\n", "3498 False 266\n", "3499 False 267\n", "3500 False 268\n", "3501 False 269\n", "3502 False 270\n", "3503 False 271\n", "3504 False 272\n", "3505 False 273\n", "3506 False 274\n", "3507 False 275\n", "3508 False 276\n", "3509 False 277\n", "3510 False 278\n", "3511 False 279\n", "3512 False 280\n", "3513 False 281\n", "3514 False 282\n", "3515 False 283\n", "3516 False 284\n", "3517 False 285\n", "3518 False 286\n", "3519 False 287\n", "3520 False 288\n", "3521 False 289\n", "3522 False 290\n", "3523 False 291\n", "3524 False 292\n", "3525 False 293\n", "3526 False 294\n", "3527 False 295\n", "3528 False 296\n", "3529 False 297\n", "3530 False 298\n", "3531 False 299\n", "3532 False 300\n", "3533 False 301\n", "3534 False 302\n", "3535 False 303\n", "3536 False 304\n", "3537 False 305\n", "3538 False 306\n", "3539 False 307\n", "3540 False 308\n", "3541 False 309\n", "3542 False 310\n", "3543 False 311\n", "3544 False 312\n", "3545 False 313\n", "3546 False 314\n", "3547 False 315\n", "3548 False 316\n", "3549 False 317\n", "3550 False 318\n", "3551 False 319\n", "3552 False 320\n", "3553 False 321\n", "3554 False 322\n", "3555 False 323\n", "3556 False 324\n", "3557 False 325\n", "3558 False 326\n", "3559 False 327\n", "3560 False 328\n", "3561 False 329\n", "3562 False 330\n", "3563 False 331\n", "3564 False 332\n", "3565 False 333\n", "3566 False 334\n", "3567 False 335\n", "3568 False 336\n", "3569 False 337\n", "3570 False 338\n", "3571 False 339\n", "3572 False 340\n", "3573 False 341\n", "3574 False 342\n", "3575 False 343\n", "3576 False 344\n", "3577 False 345\n", "3578 False 346\n", "3579 False 347\n", "3580 False 348\n", "3581 False 349\n", "3582 False 350\n", "3583 False 351\n", "3584 False 352\n", "3585 False 353\n", "3586 False 354\n", "3587 False 355\n", "3588 False 356\n", "3589 False 357\n", "3590 False 358\n", "3591 False 359\n", "3592 False 360\n", "3593 False 361\n", "3594 False 362\n", "3595 False 363\n", "3596 False 364\n", "3597 False 365\n", "3598 False 366\n", "3599 False 367\n", "3600 False 368\n", "3601 False 369\n", "3602 False 370\n", "3603 False 371\n", "3604 False 372\n", "3605 False 373\n", "3606 False 374\n", "3607 False 375\n", "3608 False 376\n", "3609 False 377\n", "3610 False 378\n", "3611 False 379\n", "3612 False 380\n", "3613 False 381\n", "3614 False 382\n", "3615 False 383\n", "3616 False 384\n", "3617 False 385\n", "3618 False 386\n", "3619 False 387\n", "3620 False 388\n", "3621 False 389\n", "3622 False 390\n", "3623 False 391\n", "3624 False 392\n", "3625 False 393\n", "3626 False 394\n", "3627 False 395\n", "3628 False 396\n", "3629 False 397\n", "3630 False 398\n", "3631 False 399\n", "3632 False 400\n", "3633 False 401\n", "3634 False 402\n", "3635 False 403\n", "3636 False 404\n", "3637 True 0\n", "3638 True 0\n", "3639 True 0\n", "3640 True 0\n", "3641 True 0\n", "3642 True 0\n", "3643 True 0\n", "3644 True 0\n", "3645 True 0\n", "3646 True 0\n", "3647 True 0\n", "3648 True 0\n", "3649 True 0\n", "3650 True 0\n", "3651 True 0\n", "3652 True 0\n", "3653 True 0\n", "3654 True 0\n" ] } ], "source": [ "print(\"AssymUnit? equivalent_res\")\n", "sym_info = p.conformation().Symmetry_Info()\n", "for i in range(1, p.size()+1):\n", " print(i, sym_info.bb_is_independent(i), sym_info.bb_follows(i))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Which residues are our original pose residues? Note that the final residues are called `Virtual` residues. Virtual residues are not scored. They have coordinates, and can move, but simply result in a score of zero. They are useful in some contexts to hide a part of the pose from the scoring machinery, and there are movers that can change residues to and from virtual. In this case, they are used for the FoldTree - in order to allow refinement of the full crystal environment. They allow relative movement of each subunit relative to each other. There are two virtual residues for each subunit" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Residue 3654: VRT (XXX, X):\n", "Base: VRT\n", " Properties: LIGAND VIRTUAL_RESIDUE\n", " Variant types:\n", " Main-chain atoms:\n", " Backbone atoms: \n", " Side-chain atoms: ORIG X Y \n", "Atom Coordinates:\n", " ORIG: 126.048, 44.0754, 19.9707 (virtual)\n", " X : 127.048, 44.0754, 19.9707 (virtual)\n", " Y : 126.048, 43.0754, 19.9707 (virtual)\n", "Mirrored relative to coordinates in ResidueType: FALSE\n", "\n" ] } ], "source": [ "print(p.residue(3654))" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total Subunits: 9.0\n", "Total Subunits: 9\n" ] } ], "source": [ "print(\"Total Subunits:\", (3654-18)/404)\n", "print(\"Total Subunits:\", sym_info.subunits())" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.scoring.ScoreFunctionFactory: \u001b[0mSCOREFUNCTION: \u001b[32mref2015\u001b[0m\n", "\u001b[0mcore.scoring.ScoreFunctionFactory: \u001b[0mThe -include_sugars flag was used with no sugar_bb weight set in the weights file. Setting sugar_bb weight to 1.0 by default.\n", "-531.2534669946483\n", "-1132.7274634504747\n" ] } ], "source": [ "score = get_score_function()\n", "print(score(original))\n", "print(score(p))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running Protocols with Symmetry\n", "\n", "Now, lets try running a minimization with symmetry on. " ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "mm = MoveMap()\n", "mm.set_bb(True)\n", "mm.set_chi(True)\n", "minmover = rosetta.protocols.minimization_packing.MinMover()\n", "minmover.score_function(score)\n", "minmover.set_movemap(mm)\n", "if not os.getenv(\"DEBUG\"):\n", " minmover.apply(p)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-1147.371462425749" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "score(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How does our pose look? For being such a large pose, how was the speed of minimization? \n", "\n", "How does this compare to our refined pose? Try to copy a subunit to a new object in PyMol. Then use the align command to align it to our assymetric unit. What is the RMSD?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now lets pack with our symmetric structure. " ] }, { "cell_type": "code", "execution_count": 68, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mcore.conformation.symmetry.util: \u001b[0m=================== SYM FOLD TREE, jump notation: =symfixed= *indep* #symdof# jump[=follows] ========================\n", "VRT_0_0_0_0(3637)\n", "|----#j10#--->VRT_0_0_0_0_base(3638)----#j1#------>1:Sub1A(1-400)\n", "|----=j11=--->VRT_1_1_0_n1(3643)---j12=10--->VRT_1_1_0_n1_base(3644)----j2=1---->1213:Sub4A(1213-1612)\n", "|----=j13=--->VRT_2_1_1_0(3645)---j14=10--->VRT_2_1_1_0_base(3646)----j3=1---->1617:Sub5A(1617-2016)\n", "|----=j15=--->VRT_3_0_n1_0(3647)---j16=10--->VRT_3_0_n1_0_base(3648)----j4=1---->2021:Sub6A(2021-2420)\n", "|----=j17=--->VRT_3_1_0_0(3649)---j18=10--->VRT_3_1_0_0_base(3650)----j5=1---->2425:Sub7A(2425-2824)\n", "|----=j19=--->VRT_4_2_1_0(3639)---j20=10--->VRT_4_2_1_0_base(3640)----j6=1---->405:Sub2A(405-804)\n", "|----=j21=--->VRT_4_2_1_n1(3641)---j22=10--->VRT_4_2_1_n1_base(3642)----j7=1---->809:Sub3A(809-1208)\n", "|----=j23=--->VRT_5_0_1_0(3651)---j24=10--->VRT_5_0_1_0_base(3652)----j8=1---->2829:Sub8A(2829-3228)\n", "\\----=j25=--->VRT_5_1_1_0(3653)---j26=10--->VRT_5_1_1_0_base(3654)----j9=1---->3233:Sub9A(3233-3632)\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mFound disulfide between residues 5 32\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 5 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 32 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 5 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 32 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 409 to 436\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 813 to 840\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1217 to 1244\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1621 to 1648\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2025 to 2052\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2429 to 2456\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2833 to 2860\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 3237 to 3264\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 5 to 32\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mFound disulfide between residues 302 385\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 302 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 385 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 302 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mcurrent variant for 385 CYD\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 706 to 789\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1110 to 1193\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1514 to 1597\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 1918 to 2001\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2322 to 2405\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 2726 to 2809\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 3130 to 3213\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 3534 to 3617\n", "\u001b[0mcore.conformation.symmetry.Conformation: \u001b[0mAdd symmetric chemical bond 302 to 385\n", "\u001b[0mcore.conformation.carbohydrates.GlycanTreeSet: \u001b[0mSetting up Glycan Trees\n", "\u001b[0mcore.conformation.carbohydrates.GlycanTreeSet: \u001b[0mFound 9 glycan trees.\n", "\u001b[0mprotocols.simple_moves_symmetry.SymDockingInitialPerturbation: \u001b[0mReading options...\n" ] } ], "source": [ "from rosetta.core.pack.task import *\n", "from rosetta.core.pack.task.operation import *\n", "\n", "packer = PackRotamersMover()\n", "tf = rosetta.core.pack.task.TaskFactory()\n", "\n", "tf.push_back(RestrictToRepacking())\n", "tf.push_back(IncludeCurrent())\n", "packer.task_factory(tf)\n", "\n", "p = original.clone()\n", "symmetrize.apply(p)" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\u001b[0mprotocols.minimization_packing.PackRotamersMover: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m undefined ScoreFunction -- creating a default one\n", "\u001b[0mcore.scoring.ScoreFunctionFactory: \u001b[0mSCOREFUNCTION: \u001b[32mref2015\u001b[0m\n", "\u001b[0mcore.scoring.ScoreFunctionFactory: \u001b[0mThe -include_sugars flag was used with no sugar_bb weight set in the weights file. Setting sugar_bb weight to 1.0 by default.\n", "\u001b[0mcore.pack.rotamer_set.RotamerSet_: \u001b[0m\u001b[1m[ WARNING ]\u001b[0m including current in order to get at least 1 rotamer !!!!!! 180 ASN:N-glycosylated\n", "\u001b[0mcore.pack.pack_rotamers: \u001b[0mbuilt 5259 rotamers at 404 positions.\n", "\u001b[0mcore.pack.interaction_graph.interaction_graph_factory: \u001b[0mInstantiating DensePDInteractionGraph\n" ] } ], "source": [ "if not os.getenv(\"DEBUG\"):\n", " packer.apply(p)" ] }, { "cell_type": "code", "execution_count": 70, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "packed -1960.9189300248413\n" ] } ], "source": [ "print(\"packed\", score(p))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusions\n", "\n", "Symmetry is a useful tool in the Rosetta Library. There are also selectors and movers that you may find useful, such as the `AsymmetricUnitSelector` in `rosetta.core.select.residue_selectors` and the `ExtractAsymmetricUnitMover`, which will give you back just the single subunit, without any asymetric partners, and the `ExtractAsymmetricPoseMover`, which will remove 'symmetry' information and give you back a pose with all the subunits. The later of these can be found by importing `rosetta.protocols.symmetry`.\n", "\n", "Note that not ALL protocols will respect symmetry - so please check the original documentation to see if symmetry is supported. If you are unsure, please email the developer." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Chapter contributors:**\n", "\n", "- Jared Adolf-Bryfogle (Scripps; Institute for Protein Innovation)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Using Rosetta Gen KIC](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/09.01-Using-Gen-KIC.ipynb) | [Contents](toc.ipynb) | [Index](index.ipynb) | [Working With Density](http://nbviewer.jupyter.org/github/RosettaCommons/PyRosetta.notebooks/blob/master/notebooks/11.00-Working-With-Density.ipynb) >

\"Open" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.1" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }