#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>
 
int conta(char c, char *s){
    int num_vezes=0;
    while(*s!='\0'){
        if(*s== '\t'){
            num_vezes++;
        }
        s++;
    }
    return num_vezes;
}
 
int ordenar(int vetorDeNumeros[], int tamanhoVetor){
    int i;
    int j;
    int temp;
    for(i=0;i<tamanhoVetor;i++){
        for(j=0;j<tamanhoVetor;j++){
            if(vetorDeNumeros[i] < vetorDeNumeros[j]){
                temp = vetorDeNumeros[i];
                vetorDeNumeros[i] = vetorDeNumeros[j];
                vetorDeNumeros[j] = temp;
            }
        }
    }
 
    return vetorDeNumeros[0];
}
 
void clean(char * s){
     int i=0;
     while(s[i]!='\0'){
          if(s[i]=='\n'){
             s[i]='\0';
          }
          i++;
     }
}
 
void RemoveSpaces(char* source)
{
  char* i = source;
  char* j = source;
  while(*j != 0)
  {
    *i = *j++;
    if(*i != ' ')
      i++;
  }
  *i = 0;
}
 
void cleanequal(char * s){
     int i=0;
     while(s[i]!='\0'){
          if(s[i]== '='){
             s[i]=' ';
          }
          i++;
     }
}
 
void append(char* s, char c)
{
        s[len] = c;
        s[len+1] = '\0';
}
 
char* expand_cell_references(const char* f, const char* const l, char* o); /*the magic engine*/
const char* get_cell_value(const char* coordinate_b, const char* coordinate_e);
 
//localiza pelo numero maximo de coisas que ele vai ler
static char matris[30][26][302] = {{{0}}};
 
int main() {
    //int tamanho = 0;
    char vetor[302];
    int m;
    int k=0;
    int colunas = 0;
    int vetorDeNumeros[30] = {0};
    //inicia-se o loop
    while(1) {
        if(
                !fgets(vetor
, 302, stdin
) //Recebe os dados                 || strcmp(vetor
, "\n") == 0) //Verifica se tem a quebra de linha         {
            break;
        }
        //Aqui eu insiro na funcao o vetor
        char *s = vetor;
        //Recebo a quantia de \t
        m = conta('\t', s);
        //Passo pra posicao do vetor, o numero de colunas
        vetorDeNumeros[k] = m+1;
        //Recebo o resultado do bubble sort
        colunas = ordenar(vetorDeNumeros, k+1);
        //faz a colocacao de cada elemento dentro de cada celula, tentei por funcao mas nao deu muito certo
        char *ponteiro;
        int j=0;
        while(j<colunas) {
            ponteiro 
= strtok(vetor
, "\t");            while(ponteiro != NULL) {
                strcpy(matris
[k
][j
], ponteiro
);                 ponteiro 
= strtok(NULL
, "\t");                //REMOVE OS \N DESNECESSARIOS
                clean(matris[k][j]);
                //REMOVE OS IGUAIS
                cleanequal((matris[k][j]));
                //REMOVE OS ESPAÇOS GERADOS PELOS ESPAÇOS
                RemoveSpaces(matris[k][j]);
                j++;
            }
        }
        //Quantia de linhas que foram
        k++;
    }
    //int L = 0, linha=0;
    //char col;
    int i, c;
    for(i = 0; i < k; i++) {
        for(c = 0; c < colunas; c++) {
            //printf("linha: %d coluna: %c >> |%s|", i, c, matris[i][c]);
            //int line;
            //int offset = 0, readCharCount;
            //char op;
            //char troca[301];
            //char buffer[32];
            char out[1024] = {0};
            const char* value = matris[i][c];
            expand_cell_references
(value
, value
+strlen(value
), out
);            printf("%s\t", out
); /* Should be fine, really, as long as input fits inside matris */             // printf("%s\t", matris[i][c]);
        }
    }
    /*
        printf("%d lin, %d col\n\n", k, colunas);
        int w,z;
        for(w=0;w<k;w++){
            for(z=0;z<colunas;z++){
                printf("%s\t", matris[w][z]);
 
            }
            printf("\n");
        }
    */
//system("pause");
    return 0;
}
 
