#include<stdio.h>//两种删除代码
#include<stdlib.h>
typedef struct num
{
    int num;
    struct num *next;
}link;
link* create(int n)
{
    link* head,*node,*now;
    head =(link*)malloc(sizeof(link));
    now=head;
    for(int i=1;i<=n;i++)
    {
        node =(link*)malloc(sizeof(link));
        scanf("%d",&node->num);
        now->next= node;
        node->next=NULL;
        now =node;
    }
    return head;
}
void del(int n,link* head,int x)
{
    link* now,*node;
    node=head;
    while(node!=NULL&&node->next!=NULL)//因为我只用了一个Node指针,相当于有一个单双数的问题,有段错误,多调试几遍就会发现,所以加了一个判定条件
    {
        if(node->next->num==x)
        {
            now= node->next;
            node->next =now->next;
            free(now);
        }
        node =node->next;
    }
}
/*void del(int n,link* head,int x)//而这个函数既有node,又有nope,是一步一步来的,所以一个判定条件就行
{
    link* now,*node;
    node=head;
    link* nope=node->next;
    while(nope!=NULL)
    {
        if(nope->num==x)
        {
            node->next =nope->next;
            free(nope);
            nope =node->next;
        }
        else
        {
            node=node->next;
            nope =nope->next;
        }
        
    }
}
*/
void show(link* head ,int n)
{
    link* node;
    node=head->next;
   while (node!=NULL)
    {
        printf("%d ",node->num);
        node =node->next;
    }
}
int main()
{
    int n,x;
    scanf("%d%d",&n,&x);
    link* a=create(n);
    del(n,a,x);
    show(a,n);
    return 0;
}