Análise de Impacto de Mudanças em Software Preparação dos Dados Gilson Pereira dos Santos Júnior Universidade Federal de Campina Grande Departamento de Sistemas e Computação Disciplina: Mineração de Dados Professor: Marcus Sampaio A macro etapa de preparação dos dados engloba as etapas de seleção e préprocessamento dos dados. Nessa macro etapa, efetua-se a seleção da base de dados, escolha atributos e discretização dos dados, além da sua limpeza e amostragem. A base de dados selecionada foi o arquivo impact_analyser.txt apresentado no Anexo I. Algumas características foram levadas em consideração para preparação dos dados: Foram consideradas apenas mudanças realizadas nos arquivos .java (classes), uma vez que os arquivos com essa extensão representam código-fonte do software. A estratégia utilizada para identificar os arquivos que participaram do mesmo commit foi: commits realizados pelo mesmo autor, com o mesmo comentário e que pertenciam a mesma janela de tempo. Nesse caso, utilizou-se uma janela deslizante de 200 segundos como sugerido por Zimmerman et al. como forma mais adequada para realizar esta tarefa. [ZW04] Em seguida, filtrou-se os dados, selecionando apenas os arquivos envolvidos em mais de 1 (um) commit e arquivos com quantidade de commits igual ou superior a 20 (vinte). Esses valores foram escolhidos acreditando-se que classes com apenas 1 (um) commit não representam mudanças, enquanto classes com mais de 20 (vinte) commits representam mudanças estruturais e não evolução de software que é nosso real interesse. Após realizada a limpeza dos dados o arquivo no formato .arff foi gerado como apresentado no Anexo II. Tal arquivo é constituído por 66 (sessenta e seis) atributos que representam as classes que evoluiram durante o desenvolvimento do software. Referência Bibliográficas [ZW04] T. Zimmerman and P. Weißgerber (2004) " Preprocessing CVS data for finegrained analysis ", Proc. International Workshop on Mining Software Repositories (MSR 2004) 2004. ANEXO I – Arquivo impact_analyser.txt Devido ao tamanho da base de dados este arquivo encontra-se em anexo e pode ser acessado através do link impact_analyser.txt ANEXO II – Arquivo impact_analyser.arff @relation 'changelog-weka.filters.unsupervised.attribute.RemoveR7,19,28,31,34,38-40,42,47,49-55,58,62,76' @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/Algo rithmsFactory.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/Impa ctAnalyzer.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/Type OfAlgorithm.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/Type OfRefactoring.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/AnalysisStrategy.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/Command.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/RemoveCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/ResultManager.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/ResultOfAnalisis.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/ResultOfAnalysis.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/TypeOfAlgorithm.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/AddEntityCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/AddInheritanceCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/ChangeAttributeCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/ChangeReturnTypeCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/ChangeSemanticsCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/ChangeSignatureCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/ChangeVisibilityCommandTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/Command.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/MethodNameChangeCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/MethodParameterAddCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/ModificationCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/RemoveCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/RemoveInheritanceCommand.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/test/AddInheritanceCommandTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/test/ChangeVisibilityCommandTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/test/MethodNameChangeCommandTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/command/test/RemoveInheritanceCommandTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/anal ysisalgorithms/factory/AlgorithmsFactory.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/data /ImpactedElementsRepository.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/data /ImpactedTree.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/data /ResultOfAnalysis.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/faca de/AnalyzerFacade.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test /AllClassesInSuiteTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test /AllTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test /AllTests.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test /InheritanceRemoveTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test /TestRunner.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test /newformat/InheritanceChangeVisibilityTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test /newformat/InheritanceRemoveTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/AllTests.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/BaseTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/ChangeSignatureTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UIAddTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UIChangeAttributeTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UIChangeReturnTypeTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UIChangeSemanticsTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UIChangeSignatureTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UIChangeVisibilityTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UIInheritanceRemoveTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UIOtherTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UIRemoveTest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/test cases/UITest.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/ui/A nalyzerFacade.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/ui/I nexistentCommandException.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/ui/I nexistentTypeOfAlgorithmException.java {y,n} @attribute impact_analyzer/impact_analyzer/ImpactAnalyzer/src/impactanalyzer/ui/t est/UITest.java {y,n} @data ?,y,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,y ?,y,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,y,y y,y,y,y,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,y,y y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y ?,y,?,?,y,y,y,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y ?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y ?,?,?,?,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y ?,?,?,?,?,?,y,y,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y ?,?,?,y,?,y,y,?,y,?,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,y,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,y,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,y,?,?,?,?,?,y,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,y,y,?,?,?,?,?,?,y,y,?,?,?,?,?,y,?,?,?,y,y,?,y,?,?,y,?,y,y,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,y,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,y,?,y,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,y,y,?,?,y,?,?,y,?,?,?,y, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,y,y, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,y,y,?,y,y,y,?,y,y,?,y,y,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,y,?,?,?,y, y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,y,?,?,?,?, y,?,?,?,?,y,?,?,?,y,?,?,?,y,?,y,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,? ?,y,?,?,y,?,?,?,?,?,?,y,y,y,y,y,y,?,y,?,?,y,y,y,y,y,?,y,?,?,?,?,y,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,y,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,y,y,y,y,?,?,?,y,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?,?,?,?,y,y,y,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,y,?,y,?,?,?,?,?,?,?,?,?,y,?,?,?,? ?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,y, ?,?,?,?,?,y,?,y,y,?,y,?,y,y,?,y,y,y,?,?,?,? ?,?,?,y,?,?,?,?,?,?,?,?,?,y,?,y,y,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,y,y,?,y,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?, ?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,y,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?, ?,y,y,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,y,?,?,?,?,?,?,y,y,?,?,?, ?,y,y,y,y,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?, ?,?,?,?,?,?,y,?,?,?,?,?,?,y,y,?,y,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?, ?,?,y,y,y,y,?,?,y,y,y,y,y,y,?,?,y,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,y,y,y,?,y,?,y,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,y,?,?,y,?,?,?,y,y,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,y,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,y,y,y,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,y,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,y,?,?,y,?,?,?,?,y,?,?,?,?,?,?,?,?,y,?,?,?,y,?,?,?,?,?,?,?,y,y,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ?,?,?,?,?,?,?,?,?,?,?,?,y,?,?,?,?,?,y,?,?,?,?,y,?,?,?,?,?,?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?