const char* get_cell_value(const char* coordinate_b, const char* coordinate_e)
{
#ifdef DEBUG
    static const size_t maxrows = (sizeof(matris)/sizeof(*matris));
    static const size_t maxcols = (sizeof(matris[0])/sizeof(*matris[0]));
#endif
    size_t col = 0, row = 0;
    const char* it;
    for (it=coordinate_b; it != coordinate_e; ++it)
    {
        if (*it >= 'A' && *it <= 'Z')
            col = 26*col + (*it - 'A');
        if (*it >= '0' && *it <= '9')
            row = 10*row + (*it - '0'); /* or use atoi and friends */
    }
    row--; /* 1-based row nums in Excel */
 
#ifdef DEBUG
    assert(col
>=0 && col 
< maxcols
);     assert(row
>=0 && row 
< maxrows
); #endif
 
    return matris[row][col]; /* 1-based indexes in Excel */
}
 
char* expand_cell_references(const char* f, const char* const l, char* o)
{
    enum parser_state {
        other,
        in_coord_col,
        in_coord_row
    } state = other;
 
    /*temporary storage for coordinates being parsed:*/
    char accum[16] = {0};
    char* accit = accum;
    while (f!=l)
    {
        switch(state) /*dummy, the transitions flow in fallthrough order for now*/
        {
            case other:
                *(accit = accum) = 0; /*reset the accumulator*/
                while (f!=l && !(*f>='A' && *f<='Z'))
                    *o++ = *f++;
                /*fallthrough*/
            case in_coord_col:
                while (f!=l && *f>='A' && *f<='Z')
                    *accit++ = *f++;
                /*fallthrough*/
            case in_coord_row:
                {
                    const char* expanded = accum;
                    if (f!=l && *f>='0' && *f<='9')
                    {
                        while (f!=l && *f>='0' && *f<='9')
                            *accit++ = *f++;
                        expanded = get_cell_value(accum, accit);
                    }
                    else
                    {
                        *accit = 0;
                    }
                    while (*expanded)
                        *o++ = *expanded++;
                    continue; /*state = other;*/
                }
        }
    }
    return o;
}
 
				I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0eXBlLmg+CiNpbmNsdWRlIDxhc3NlcnQuaD4KCmludCBjb250YShjaGFyIGMsIGNoYXIgKnMpewogICAgaW50IG51bV92ZXplcz0wOwogICAgd2hpbGUoKnMhPSdcMCcpewogICAgICAgIGlmKCpzPT0gJ1x0Jyl7CiAgICAgICAgICAgIG51bV92ZXplcysrOwogICAgICAgIH0KICAgICAgICBzKys7CiAgICB9CiAgICByZXR1cm4gbnVtX3ZlemVzOwp9CgppbnQgb3JkZW5hcihpbnQgdmV0b3JEZU51bWVyb3NbXSwgaW50IHRhbWFuaG9WZXRvcil7CiAgICBpbnQgaTsKICAgIGludCBqOwogICAgaW50IHRlbXA7CiAgICBmb3IoaT0wO2k8dGFtYW5ob1ZldG9yO2krKyl7CiAgICAgICAgZm9yKGo9MDtqPHRhbWFuaG9WZXRvcjtqKyspewogICAgICAgICAgICBpZih2ZXRvckRlTnVtZXJvc1tpXSA8IHZldG9yRGVOdW1lcm9zW2pdKXsKICAgICAgICAgICAgICAgIHRlbXAgPSB2ZXRvckRlTnVtZXJvc1tpXTsKICAgICAgICAgICAgICAgIHZldG9yRGVOdW1lcm9zW2ldID0gdmV0b3JEZU51bWVyb3Nbal07CiAgICAgICAgICAgICAgICB2ZXRvckRlTnVtZXJvc1tqXSA9IHRlbXA7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHZldG9yRGVOdW1lcm9zWzBdOwp9Cgp2b2lkIGNsZWFuKGNoYXIgKiBzKXsKICAgICBpbnQgaT0wOwogICAgIHdoaWxlKHNbaV0hPSdcMCcpewogICAgICAgICAgaWYoc1tpXT09J1xuJyl7CiAgICAgICAgICAgICBzW2ldPSdcMCc7CiAgICAgICAgICB9CiAgICAgICAgICBpKys7CiAgICAgfQp9Cgp2b2lkIFJlbW92ZVNwYWNlcyhjaGFyKiBzb3VyY2UpCnsKICBjaGFyKiBpID0gc291cmNlOwogIGNoYXIqIGogPSBzb3VyY2U7CiAgd2hpbGUoKmogIT0gMCkKICB7CiAgICAqaSA9ICpqKys7CiAgICBpZigqaSAhPSAnICcpCiAgICAgIGkrKzsKICB9CiAgKmkgPSAwOwp9Cgp2b2lkIGNsZWFuZXF1YWwoY2hhciAqIHMpewogICAgIGludCBpPTA7CiAgICAgd2hpbGUoc1tpXSE9J1wwJyl7CiAgICAgICAgICBpZihzW2ldPT0gJz0nKXsKICAgICAgICAgICAgIHNbaV09JyAnOwogICAgICAgICAgfQogICAgICAgICAgaSsrOwogICAgIH0KfQoKdm9pZCBhcHBlbmQoY2hhciogcywgY2hhciBjKQp7CiAgICAgICAgaW50IGxlbiA9IHN0cmxlbihzKTsKICAgICAgICBzW2xlbl0gPSBjOwogICAgICAgIHNbbGVuKzFdID0gJ1wwJzsKfQoKY2hhciogZXhwYW5kX2NlbGxfcmVmZXJlbmNlcyhjb25zdCBjaGFyKiBmLCBjb25zdCBjaGFyKiBjb25zdCBsLCBjaGFyKiBvKTsgLyp0aGUgbWFnaWMgZW5naW5lKi8KY29uc3QgY2hhciogZ2V0X2NlbGxfdmFsdWUoY29uc3QgY2hhciogY29vcmRpbmF0ZV9iLCBjb25zdCBjaGFyKiBjb29yZGluYXRlX2UpOwoKLy9sb2NhbGl6YSBwZWxvIG51bWVybyBtYXhpbW8gZGUgY29pc2FzIHF1ZSBlbGUgdmFpIGxlcgpzdGF0aWMgY2hhciBtYXRyaXNbMzBdWzI2XVszMDJdID0ge3t7MH19fTsKCmludCBtYWluKCkgewogICAgLy9pbnQgdGFtYW5obyA9IDA7CiAgICBjaGFyIHZldG9yWzMwMl07CiAgICBpbnQgbTsKICAgIGludCBrPTA7CiAgICBpbnQgY29sdW5hcyA9IDA7CiAgICBpbnQgdmV0b3JEZU51bWVyb3NbMzBdID0gezB9OwogICAgLy9pbmljaWEtc2UgbyBsb29wCiAgICB3aGlsZSgxKSB7CiAgICAgICAgaWYoCiAgICAgICAgICAgICAgICAhZmdldHModmV0b3IsIDMwMiwgc3RkaW4pIC8vUmVjZWJlIG9zIGRhZG9zCiAgICAgICAgICAgICAgICB8fCBzdHJjbXAodmV0b3IsICJcbiIpID09IDApIC8vVmVyaWZpY2Egc2UgdGVtIGEgcXVlYnJhIGRlIGxpbmhhCiAgICAgICAgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLy9BcXVpIGV1IGluc2lybyBuYSBmdW5jYW8gbyB2ZXRvcgogICAgICAgIGNoYXIgKnMgPSB2ZXRvcjsKICAgICAgICAvL1JlY2VibyBhIHF1YW50aWEgZGUgXHQKICAgICAgICBtID0gY29udGEoJ1x0Jywgcyk7CiAgICAgICAgLy9QYXNzbyBwcmEgcG9zaWNhbyBkbyB2ZXRvciwgbyBudW1lcm8gZGUgY29sdW5hcwogICAgICAgIHZldG9yRGVOdW1lcm9zW2tdID0gbSsxOwogICAgICAgIC8vUmVjZWJvIG8gcmVzdWx0YWRvIGRvIGJ1YmJsZSBzb3J0CiAgICAgICAgY29sdW5hcyA9IG9yZGVuYXIodmV0b3JEZU51bWVyb3MsIGsrMSk7CiAgICAgICAgLy9mYXogYSBjb2xvY2FjYW8gZGUgY2FkYSBlbGVtZW50byBkZW50cm8gZGUgY2FkYSBjZWx1bGEsIHRlbnRlaSBwb3IgZnVuY2FvIG1hcyBuYW8gZGV1IG11aXRvIGNlcnRvCiAgICAgICAgY2hhciAqcG9udGVpcm87CiAgICAgICAgaW50IGo9MDsKICAgICAgICB3aGlsZShqPGNvbHVuYXMpIHsKICAgICAgICAgICAgcG9udGVpcm8gPSBzdHJ0b2sodmV0b3IsICJcdCIpOwogICAgICAgICAgICB3aGlsZShwb250ZWlybyAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICBzdHJjcHkobWF0cmlzW2tdW2pdLCBwb250ZWlybyk7CiAgICAgICAgICAgICAgICBwb250ZWlybyA9IHN0cnRvayhOVUxMLCAiXHQiKTsKICAgICAgICAgICAgICAgIC8vUkVNT1ZFIE9TIFxOIERFU05FQ0VTU0FSSU9TCiAgICAgICAgICAgICAgICBjbGVhbihtYXRyaXNba11bal0pOwogICAgICAgICAgICAgICAgLy9SRU1PVkUgT1MgSUdVQUlTCiAgICAgICAgICAgICAgICBjbGVhbmVxdWFsKChtYXRyaXNba11bal0pKTsKICAgICAgICAgICAgICAgIC8vUkVNT1ZFIE9TIEVTUEHDh09TIEdFUkFET1MgUEVMT1MgRVNQQcOHT1MKICAgICAgICAgICAgICAgIFJlbW92ZVNwYWNlcyhtYXRyaXNba11bal0pOwogICAgICAgICAgICAgICAgaisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vUXVhbnRpYSBkZSBsaW5oYXMgcXVlIGZvcmFtCiAgICAgICAgaysrOwogICAgfQogICAgLy9pbnQgTCA9IDAsIGxpbmhhPTA7CiAgICAvL2NoYXIgY29sOwogICAgaW50IGksIGM7CiAgICBmb3IoaSA9IDA7IGkgPCBrOyBpKyspIHsKICAgICAgICBmb3IoYyA9IDA7IGMgPCBjb2x1bmFzOyBjKyspIHsKICAgICAgICAgICAgLy9wcmludGYoImxpbmhhOiAlZCBjb2x1bmE6ICVjID4+IHwlc3wiLCBpLCBjLCBtYXRyaXNbaV1bY10pOwogICAgICAgICAgICAvL2ludCBsaW5lOwogICAgICAgICAgICAvL2ludCBvZmZzZXQgPSAwLCByZWFkQ2hhckNvdW50OwogICAgICAgICAgICAvL2NoYXIgb3A7CiAgICAgICAgICAgIC8vY2hhciB0cm9jYVszMDFdOwogICAgICAgICAgICAvL2NoYXIgYnVmZmVyWzMyXTsKICAgICAgICAgICAgY2hhciBvdXRbMTAyNF0gPSB7MH07CiAgICAgICAgICAgIGNvbnN0IGNoYXIqIHZhbHVlID0gbWF0cmlzW2ldW2NdOwogICAgICAgICAgICBleHBhbmRfY2VsbF9yZWZlcmVuY2VzKHZhbHVlLCB2YWx1ZStzdHJsZW4odmFsdWUpLCBvdXQpOwogICAgICAgICAgICBwcmludGYoIiVzXHQiLCBvdXQpOyAvKiBTaG91bGQgYmUgZmluZSwgcmVhbGx5LCBhcyBsb25nIGFzIGlucHV0IGZpdHMgaW5zaWRlIG1hdHJpcyAqLwogICAgICAgICAgICAvLyBwcmludGYoIiVzXHQiLCBtYXRyaXNbaV1bY10pOwogICAgICAgIH0KICAgICAgICBwcmludGYoIlxuIik7CiAgICB9CiAgICAvKgogICAgICAgIHByaW50ZigiJWQgbGluLCAlZCBjb2xcblxuIiwgaywgY29sdW5hcyk7CiAgICAgICAgaW50IHcsejsKICAgICAgICBmb3Iodz0wO3c8azt3KyspewogICAgICAgICAgICBmb3Ioej0wO3o8Y29sdW5hczt6KyspewogICAgICAgICAgICAgICAgcHJpbnRmKCIlc1x0IiwgbWF0cmlzW3ddW3pdKTsKCiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgIH0KICAgICovCiAgICBwcmludGYoIlxuIik7Ci8vc3lzdGVtKCJwYXVzZSIpOwogICAgcmV0dXJuIDA7Cn0KCmNvbnN0IGNoYXIqIGdldF9jZWxsX3ZhbHVlKGNvbnN0IGNoYXIqIGNvb3JkaW5hdGVfYiwgY29uc3QgY2hhciogY29vcmRpbmF0ZV9lKQp7CiNpZmRlZiBERUJVRwogICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhyb3dzID0gKHNpemVvZihtYXRyaXMpL3NpemVvZigqbWF0cmlzKSk7CiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1heGNvbHMgPSAoc2l6ZW9mKG1hdHJpc1swXSkvc2l6ZW9mKCptYXRyaXNbMF0pKTsKI2VuZGlmCiAgICBzaXplX3QgY29sID0gMCwgcm93ID0gMDsKICAgIGNvbnN0IGNoYXIqIGl0OwogICAgZm9yIChpdD1jb29yZGluYXRlX2I7IGl0ICE9IGNvb3JkaW5hdGVfZTsgKytpdCkKICAgIHsKICAgICAgICBpZiAoKml0ID49ICdBJyAmJiAqaXQgPD0gJ1onKQogICAgICAgICAgICBjb2wgPSAyNipjb2wgKyAoKml0IC0gJ0EnKTsKICAgICAgICBpZiAoKml0ID49ICcwJyAmJiAqaXQgPD0gJzknKQogICAgICAgICAgICByb3cgPSAxMCpyb3cgKyAoKml0IC0gJzAnKTsgLyogb3IgdXNlIGF0b2kgYW5kIGZyaWVuZHMgKi8KICAgIH0KICAgIHJvdy0tOyAvKiAxLWJhc2VkIHJvdyBudW1zIGluIEV4Y2VsICovCgojaWZkZWYgREVCVUcKICAgIGFzc2VydChjb2w+PTAgJiYgY29sIDwgbWF4Y29scyk7CiAgICBhc3NlcnQocm93Pj0wICYmIHJvdyA8IG1heHJvd3MpOwojZW5kaWYKCiAgICByZXR1cm4gbWF0cmlzW3Jvd11bY29sXTsgLyogMS1iYXNlZCBpbmRleGVzIGluIEV4Y2VsICovCn0KCmNoYXIqIGV4cGFuZF9jZWxsX3JlZmVyZW5jZXMoY29uc3QgY2hhciogZiwgY29uc3QgY2hhciogY29uc3QgbCwgY2hhciogbykKewogICAgZW51bSBwYXJzZXJfc3RhdGUgewogICAgICAgIG90aGVyLAogICAgICAgIGluX2Nvb3JkX2NvbCwKICAgICAgICBpbl9jb29yZF9yb3cKICAgIH0gc3RhdGUgPSBvdGhlcjsKCiAgICAvKnRlbXBvcmFyeSBzdG9yYWdlIGZvciBjb29yZGluYXRlcyBiZWluZyBwYXJzZWQ6Ki8KICAgIGNoYXIgYWNjdW1bMTZdID0gezB9OwogICAgY2hhciogYWNjaXQgPSBhY2N1bTsKICAgIHdoaWxlIChmIT1sKQogICAgewogICAgICAgIHN3aXRjaChzdGF0ZSkgLypkdW1teSwgdGhlIHRyYW5zaXRpb25zIGZsb3cgaW4gZmFsbHRocm91Z2ggb3JkZXIgZm9yIG5vdyovCiAgICAgICAgewogICAgICAgICAgICBjYXNlIG90aGVyOgogICAgICAgICAgICAgICAgKihhY2NpdCA9IGFjY3VtKSA9IDA7IC8qcmVzZXQgdGhlIGFjY3VtdWxhdG9yKi8KICAgICAgICAgICAgICAgIHdoaWxlIChmIT1sICYmICEoKmY+PSdBJyAmJiAqZjw9J1onKSkKICAgICAgICAgICAgICAgICAgICAqbysrID0gKmYrKzsKICAgICAgICAgICAgICAgIC8qZmFsbHRocm91Z2gqLwogICAgICAgICAgICBjYXNlIGluX2Nvb3JkX2NvbDoKICAgICAgICAgICAgICAgIHdoaWxlIChmIT1sICYmICpmPj0nQScgJiYgKmY8PSdaJykKICAgICAgICAgICAgICAgICAgICAqYWNjaXQrKyA9ICpmKys7CiAgICAgICAgICAgICAgICAvKmZhbGx0aHJvdWdoKi8KICAgICAgICAgICAgY2FzZSBpbl9jb29yZF9yb3c6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXhwYW5kZWQgPSBhY2N1bTsKICAgICAgICAgICAgICAgICAgICBpZiAoZiE9bCAmJiAqZj49JzAnICYmICpmPD0nOScpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZiE9bCAmJiAqZj49JzAnICYmICpmPD0nOScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWNjaXQrKyA9ICpmKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGVkID0gZ2V0X2NlbGxfdmFsdWUoYWNjdW0sIGFjY2l0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgKmFjY2l0ID0gMDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpleHBhbmRlZCkKICAgICAgICAgICAgICAgICAgICAgICAgKm8rKyA9ICpleHBhbmRlZCsrOwogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKnN0YXRlID0gb3RoZXI7Ki8KICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gbzsKfQo=